总结创建窗口全过程

来源:互联网 发布:网络家长学校 编辑:程序博客网 时间:2024/06/06 15:59

用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默认的处理方法处理。

原创粉丝点击