[英]“Caps Lock is on”-tooltip doesn't go away (Citrix? Codejock?)
我正在使用MFC应用程序。 在某些表单中,我们具有密码字段-设置了ES_PASSWORD
样式的普通CEdit
控件。 将焦点移到密码字段时,如果用户启用了Caps Lock键,则Windows将显示工具提示警告。 (请参见此处的screendump )可以-密码区分大小写,因此最好告知用户应该关闭Caps Lock。
但是有时警告不会消失。 即使在CEdit
控件(和整个视图窗口)被删除/销毁之后。 “工具提示气球”将保留在屏幕上,并位于其他所有内容的顶部。 (隐藏新控件。)摆脱它的唯一方法是关闭应用程序并重新启动它。
该问题并不经常出现,但对于用户而言却很烦人。 据我们所知,这仅发生在在Citrix下运行我们的应用程序的用户上,而不是在独立PC上。 我们的应用程序使用的是Codejock的XTP,但是工具提示已本地化,因此它似乎是Windows生成的。
(1)有人知道这是什么原因吗? 我们尚未在线上找到任何有关它的信息! 可能是Citrix问题吗? 还是我们错在Windows上,这可能是Codejock错误吗?
(2)有没有办法解决这个问题? ( CEdit::HideBalloonTip
/ EM_HIDEBALLOONTIP
没有帮助。)
(3)如果无法解决问题,是否可以完全禁用CEdit
控件的“ Caps Lock on”(打开大写锁定)-tooltip? 最好不要显示此工具提示,而不要出现此问题。
为了抑制气囊顶端可以过滤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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.