【发布时间】:2012-07-02 00:04:01
【问题描述】:
我正在为 VS 2010 Pro 中的 Win32 编写 C++ 应用程序。该应用程序包含一个带有粘贴 项的编辑 菜单,并且应用程序的主窗口包含一个文本框控件。所有常规的剪切/复制/粘贴命令都在该控件中运行良好——这恰好是应用程序唯一的用户可编辑字段。
我想在文本框控件中没有光标闪烁时——即文本框没有焦点时——禁用粘贴菜单项——因为当文本框不是“活动”控件,无法进行剪切/复制/粘贴操作。
我可以使用以下代码启用/禁用菜单项(正如我在创建菜单后立即将这个 sn-p 放置在 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 程序结构。谢谢!
(PS 两个帮助我走到这一步的资源:@987654321@,How can I tell if a Window has focus? (Win32 API))
【问题讨论】: