用SDK创建窗口的过程,是程序和Windows交互的过程。创建过程的每一步都要用到Windows API。
第一步创建窗口类:即定义一个WNDCLASS对象,然后填充其内的变量。如:
WNDCLASS wc;
wc.style=CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;//指向窗口过程函数的指针
......
定义好后,进入第二步注册窗口类:即调用Windows API RegisterClass(&wc)即可注册窗口类wc。
第三步创建窗口:这一步要用到CreateWindow(......)它返回一个窗口ID句柄。我们用HWND类型变量获得该值。以后要用到该窗口,将该变量导入即可。
第四步显示和更新窗口:即调用 ShowWindow (hwnd, iCmdShow) 和UpdateWindow (hwnd)显示和更新和hwnd对应的窗口。iCmdShow告诉它如何显示这个窗口。
第五步创建循环消息:
while (GetMessage (&msg, NULL, 0, 0))//从消息队列中取出一条消息
{
TranslateMessage (&msg) ;//进行消息(如键盘消息)转换
DispatchMessage (&msg); //分派消息到窗口的回调函数处理,(OS调用窗口回调函数进行处理)。
}
这里调用了三个API,注释已经写得很清楚了。其中DispatchMessage调用的回调函数即是我们上面在创建窗口类时定义的wc.lpfnWndProc = WndProc,WndProc(......)的这个语句中被定义为回调函数。我们一会还得定义 WndProc(......)。循环体退出的条件是当GetMessage()取出的消息是WM_QUIT时。其它消息则会进行处理。
第六步终止应用程序:
return msg.wParam ; //表示从PostQuitMessage返回的值
第七步完成回调函数(WndProc):
回调函数定义如下:
LRESULT CALLBACK WndProc (HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{ switch (message)
{case WM_XXXXX:
//相应的处理方法
return x;
......
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
完成...
//如果没有定义相应的消息处理函数就用Windows默认的处理方法处理。