专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » windowsapi函数:Windows API一日一练(9)WindowProc和DefWindowProc函数 »正文

windowsapi函数:Windows API一日一练(9)WindowProc和DefWindowProc函数

来源: 发布时间:星期一, 2009年9月28日 浏览:2次 评论:0
  在Windows操作系统里当窗口显示的后它就可以接收到系统源源不断地发过来消息然后窗口就需要处理这些消息因此就需要来处理这些消息在API里定义了为回调当系统需要向窗口发送消息时就会窗口给出回调WindowProc如果WindowProc不处理这个消息就可以把它转向DefWindowProc来处理这是系统默认消息处理当你按下菜单或者点击窗口时窗口需要运行这个消息处理

  WindowProc声明如下:

LRESULT CALLBACK WindowProc(          HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);


  hwnd是当前窗口句柄

  uMsg是系统发过来消息

  wParam是消息参数

  lParam是消息参数

  这个定是静态也就是全局在编译时已经确定了地址由于它需要设置在注册窗口类型里如下:

#008 ATOM MyRegisterClass(HINSTANCE hInstance)
#009 {
#010  WNDCLASSEX wcex;
#011 
#012  wcex.cbSize = (WNDCLASSEX);
#013 
#014  wcex.style             = CS_HREDRAW | CS_VREDRAW;
#015  wcex.lpfnWndProc = WndProc;


  第15行就是设置窗口消息处理

  DefWindowProc声明如下:

LRESULT DefWindowProc(          HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);


  这个参数跟上面那个

  只不过它是处理所有默认消息

  这两个例子如下:

#001 //
#002 // : WndProc(HWND, UINT, WPARAM, LPARAM)
#003 //
#004 // 目: 处理主窗口消息.
#005 //
#006 // 蔡军生 2007/07/12
#007 //
#008 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#009 {
#010   wmId, wmEvent;
#011  PAINTSTRUCT ps;
#012  HDC hdc;
#013 
#014  switch (message)
#015  {
#016   WM_COMMAND:
#017         wmId    = LOWORD(wParam);
#018         wmEvent = HIWORD(wParam);
#019         // 菜单选项命令响应:
#020         switch (wmId)
#021         {
#022          IDM_ABOUT:
#023               DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
#024               ;
#025          IDM_EXIT:
#026               DestroyWindow(hWnd);
#027               ;
#028         default:
#029                DefWindowProc(hWnd, message, wParam, lParam);
#030         }
#031         ;
#032   WM_PAINT:
#033         hdc = BeginPa(hWnd, &ps);
#034         //
#035         EndPa(hWnd, &ps);
#036         ;
#037   WM_DESTROY:
#038         PostQuitMessage(0);
#039         ;
#040  default:
#041          DefWindowProc(hWnd, message, wParam, lParam);
#042  }
#043   0;
#044 }


  第8行定义消息处理

  第14行开始根据区别消息作处理

  第29行和第41行都是DefWindowProc来处理未处理消息

  有了窗口消息处理就可以响应区别消息实现各种各样功能

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: