功能表及其他资源(二十九)

2010-12-30 21:13:27 · 作者: · 浏览: 36439
m): 功能表ID 控制项ID HIWORD (wParam): 0 通知码 lParam: 0 子视窗代号

WM_SYSCOMMAND讯息类似於WM_COMMAND讯息,只是WM_SYSCOMMAND表示使用者从系统功能表中选择一个启用的功能表项:

wParam: 功能表ID

lParam: 0

然而,如果WM_SYSCOMMAND讯息是由按滑鼠按键产生的,LOWORD(lParam)和HIWORD(lParam)将包含滑鼠游标位置的x和y萤幕座标。

对於WM_SYSCOMMAND,功能表ID指示系统功能表中的哪一项被选中。对於预先定义的系统功能表项,较低的那四个位元应该和0xFFF0进行AND运算来遮罩掉,结果值应该为下列之一:SC_SIZE、SC_MOVE、SC_MINIMIZE、SC_MAXIMIZE、SC_NEXTWINDOW、SC_PREVWINDOW、SC_CLOSE、SC_VSCROLL、SC_HSCROLL、SC_ARRANGE、SC_RESTORE和SC_TASKLIST。此外,wParam可以是SC_MOUSEMENU或SC_KEYMENU。

如果您在系统功能表中添加功能表项,那么wParam的低字组将是您定义的功能表ID。为了避免与预先定义的功能表ID相冲突,应用程式应该使用小於0xF000的值,这对於将一般的WM_SYSCOMMAND讯息发送给DefWindowProc是很重要的。如果您不这样做,那么您实际上就是禁用了正常的系统功能表命令。

我们将讨论的最後一个讯息是WM_MENUCHAR。实际上,它根本不是功能表讯息。在下列两种情况之一发生时,Windows会把这个讯息发送到视窗讯息处理程式:如果使用者按下Alt和一个与功能表项不匹配的字元时,或者在显示突现式功能表而使用者按下一个与突现式功能表里的项目不匹配的字元键时。随WM_MENUCHAR讯息一起发送的参数如下所示:

LOWORD (wParam): 字元代码(ASCII或Unicode)

HIWORD (wParam): 选择码

lParam: 功能表代号

选择码是:

Windows程式通常把该讯息传递给DefWindowP