dialog中加入toolbar后,怎么显示出tooltip?

602hwh 2003-07-07 07:57:00
我创建toolbar的时候,设了CBRS_TOOLTIPS,然后怎么显示提示呢?

谢谢!

...全文
240 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lazycat818 2003-08-29
如果只想在按钮上动态显示tooltip,那么DeautyFan(悲情浪子) 已经说了,当然他的方法没有用MFC,显得有点繁琐,

如果想让鼠标在按钮上移动时在状态条上显示提示,那么可以参考楼上的老兄所说的,但如果你的按钮有Disabled的,那么可能会有点问题,关键是Disabled的按钮会响应移入,但不响应移出,此时,需要在PreTranslateMsg里处理一下:

if(pMsg->message== WM_MOUSELEAVE)
{
if(pMsg->hwnd == m_wndToolBar.GetSafeHwnd())
{
int index = m_wndToolBar.GetToolBarCtrl().GetHotItem();
if(index < 0)
{
CString stem;
CWnd * pStatic = GetDlgItem(IDC_STC_STATEBAR);
pStatic->GetWindowText(stem);
if(stem != "就绪")
{
pStatic->SetWindowText("就绪");
}
}
}
}
回复
lifg 2003-08-28
楼上说的可能不行,在Dialog中,默认是没有处理TTN_NEEDTEXT,楼上的仅是加了资源,并不会显示,应该自己加上消息映射在三个地方加上响应代码1. afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
2.ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
3.BOOL CNetManagerDlg::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;
CString strStatusText;
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);
int len =strTipText.Find('\n',0);
strStatusText = strTipText.Left(len);
strTipText = strTipText.Mid(len+1);
SetToolTips(strStatusText);

#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;
}
想来楼主应该知道加载何处,当然你生成工具栏的时候已经设置了TOOLTIP风格了.
回复
peiming_ge 2003-08-06
很简单,
只要在与toolbar里command相同id的string资源中用\n分割,加上注释即可--\n之后的字符串将出现在提示中。
例如:
toolbar中有一按钮“文件”的command id是IDC_OPENFILE
那么,你需要做的就是在string 资源中加入一条id同样是IDC_OPENFILE,
内容是:Open File \n 打开文件。
在运行的时候,就会提示 "打开文件"了
回复
cheng_young 2003-07-10
处理TTN_NEEDTEXT
可参考一下
mk:@MSITStore:F:\Program%20Files\Microsoft%20Visual%20Studio\MSDN\2001APR\1033\vcmfc.chm::/html/_mfc_ctoolbarctrl.3a_.handling_tool_tip_notifications.htm
回复
602hwh 2003-07-10
首先谢过楼上的朋友。

继续请教各位还有具体详细的例子吗?

怎么得到鼠标移动到该按键上的消息?

我是基于dialog做的。

回复
无敌魔仙 2003-07-08
tooltip是 另外的控间的,如下
/* CREATE A TOOLTIP CONTROL OVER THE ENTIRE WINDOW AREA */
void CreateMyTooltip (HWND hwnd)
{
// struct specifying control classes to register
INITCOMMONCONTROLSEX iccex;
HWND hwndTT; // handle to the ToolTip control
// struct specifying info about tool in ToolTip control
TOOLINFO ti;
unsigned int uid = 0; // for ti initialization
char strTT[30] = "This is your ToolTip string.";
LPTSTR lptstr = strTT;
RECT rect; // for client area coordinates

/* INITIALIZE COMMON CONTROLS */
iccex.dwICC = ICC_WIN95_CLASSES;
iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitCommonControlsEx(&iccex);

/* CREATE A TOOLTIP WINDOW */
hwndTT = CreateWindowEx(WS_EX_TOPMOST,
TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hwnd,
NULL,
ghThisInstance,
NULL
);

SetWindowPos(hwndTT,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

/* GET COORDINATES OF THE MAIN CLIENT AREA */
GetClientRect (hwnd, &rect);

/* INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE */
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS;
ti.hwnd = hwnd;
ti.hinst = ghThisInstance;
ti.uId = uid;
ti.lpszText = lptstr;
// ToolTip control will cover the whole window
ti.rect.left = rect.left;
ti.rect.top = rect.top;
ti.rect.right = rect.right;
ti.rect.bottom = rect.bottom;

/* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */
SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);

}
回复
602hwh 2003-07-07
tooltip是显示在button上的吗?
刚下载了一个例子,是直接做在button上面的。

我要的不是这个,我的button上本身没有文字,
而是希望鼠标移动到button上后,就出现一个文字提示,
请问怎么做?
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2003-07-07 07:57
社区公告
暂无公告