如果使用了数值,那么LoadMenu呼叫采用如下的形式:
然後,您可以将这个功能表代号作为CreateWindow的第九个参数:
在这种情况下,CreateWindow呼叫中指定的功能表可以覆盖视窗类别中指定的任何功能表。如果CreateWindow的第九个参数是NULL,那么您可以把视窗类别中的功能表看作是这种视窗类别的视窗内定使用的功能表。这样,您可以为依据同一视窗类别建立的几个视窗使用不同的功能表。
您也可以在视窗类别中指定NULL功能表,并且在CreateWindow呼叫中也指定NULL功能表,然後在视窗被建立後再给视窗指定一个功能表:
这种形式使您可以动态地修改视窗的功能表。在本章後面的NOPOPUPS程式中我们将会看到这方面的例子。
当视窗被清除时,与视窗相关的所有功能表都将被清除。与视窗不相关的功能表在程式结束前通过呼叫DestroyMenu主动清除。
功能表和讯息
当使用者选择一个功能表项时,Windows通常向视窗讯息处理程式发送几个不同的讯息。在大多数情况下, 您的程式可以忽略大部分讯息,只需把它们传递给DefWindowProc即可。WM_INITMENU就是这一类的讯息,它具有下列参数:
wParam: 主功能表代号
lParam: 0
wParam值是您的主功能表代号,即使使用者选择的是系统功能表中的项目。Windows程式通常忽略WM_INITMENU讯息。尽管在选中该项之前的讯息已经给程式提供了修改功能表的机会,但是我们觉得此刻改变顶层功能表是会扰乱使用者的。
程式也会接收到WM_MENUSE