【问题标题】:SetWindowPos has not effect on tooltipSetWindowPos 对工具提示没有影响
【发布时间】:2010-06-10 14:43:59
【问题描述】:

我正在尝试为我的 ComboBox 提供一个针对长字符串的适当工具提示。但是,当我在工具提示上调用 SetWindowPos 时,位置永远不会改变。在收到 TTN_SHOW 时调用:

::SetWindowPos(textTooltip, NULL, TipRect.left, TipRect.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);

如果我删除 SWP_NOSIZE 标志并将一些值弹出到宽度/高度中,则组合框将大小更改为这些值,但位置保持不变。 SetWindowPos 总是返回 TRUE。

提示是这样初始化的:

        textTooltip = CreateWindowEx(WS_EX_TRANSPARENT, TOOLTIPS_CLASS, NULL, TTS_NOPREFIX, 0, 0, 0, 0, this->GetSafeHwnd(), NULL, NULL, NULL);
        if(!textTooltip)
            return;

        ZeroMemory(&ToolInfo, sizeof(TOOLINFO));
        ToolInfo.cbSize = sizeof(TOOLINFO);
        ToolInfo.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS; 
        ToolInfo.hwnd = this->GetSafeHwnd();
        ToolInfo.lpszText = "place holder"; //set in OnSelectChangeOk
        ToolInfo.uId = 0;   
        ToolInfo.rect = TipRect; //rect is re-set in OnSelectChangeOk

        ::SendMessage(textTooltip, TTM_ADDTOOL, 0, (LPARAM)&ToolInfo);

我错过了什么吗?

【问题讨论】:

  • 是的,您缺少检查返回值并调用 GetLastError() 以找出问题所在的代码。
  • 我在发帖时去掉了大部分错误检查,让它更简洁一些。如帖子中所述,SetWindowsPos 返回 TRUE,因此 GetLastError() 返回 0。对 SendMessage 的调用也返回 TRUE。谢谢。

标签: c++ visual-c++ mfc winapi


【解决方案1】:

你必须做::SendMessage(hToolWnd, TTM_TRACKPOSITION, 0, MAKELPARAM(x, y)); 并在ToolInfo.uFlags 成员中设置TTF_ABSOLUTE 标志!

更多信息,请参考:http://msdn.microsoft.com/en-us/library/bb760422(VS.85).aspx

【讨论】:

  • 这不需要我手动显示/隐藏工具提示吗? TTF_ABSOLUTE 需要同时设置 TTF_TRACK,这意味着我必须使用 TTM_TRACKACTIVE 和 TTM_TRACKPOSITION。我已经考虑过这种方法,可能检查 WM_MOVE 消息,然后显示提示,但它比我希望的要脏一点。我的实现基于blogs.msdn.com/b/oldnewthing/archive/2006/06/26/…msdn.microsoft.com/en-us/library/…
  • ok.. 我的代码用于气球工具提示,它总是应该在指定位置弹出。您是否也发送 TTM_ADJUSTRECT 并在收到 TTN_SHOW 通知后返回 TRUE,就像您提到的文章中一样? return TRUE 后的注释说“抑制默认定位”所以也许你忘了这个?
  • 是的,返回 TRUE 可防止为消息调用标准例程。我现在采取了稍微不同的路线,我正在调用 TrackMouseEvent 来获取 ON_WM_MOUSEHOVER 消息,然后在悬停时我手动移动并显示工具提示。不那么干净,但它似乎可以完成这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多