Tooltip是一个很常见的Control,在MFC里面也提供了便利和丰富的支持。Tooltip显示的时候缺省是在所关联的控件的下方,但是在某些情况下,我们可能需要重新定位Tooltip的显示位置。一般来说(对于使用MFC内置Tooltip机制),Tooltip在显示之前会发送TTN_NEEDTEXTA / TTN_NEEDTEXTW给其关联的父窗口,请求Tooltip的字串内容,这个时候,可以通过发送一个TTM_ADJUSTRECT消息,然后调用SetWindowPos来重新定位Tooltip的位置,代码就像这样:
BOOL CPicViewPage::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
// set pTTTA or pTTTW's szText field to tell Tooltip the text that are expected.
// ...........
::SendMessage(pTTTA->hdr.hwndFrom, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
::SetWindowPos(pTTTA->hdr.hwndFrom, HWND_TOPMOST, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
return TRUE; // message was handled
}
btw, 现在博客园的功能是越来越多了,真是不错。提个小建议,能否在“插入代码”功能里加上对C++代码的支持~照顾一下C++程序员,呵呵。
浙公网安备 33010602011771号