- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,我正在处理 WM_HELP
消息,然后使用此方法为控件创建工具提示:
取自:http://msdn.microsoft.com/en-us/library/bb760252(v=vs.85).aspx
HWND CreateToolTip(int toolID, HWND hDlg, PTSTR pszText)
{
if (!toolID || !hDlg || !pszText)
{
return FALSE;
}
// Get the window of the tool.
HWND hwndTool = GetDlgItem(hDlg, toolID);
// Create the tooltip. g_hInst is the global instance handle.
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hDlg, NULL,
g_hInst, NULL);
if (!hwndTool || !hwndTip)
{
return (HWND)NULL;
}
// Associate the tooltip with the tool.
TOOLINFO toolInfo = { 0 };
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = hDlg;
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)hwndTool;
toolInfo.lpszText = pszText;
SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
return hwndTip;
}
一旦我移动鼠标指针,工具提示就会消失。
我的问题是:
谢谢。
最佳答案
自从我完成任何 WinAPI 编程以来已经有一段时间了,但如果我没记错的话......
对 CreateWindowEx
的调用将 hDlg
作为 hWndParent 参数传递,这意味着对话框窗口现在是工具提示的父级。
来自 DestroyWindow
上的 MSDN 文档它说的功能:
If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.
所以您可以假设您的工具提示窗口最终将被销毁。如果您调用 CreateToolTip
来响应每个 WM_HELP
消息,请小心,因为您最终会在内存中出现许多工具提示窗口,直到您的对话框关闭并且 DestroyWindow
最终被调用。
正如 vz0 指出的那样,您可以创建一次工具提示,卡在窗口句柄上,然后显示工具提示以响应帮助消息,而不是再次创建它。
在您对 vz0 的回答的评论中,您说:
there are multiple ways in which a tooltip goes awya. example: mouse move, timeout etc.
所有这些只会导致窗口被隐藏,因此工具提示的句柄仍然有效,并且可以使用 ShowWindow
重新显示。
关于c++ - 是否有必要销毁工具提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850794/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!