单击按钮后,工具提示不再显示

2023-12-20

我想创建一个简单的tooltip当用户将鼠标悬停在button.

为此我研究了这个例子来自MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/hh298368%28v=vs.85%29.aspx.

当我时一切正常first时间悬停在button,但在那之后tooltip never再次出现(我已经检查了返回值HWND of the tooltip并为SendMessage( ..., TTM_ADDTOOL, ... )并且没有错误 ).

我尝试在网上寻找解决方案,但失败了。我发现的唯一资源might有用的是本教程 http://www.interq.or.jp/chubu/r6/masm32/tute/tute027.html但它建议subclass控件以便将鼠标消息中继到tooltip控制-Iwill not接受这种类型的解决方案,因为我相信我要求的是基本功能 tooltip控制提供。


2014 年 1 月 21 日编辑:

按照指示链接成员Stuart建议* http://social.msdn.microsoft.com/Forums/vstudio/en-US/757905ce-7a32-4b1a-a73b-a2992556b242/initcommoncontrolsex-returns-false我能够部分解决这个问题。现在tooltip单击主窗口的客户区然后将鼠标悬停在按钮上后会显示。

然而,当我点击按钮后 tooltip再也不会出现了。

通过互联网浏览,我发现这个例子 http://winapi.foosyerdoos.org.uk/code/commoncntrls/htm/createtooltips.php添加这些指令后:

#pragma comment( linker, "/manifestdependency:\"type='win32' \
    name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
    processorArchitecture='*' publicKeyToken='6595b64144ccf1df' \
    language='*'\"")

#pragma comment( lib, "comctl32.lib")

问题似乎消失了。现在我可以单击按钮,将鼠标悬停在编辑控件上并编辑控件的tooltip会出现。

但是,单击按钮后,然后单击主窗口的客户区,然后悬停再次按下按钮tooltip没有显示!

然后我继续在网上搜索,发现本文 http://www.codeproject.com/Articles/20729/Tool-Tip-Class on 代码项目它正是我所需要的。

所以我开始分析源代码第一个示例和本文的内容。我看不出有什么不同。然而,外表不同!看来这篇文章did not use Visual Styles,并考虑到MSDN article member Stuart提到过,我开始怀疑这可能是明显的问题.

所以我尝试编译所有程序而无需第一个pragma comment上面提交的,但在我的测试应用程序中(创建的应用程序为default Win32 project ) InitCommonControlsEx失败,在示例程序中我遇到错误Failed to save the updated manifest to the file ".\Debug\foosyerdoos tooltip.exe.embed.manifest". The parameter is incorrect.,并且文章应用创建失败tooltip控制。

创建新的空白项目后,并从第一个示例复制代码后(仅这次没有)pragma comment-SendMessage两者都添加失败tooltips.

所以,没有第一pragma comment上面提交了,我不能用tooltip控制似乎如此。

编辑结束


以下是创建说明问题的最小示例的说明:

  1. Create default Win32 project in MS Visual Studio;
  2. 添加以下内容WM_CREATE处理程序:

    case WM_CREATE:
        {
            HWND hButton = CreateWindowEx( 0, L"Button", L"test me!", 
                WS_CHILD | WS_VISIBLE | WS_BORDER | BS_PUSHBUTTON,
                50, 150, 150, 25, hWnd, (HMENU)8003, hInst, 0 );
    
            HWND hwndTip = CreateWindowEx( NULL, TOOLTIPS_CLASS, NULL,
                WS_POPUP | TTS_ALWAYSTIP,
                CW_USEDEFAULT, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT,
                hWnd, NULL, hInst, NULL );
    
            // Associate the tooltip with the tool.
            TOOLINFO toolInfo = { 0 };
            toolInfo.cbSize = sizeof(toolInfo);
            toolInfo.hwnd = hWnd;
            toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
            toolInfo.uId = (UINT_PTR)hButton;
            toolInfo.lpszText = L"test 1";
    
            SendMessage( hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo );
        }
        return 0L;
    
  3. 编译并运行——tooltip应该显示在first悬停,但是never again.

我致力于Windows XP, using MS Visual Studio Express 2008.

Visual Styles已启用,我已链接comctl32.lib并已发起INITCOMMONCONTROLSEX结构的dwICC成员与ICC_STANDARD_CLASSES | ICC_TAB_CLASSES | ICC_BAR_CLASSES.


编辑(2014 年 1 月 31 日):

在我的笔记本电脑上测试了这个完全相同的代码片段后,Windows 7我可以确认一切正常。这是我的问题Windows XP我猜...

编辑结束:


我的问题很简单:

如何调整我的代码以便tooltip显示每次用户将鼠标悬停在button?

谢谢。

此致。


您正在寻找错误的问题,此行为是工具提示的设计使然。我所知道的任何地方都没有记录它使用的确切规则,而且我个人从未发现有必要对其进行逆向工程,因此我只能告诉您我所看到的。

该功能背后更大的想法是,它可以避免用户因已知的信息而感到疲惫。工具提示的设计目的是tips,只是一小部分信息,对于程序的正确运行并不重要。它似乎是通过跟踪已经显示的工具的提示来实现的not如果使用过该工具,则再次显示它。这当然很有意义,用户在使用工具后不需要被提醒做什么。

没有消息可以重置“提示已显示”状态。当它显示另一个工具的提示时,它将重置。改变尖端也会重置它。

我重申这是你应该做的事情not尝试修复。这种行为是完全明智的。如果它很重要,那么您必须自己控制并显示提示,TTM_ACTIVATE 消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击按钮后,工具提示不再显示 的相关文章

随机推荐