我想创建一个简单的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
两者都添加失败tooltip
s.
所以,没有第一pragma comment
上面提交了,我不能用tooltip
控制似乎如此。
编辑结束
以下是创建说明问题的最小示例的说明:
- Create
default Win32 project
in MS Visual Studio
;
-
添加以下内容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;
编译并运行——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
?
谢谢。
此致。