您的位置:首页 > 其它

Dialog中加入一个工具栏如果让它有提示信息

2005-03-29 19:32 330 查看
工具栏一般使用在SDI或是MDI里。
如果我们在一个Dialog里新建了一个工具栏,它的提示信息可能就没有办法出来了。
主要的原因是由于我们没有为这个工具栏写提示信息的消息映射函数。
如果要增加的话。就可以这样。
1.增加一个这样的函数处理函数
afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
BOOL MyDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// allow top level routing frame to handle the message
if (GetRoutingFrame() != NULL)
return FALSE;

// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
TCHAR szFullText[256];
CString strTipText;
UINT_PTR nID = (UINT_PTR)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ((UINT_PTR)(WORD)::GetDlgCtrlID((HWND)nID));
}

if (nID != 0) // will be zero on a separator
{
AfxLoadString((UINT)nID, szFullText);
// this is the command id, not the button index
AfxExtractSubString(strTipText, szFullText, 1, '/n');
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, strTipText,
(sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
else
{
int n = MultiByteToWideChar(CP_ACP, 0, strTipText, -1, pTTTW->szText,
sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]));
if (n > 0)
pTTTW->szText[n-1] = 0;
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
int n = WideCharToMultiByte(CP_ACP, 0, strTipText, -1,
pTTTA->szText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]),
NULL, NULL);
if (n > 0)
pTTTA->szText[n-1] = 0;
}
else
lstrcpyn(pTTTW->szText, strTipText,
(sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
#endif
*pResult = 0;

// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);

return TRUE; // message was handled
}
2.增加一个头文件
#include <afxpriv.h>
3.创建消息映射
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
这样就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐