我正在为 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 程序结构。谢谢!
(PS 两个资源帮助我做到了这一点:从初学者的角度检查菜单,如何判断窗口是否有焦点?(Win32 API))