"大写锁定开启" -tooltip不会消失(Citrix?Codejock?)

时间:2016-12-11 12:58:31

标签: windows mfc tooltip citrix capslock

我正在使用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?最好不要显示工具提示,而不是出现这个问题。

1 个答案:

答案 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;
}