您的位置:首页 > 其它

查看事件发生顺序的方法

2006-11-05 13:07 260 查看
可以在窗体的消息处理函数中:

LRESULT CSkinWnd::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
{
  static   int   i;  
  char   buf[32];  
  sprintf(buf,"%d   0x%04x/n",i++,msg);  
  OutputDebugString(buf);  

。。。。。。

}

这样就可以将消息ID打印出来,再到VC中查到具体的ID对应的消息

如果是dialog等,可以改变窗体的消息响应函数到自己定义的函数,以方便查看。方法如下:

SetWindowLong(hwnd, GWL_WNDPROC, (DWORD)HookWndProc);

hwnd: 要改变的窗体句柄
HookWndProc:消息处理函数,原型如上

利用这种方法跟踪dialog的启动得到如下结果:

0   0x0046 WM_WINDOWPOSCHANGING
1   0x0047 WM_WINDOWPOSCHANGED
2   0x0003 WM_MOVE
3   0x007f WM_GETICON
4   0x0083 WM_NCCALCSIZE
5   0x0046
6   0x001c WM_ACTIVATEAPP
7   0x0086 WM_NCACTIVATE
8   0x0006 WM_ACTIVATE
9   0x036e
10   0x0400 WM_USER
11   0x0018 WM_SHOWWINDOW
12   0x0046
13   0x0085 WM_NCPAINT
14   0x0014 WM_ERASEBKGND

15   0x0136 WM_CTLCOLORDLG
16   0x0047 WM_WINDOWPOSCHANGED
17   0x000f WM_PAINT
18   0x0135 WM_CTLCOLORBTN
19   0x0135
20   0x0135
21   0x007f
22   0x007f
23   0x007f
24   0x036a
25   0x036a

得出常用事件的顺序为:

WM_MOVE
WM_ACTIVATE
WM_SHOWWINDOW
WM_NCPAINT
WM_ERASEBKGND
WM_CTLCOLORDLG
WM_PAINT
WM_CTLCOLORBTN

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dialog user c