win32gui ======= EnableMenuItem之百度解释

函数说明

编辑

允许、禁止或变灰指定的菜单条目

函数原型

编辑

BOOL EnableMenuItem(
  HMENU 
hMenu// handle to menu
  UINT uIDEnableItem// menu item to enable, disable, or gray
  UINT wEnable // menu item flags
  );

返回值 :返回值指定的先前状态菜单项。如果菜单项不存在,返回值是0xffffffff。

 

参数说明

编辑

参数类型及说明

hMenu ,菜单句柄

uIDEnableItem ,欲允许或禁止的一个菜单条目的标识符。如果在wEnable参数中设置了MF_BYCOMMAND标志,这个参数就代表欲改变菜单条目的命令ID。如设置的是MF_BYPOSITION,则这个参数代表菜单条目在菜单中的位置(第一个条目肯定是零)

wEnable ,参考ModifyMenu函数中的菜单常数标志定义表,其中列出了允许使用的所有常数。对于这个函数,只能指定下述常数:MF_BYCOMMAND,MF_BYPOSITION,MF_ENABLED,MF_DISABLED以及MF_GRAYED

这些值有下列含义:

· MF_BYCOMMAND 指定参数给出已存在的菜单项的命令ID号。此为缺省值。

· MF_BYPOSITION 指定参数给出已存在菜单项的位置。第一项所在的位置是0。

· MF_DISABLED 使菜单项无效,以便它不能被选择,但不变灰。

· MF_ENABLED 使菜单项有效,以便它能够被选择,并可从变灰的状态中恢复出来。

· MF_GRAYED 使菜单项无效,以便它不能被选择并同时变灰。

注解

如指定的菜单条目依附了一个弹出式菜单,那么整个弹出式菜单都会受到影响

 

备注

编辑

使菜单项有效、无效或变灰。CreateMenu,InsertMenu,ModifyMenu和LoadMenuIndirect成员函数同时也设置菜单项的状态(有效、无效、或变灰)。

使用MF_BYPOSITION的值需要应用恰当的CMenu对象。若菜单条的CMenu被使用,那么顶层菜单项(菜单条中的某项)将受影响。如果为了在弹出菜单或嵌套的弹出菜单中通过位置来设置项的状态,那么应用必须指定弹出菜单的CMenu。

当应用指定了MF_BYCOMMAND标志,那么Windows将检测所有的属于CMenu的弹出菜单项。因此,除非当前正在复制菜单项,那么使用菜单条的CMenu是非常有效的。

词条标签:

计算机学

转载于:https://my.oschina.net/piginwind/blog/693712

这是一个编程问题,可以直接回答。以下是一个简单的 C 代码示例,实现了一个窗口和一个非模式对话框菜单项,当用户点击该菜单项时,在主菜单条下添加一个弹出式菜单“对话框”,包含“打开”、“关闭”和“删除菜单”菜单项,初始情况下“删除菜单”为不可用。 ```c #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Register the window class const char CLASS_NAME[] = "Sample Window Class"; WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Create the window HWND hWnd = CreateWindowEx( 0, // Optional window styles CLASS_NAME, // Window class "Sample Window", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hWnd == NULL) { return 0; } // Show the window ShowWindow(hWnd, nCmdShow); // Run the message loop MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HMENU hPopupMenu = NULL; static BOOL bMenuEnabled = FALSE; switch (message) { case WM_CREATE: { // Create the popup menu hPopupMenu = CreatePopupMenu(); AppendMenu(hPopupMenu, MF_STRING, ID_OPEN, "打开"); AppendMenu(hPopupMenu, MF_STRING, ID_CLOSE, "关闭"); AppendMenu(hPopupMenu, MF_SEPARATOR, 0, NULL); AppendMenu(hPopupMenu, MF_STRING | MF_DISABLED, ID_DELETE, "删除菜单"); return 0; } case WM_COMMAND: { switch (LOWORD(wParam)) { case ID_DIALOG: { // Add the popup menu to the main menu HMENU hMenu = GetMenu(hWnd); if (hMenu != NULL) { InsertMenu(hMenu, -1, MF_BYPOSITION | MF_POPUP, (UINT_PTR)hPopupMenu, "对话框"); bMenuEnabled = TRUE; EnableMenuItem(hPopupMenu, ID_DELETE, MF_ENABLED); DrawMenuBar(hWnd); } return 0; } case ID_OPEN: { // Handle the "打开" menu item MessageBox(hWnd, "打开", "提示", MB_OK); return 0; } case ID_CLOSE: { // Handle the "关闭" menu item MessageBox(hWnd, "关闭", "提示", MB_OK); return 0; } case ID_DELETE: { // Handle the "删除菜单" menu item HMENU hMenu = GetMenu(hWnd); if (hMenu != NULL) { RemoveMenu(hMenu, -1, MF_BYPOSITION); bMenuEnabled = FALSE; EnableMenuItem(hPopupMenu, ID_DELETE, MF_DISABLED | MF_GRAYED); DrawMenuBar(hWnd); } return 0; } } break; } case WM_DESTROY: { // Destroy the popup menu DestroyMenu(hPopupMenu); PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值