【问题标题】:"Caps Lock is on"-tooltip doesn't go away (Citrix? Codejock?)“Caps Lock 已开启”-工具提示不会消失(Citrix?Codejock?)
【发布时间】:2016-12-11 12:58:31
【问题描述】:

我正在使用 MFC 应用程序。在我们的一些表单中,我们有密码字段——普通的CEdit 控件,带有ES_PASSWORD 样式集。当焦点移到密码字段时,如果用户打开了 Caps Lock,Windows 会显示工具提示警告。 (请参阅screendump here)这没关系 - 密码区分大小写,所以最好通知用户他应该关闭 Caps Lock。

但有时警告并没有消失。即使CEdit 控件(和整个视图窗口)已被删除/销毁。 “工具提示气球”保留在屏幕上,位于其他所有内容之上。 (隐藏新控件。)摆脱它的唯一方法是关闭应用程序并重新启动它。

这个问题不会经常出现,但当它出现时会让用户非常恼火。据我们所知,这只发生在在 Citrix 下运行我们的应用程序的用户身上——而不是在独立 PC 上。我们的应用程序使用 Codejock 的 XTP,但工具提示已本地化,因此它似乎是由 Windows 生成的。

(1) 有人知道是什么原因造成的吗?我们一直无法在网上找到任何关于它的信息!会不会是 Citrix 的问题?或者我们认为这是 Windows 的问题 - 这可能是 Codejock 错误吗?

(2) 有没有办法解决这个问题? (CEdit::HideBalloonTip/EM_HIDEBALLOONTIP 没有帮助。)

(3) 如果问题没有解决办法,我们可以完全禁用CEdit 控件的“Caps Lock is on”工具提示吗?最好根本不显示工具提示,而不是遇到这个问题。

【问题讨论】:

  • 如果您可以重现问题,您可能想尝试使用 Spy++ 来获取工具提示窗口的特征。这可以帮助您确定窗口是否仍然显示(在您的代码中)并提供关闭它的能力。
  • 在CEdit的父窗口中,覆盖OnLButtonDown并调用CEdit::HideBalloonTip或SetFocus(),查看当用户点击父窗口时工具提示是否关闭。

标签: windows mfc tooltip citrix capslock


【解决方案1】:

要抑制气球提示,您可以按照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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2022-11-10
    • 2010-09-24
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多