c++ - 在 Win32 C++ 代码中的哪个位置放置 SetMenuItemInfo() 以根据焦点启用/禁用?

标签 c++ winapi menuitem paste

我正在 VS 2010 Pro 中为 Win32 编写 C++ 应用程序。该应用程序包含一个带有粘贴 项的编辑 菜单,并且该应用程序的主窗口包含一个文本框控件。所有常规的剪切/复制/粘贴命令都在该控件中运行良好——这恰好是应用程序唯一的用户可编辑字段。

我想在文本框控件中没有光标闪烁时禁用粘贴菜单项——也就是说,当文本框没有焦点时——因为当文本框不是“事件”控件,无法执行剪切/复制/粘贴操作。

我可以使用以下代码启用/禁用菜单项(正如我通过在创建菜单后立即将此代码段放在 WM_CREATE 中进行测试一样——作为测试)。我不知道在我的程序中放置代码的位置,以便在正常用户事件(例如鼠标单击)过程中调用它,这会将焦点从文本框移开/返回到文本框。

MENUITEMINFO mii = { sizeof(MENUITEMINFO) };
mii.fMask = MIIM_STATE;
GetMenuItemInfo(hMenu, ID_EDIT_PASTE, FALSE, &mii);
mii.fState ^= MFS_DISABLED;
SetMenuItemInfo(hMenu, ID_EDIT_PASTE, FALSE, &mii);

将代码放置在正确的位置后,我计划将其嵌入到 if 语句中,以便它仅在应用程序的文本框没有焦点时运行(禁用菜单项) :

if(GetFocus() != hWndTextbox)

也许在我的CALLBACK switch(msg) 部分中有一个case 语句,它应该全部驻留在哪里?我仍在学习基本的 C++ Win32 程序结构。谢谢!

(请注意,帮助我走到这一步的两个资源:An examination of menus from a beginner's point of viewHow can I tell if a Window has focus? (Win32 API))

最佳答案

我想你在找WM_INITMENUPOPUP .这是在菜单即将显示时发送的,因此您可以进行任何必要的检查并适本地启用/禁用菜单项。

关于c++ - 在 Win32 C++ 代码中的哪个位置放置 SetMenuItemInfo() 以根据焦点启用/禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286583/

相关文章:

android - 为什么 item.getMenuInfo() 为空?

c++ - 哪些规则控制在类型之间使用多个用户定义的转换?

c++ - MSVC 静态常量模板成员初始化失败

sockets - 来自特定网卡的 UDP 组播

c++ - 将 PID 转换为 HWND

.htaccess - 如何重写 .htaccess 中菜单项的 URL

twitter-bootstrap - 推特 Bootstrap 。事件菜单项标记

c++ - 我需要在 Windows 上同步对 HANDLE 的访问吗?

c++ - Visual Studio 2010 C++,无法打开包含文件 : 'afxwin.h' , 'TCHAR.H' 和 'cassert'

c++ - getAsyncKeyState 无法识别键输入