其实win32最主要的特点就是消息循环,它包含了俩个基本的函数
(1) LRESULT CALLBACK WndProc( HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
这个函数叫窗口函数, 接收消息并做出相应处理,比如(WM_MOUSEMOVE、WM_DESTROY),CALLBACK是一种函数调用习惯,被定义为__stdcall,说明此函数为回调函数,由系统自动调用的,当窗口接收到消息并DispatchMessage之后,系统就自动调用窗口函数WndProc了。注意窗口函数中消息的分支结构中default分支必须是return DefWindowProc ( hWnd, message, wParam, lParam );因为不论什么消息都必须被处理,DefWindowProc是windows内部预设的消息处理函数。
(2) int WINAPI WinMain ( HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow )
参数说明:hInst 为当前实例句柄,Windows 环境下用于区别同一应用程序的不同实例;hPrevInst应用程序先前实例的句柄(如果有的话),否则为 NULL,可以用来确定当前实例是否为应用程序的第一个实例;lpCmdLine是以NULL结尾的命令行字符串长指针;nCmdShow指定窗口初始显示方式的整型常量(1 = 通常;7 = 最小化) 。
框架结构与步骤
注册窗口---->创建窗口----->显示和更新窗口---->消息循环
WNDCLASSEX wcex;
wcex.cbSize = sizeof( WNDCLASSEX );
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC) WndProc
............................
RegisterClassEx(&wcex); //注册窗口
HWND hwnd; //定义一个句柄,把生成的窗口句柄赋给hwnd
hwnd=CreateWindow("Weixin2003",
"This is my test ! ",
WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,
hInstance,NULL); // 根据初始化的窗口类,创建该窗口。并把句柄赋给hwnd。
如果想要全屏显示的话,屏幕参数可以为
0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN),
//显示和更新窗口
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg); //对消息反应就会自动调用窗口函数
}
//窗口函数
LRESULT CALLBACK WndProc( HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY: //结束应用程序
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam); //调用内被预设的消息处理函数,是必须写的
}
}
这样,一个win32窗口框架程序就介绍完了~~