您的位置:首页 > 其它

vc 基于对话框实现工具条提示显示

2014-01-05 22:47 387 查看
在用基于对话框的MFC里面,这时我们在工具栏的属性页下的提示是不会显示的,需要加入下面的东东,我已完成,可以,大家可以参考下;

1.在***dlg.h中加入:

afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);

2.在***dlg.cpp中加入:

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipText)

3.添加函数OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

BOOL C******Dlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

{

ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// UNICODE消息

TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;

TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;

//TCHAR szFullText[512];

CString strTipText;

UINT nID = pNMHDR->idFrom;

if (pNMHDR->code==TTN_NEEDTEXTA && (pTTTA->uFlags&TTF_IDISHWND) || pNMHDR->code==TTN_NEEDTEXTW && (pTTTW->uFlags&TTF_IDISHWND))

{

//idFrom为工具条的HWND

nID = ::GetDlgCtrlID((HWND)nID);

}

if (nID != 0) //不为分隔符

{

strTipText.LoadString(nID);

strTipText = strTipText.Mid(strTipText.Find(‘/n’,0)+1);

#ifndef _UNICODE

if (pNMHDR->code == TTN_NEEDTEXTA)

{

lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));

}

else

{

_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));

}

#else

if (pNMHDR->code == TTN_NEEDTEXTA)

{

_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));

}

else

{

lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));

}

#endif

*pResult = 0;

// 使工具条提示窗口在最上面

::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);

return TRUE;

}

return TRUE;

}

4。在资源文件的toolbar中的每一个按钮的属性里面Prompt里面输入要提示的信息。

此时可以重建,点击菜单上的组建>重新组建,如果有提示说有错误说定义有误时,这时把第二步中加入的给注释,也就是前加//,具体为什么会这样,我还不清楚,不过注释掉后就可以顺利执行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: