自己的第一个windows程序
2013-05-13 20:52
281 查看
自己完成的第一个程序,真心不容易。。。通过我大概齐学了6章之后,第一个windows程序终于做出来了。。。
今天实在是挺高兴的,发个博客记录一下,既是激励自己努力学习,也是肯定下一下自己真的坚持到了写出第一个windows程序。。
以前看windows程序都是看一个星期之后,觉得写不出来东西就坚持不下去了。。。现在我也能挺过来,做出点东西,好,很好,继续努力中...............
程序内容大概就是 第一行用textout输出“请用键盘输入:”,然后下一行输出键盘输入的程序。
程序大概就是这个样子,后来发现还能改进,就是把判断回车键放到里面,这样子做起来好像就是dos下面的模拟操作了。。
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("KeyView1") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Keyboard Message Viewer #1"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClientMax, cyClientMax, cxClient, cyClient, cxChar, cyChar , cLinesMax;
HDC hdc ;
int i = 0, iType, j ;
PAINTSTRUCT ps ;
static TCHAR szBuffer[70] ; //szKeyName [32] ;
TEXTMETRIC tm ;
static RECT rectScroll ;
static int * tpmsg, *ina;
static int isz = 0;
TCHAR szTop[ 20 ] = L"请用键盘输入:" ;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
//等宽字体
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
ReleaseDC (hwnd, hdc) ;
return 0;
/*case WM_DISPLAYCHANGE:
//窗口分辨率改变时会发送这个消息
// Get maximum size of client area
cxClientMax = GetSystemMetrics (SM_CXMAXIMIZED) ;
cyClientMax = GetSystemMetrics (SM_CYMAXIMIZED) ;
//窗口最大化缺省值
// Get character size for fixed-pitch font */
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
// Calculate scrolling rectangle
if( tpmsg )
free( tpmsg );
cLinesMax = cxClient / cxChar ;
tpmsg = ( int * ) malloc ( cLinesMax * sizeof( int ) ) ;
rectScroll.left = 0 ;
rectScroll.right = cxClient ;
rectScroll.top = cyChar ;
rectScroll.bottom = 2 * cyChar;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_CHAR:
switch( wParam )
{
case VK_RETURN:
break;
default:
szBuffer[ isz++ ] = wParam ;
InvalidateRect( hwnd, &rectScroll, TRUE ) ;
//是第二行变为无效区域,并把WM_PAINT消息放入队列
UpdateWindow( hwnd ) ;
//判断是否有无效区域( WM_PAINT ),如果有就立刻刷新屏幕
break;
}
return 0;
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps ) ;
SelectObject( hdc, GetStockObject( SYSTEM_FIXED_FONT ) );
SetBkMode( hdc, TRANSPARENT ) ;
TextOut( hdc, 0, 0, szTop, lstrlen( szTop ) ) ;
TextOut( hdc, 0, cyChar, szBuffer, lstrlen( szBuffer ) ) ;
EndPaint( hwnd, &ps ) ;
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
今天实在是挺高兴的,发个博客记录一下,既是激励自己努力学习,也是肯定下一下自己真的坚持到了写出第一个windows程序。。
以前看windows程序都是看一个星期之后,觉得写不出来东西就坚持不下去了。。。现在我也能挺过来,做出点东西,好,很好,继续努力中...............
程序内容大概就是 第一行用textout输出“请用键盘输入:”,然后下一行输出键盘输入的程序。
程序大概就是这个样子,后来发现还能改进,就是把判断回车键放到里面,这样子做起来好像就是dos下面的模拟操作了。。
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("KeyView1") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Keyboard Message Viewer #1"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClientMax, cyClientMax, cxClient, cyClient, cxChar, cyChar , cLinesMax;
HDC hdc ;
int i = 0, iType, j ;
PAINTSTRUCT ps ;
static TCHAR szBuffer[70] ; //szKeyName [32] ;
TEXTMETRIC tm ;
static RECT rectScroll ;
static int * tpmsg, *ina;
static int isz = 0;
TCHAR szTop[ 20 ] = L"请用键盘输入:" ;
switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
//等宽字体
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight ;
ReleaseDC (hwnd, hdc) ;
return 0;
/*case WM_DISPLAYCHANGE:
//窗口分辨率改变时会发送这个消息
// Get maximum size of client area
cxClientMax = GetSystemMetrics (SM_CXMAXIMIZED) ;
cyClientMax = GetSystemMetrics (SM_CYMAXIMIZED) ;
//窗口最大化缺省值
// Get character size for fixed-pitch font */
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
// Calculate scrolling rectangle
if( tpmsg )
free( tpmsg );
cLinesMax = cxClient / cxChar ;
tpmsg = ( int * ) malloc ( cLinesMax * sizeof( int ) ) ;
rectScroll.left = 0 ;
rectScroll.right = cxClient ;
rectScroll.top = cyChar ;
rectScroll.bottom = 2 * cyChar;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_CHAR:
switch( wParam )
{
case VK_RETURN:
break;
default:
szBuffer[ isz++ ] = wParam ;
InvalidateRect( hwnd, &rectScroll, TRUE ) ;
//是第二行变为无效区域,并把WM_PAINT消息放入队列
UpdateWindow( hwnd ) ;
//判断是否有无效区域( WM_PAINT ),如果有就立刻刷新屏幕
break;
}
return 0;
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps ) ;
SelectObject( hdc, GetStockObject( SYSTEM_FIXED_FONT ) );
SetBkMode( hdc, TRANSPARENT ) ;
TextOut( hdc, 0, 0, szTop, lstrlen( szTop ) ) ;
TextOut( hdc, 0, cyChar, szBuffer, lstrlen( szBuffer ) ) ;
EndPaint( hwnd, &ps ) ;
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
相关文章推荐
- 第一个轮子wlazyload插件。为了解决自己系统里面图片懒加载的简单插件
- 创建自己的第一个小程序
- C#初学者—— 终于写出了自己第一个比较满意的程序
- www.yzcode.com Flash广告下载,自己利用从此网站下载的Flash广告制作了自己第一个广告
- 自己编写的第一个程序!
- lesson 10:用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜
- 纪念自己编写的第一个java小游戏,飞翔小鸟
- 【玩转微信公众平台之九】 第一个功能:消息自己主动回复
- 发布自己的module - 我的第一个npm组件!
- 自己第一个正儿八经的div+css页面
- 自己写的第一个PHP作品
- java 多线程实例,自己写的第一个例子,理解什么是多线程,怎么写多线程
- 写给三公主和自己的第一个博客
- Visual Studio 2010——C#的第一个Windows程序
- 自己的第一个商业项目终于要结束了
- 在myeclipse 中部署自己的第一个jsp成功
- 第一个自己写的python程序:windows下备份文件
- 自己第一个blog
- 动手写自己的第一个"操作系统"
- 第一次在csdn写日记--记第一个自己的项目