我正在使用MFC应用程序。在我们的一些表单中,我们有密码字段 - 普通CEdit
控件,其中ES_PASSWORD
样式集。当焦点移动到密码字段时,如果用户打开了Caps Lock,Windows将显示工具提示警告。 (参见screendump here)哪个好 - 密码区分大小写,所以用户得到通知他应该关闭大写锁定是好的。
但有时警告并没有消失。即使在CEdit
控件(和整个视图窗口)被删除/销毁之后也是如此。 "工具提示气球"在屏幕上,在其他一切之上。 (隐藏新控件。)摆脱它的唯一方法是关闭应用程序并重新启动它。
这个问题并不经常出现,但对用户来说非常烦人。据我们所知,这只发生在Citrix下运行我们的应用程序的用户 - 而不是在独立的PC上。我们的应用程序使用Codejock的XTP,但工具提示已本地化,因此它似乎是由Windows生成的。
(1)有谁知道这会引起什么?我们还没能在网上找到任何关于它的信息!这可能是Citrix的问题吗?或者我们错误地认为这是一个Windows的东西 - 这可能是一个Codejock错误吗?
(2)有没有办法解决这个问题? (CEdit::HideBalloonTip
/ EM_HIDEBALLOONTIP
无效。)
(3)如果没有问题的解决方案,我们是否可以为CEdit
控件完全禁用"大写锁定开启" -tooltip?最好不要显示工具提示,而不是出现这个问题。
答案 0 :(得分:0)
要取消气球提示,您可以按照here所述过滤EM_SHOWBALLOONTIP
消息:
WNDPROC g_wpEdit;
LRESULT CALLBACK NoBalloonWndProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case EM_SHOWBALLOONTIP: return FALSE;
}
return CallWindowProc(g_wpEdit, hwnd, uMsg, wParam, lParam);
}
BOOL
OnCreate(HWND hwnd, LPCREATESTRUCT lpcs)
{
g_hwndChild = CreateWindow(TEXT("edit"), NULL,
ES_PASSWORD | WS_CHILD | WS_VISIBLE, 0, 0,
0, 0, hwnd, NULL, g_hinst, 0);
if (!g_hwndChild) return FALSE;
g_wpEdit = SubclassWindow(g_hwndChild, NoBalloonWndProc);
return TRUE;
}