在 Win32 中的位置C++代码放置 SetMenuItemInfo() 以根据焦点启用/禁用
Where in Win32 C++ code to place SetMenuItemInfo() to enable/disable based on focus?
我正在为 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)
也许在我的回调开关(msg)部分中有一个案例语句,这应该全部驻留在其中?我仍在学习基本的 Win32 程序结构C++。谢谢!
(PS 两个帮助我走到这一步的资源:从初学者的角度检查菜单,如何判断窗口是否有焦点?(Win32 API))
我想你正在寻找WM_INITMENUPOPUP。 这是在即将显示菜单时发送的,因此您可以执行任何必要的检查并适当地启用/禁用菜单项。
所以你想在编辑控件没有焦点/失去焦点时禁用菜单?
在 WndProc 中,"编辑"控件以WM_COMMAND的形式发送通知,您感兴趣的两个是:EN_KILLFOCUS - 当控件失去键盘焦点时EN_SETFOCUS - 当控件获得键盘焦点时。
相关文章:
- 嵌入方指针压缩已禁用
- clang格式:禁用排序包含
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 如何在C++生成器中禁用"使用调试.dcus"
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 如何禁用 CPU 的无序执行
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 如何禁用VTK的热键
- 在C++中禁用宏中的逗号
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- MFC:如何设置CEdit框的焦点?
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- 如何使用 CLANG 禁用格式安全错误?
- 如果存在从"双精度"到"T"的转换,则禁用构造函数
- 如何在QSplashScreen中禁用鼠标单击
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- 禁用对透视的焦点
- 如何在对话框首次启动时禁用编辑控件的焦点?
- 在 Win32 中的位置C++代码放置 SetMenuItemInfo() 以根据焦点启用/禁用