gpt4 book ai didi

c++ - 是否有必要销毁工具提示?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:36 25 4
gpt4 key购买 nike

在我的应用程序中,我正在处理 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;
}

一旦我移动鼠标指针,工具提示就会消失。

我的问题是:

  1. 工具提示是被破坏了还是只是被隐藏了?
  2. 如果它是隐藏的,那么如何以及何时销毁它?

谢谢。

最佳答案

自从我完成任何 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com