【发布时间】: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