可以在窗体的消息处理函数中:
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