当鼠标移到按钮或其它控件时出现TOOLTIP,请问是怎么做的? 当鼠标移到按钮或其它控件时出现TOOLTIP,请问是怎么做的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、建一个基于对话框的程序TipTest,在CTipTestDlg中增加成员变量:CToolTipCtrl m_tip[2],CWnd *m_pSub[2];2、在CTipTestDlg::OnInitDialog()函数中增加如下代码: pSub[0] = GetDlgItem(IDC_RADIO1); //得到单选按钮的指针pSub[1] = GetDlgItem(IDC_BUTTON1);m_tip[0].Create(pSub[0],TTS_ALWAYSTIP); //创建CToolTipCtrlm_tip[0].AddTool(pSub[0]); //将CToolTipCtrl与相应的控件对应起来m_tip[1].Create(pSub[1],TTS_ALWAYSTIP);m_tip[1].AddTool(pSub[1]);m_tip[0].SetTipTextColor(RGB(0,0,255)); //设定文字的颜色m_tip[0].SetDelayTime(150); //设定提示文字在控件上停留的时间3、重载CTipTestDlg::PreTranslateMessage(MSG* pMsg)函数,增加如下代码: if(m_tip[0].m_hWnd!=NULL)m_tip[0].RelayEvent(pMsg); //如果m_tip[0]句柄不为空,就从主窗口中捕获消息,如WM_MOUSEMOVE,WM_LBUTTONDOWN等消息if(m_tip[1].m_hWnd!=NULL) m_tip[1].RelayEvent(pMsg); 4、捕获主窗口的WM_MOUSEMOVE消息,在CTipTestDlg::OnMouseMove(UINT nFlags, CPoint point)函数中增加如下代: m_tip[0].UpdateTipText("hello!",pSub[0]); //鼠标在相应的控件上移动时显示提示文字m_tip[1].UpdateTipText("http://vckbase.com",pSub[1]); 显示工具提示文本 (1).如果是菜单或工具栏显示,则只要在ID属性的Prompt栏加"\n提示显示". (2).在公共控件里显示则需以下步骤: <1>.激活工具提示,方法在初始化里(OnInitDialog或OnInitUpdate)调用EnableToolTips(); <2>.在头文件的类声明中的类消息声明中添加: afx_msg BOOL OnNeedToolTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pResult); <3>.在源文件中BENGIN_MESSAGE_MAP与END_MESSAGE_MAP之间的类消息表定义中添加: ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnNeedToolTipText) <4>.在源文件中添加OnNeedToolTipText函数: BOOL CMFCSampleDlg::OnNeedToolTipText(UINT id, NMHDR * pNMHdr, LRESULT * pResult) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *) pNMHdr; if (pTTT->uFlags & TTF_IDISHWND) { UINT idCtrl = ::GetDlgCtrlID(HWND(pTTT->hdr.idFrom)); pTTT->lpszText = MAKEINTRESOURCE(idCtrl); pTTT->hinst = AfxGetResourceHandle(); return TRUE; } return FALSE; } <5>.在资源中添加String table资源(要显示的提示信息).一般为IDS_TT_×××_×××.对应控件ID号IDC_×××_×××. <6>.在Resource.h文件中修改IDS_TT_×××_×××与IDC_×××_×××同一资源号。 <7>.如果控件为静态文本(其他待研究)则需使控件有Notify属性。方法2:1).在对话框类的.h中加入:public:CToolTipCtrl m_tip;CWnd *pBtn;2).在OnInitDialog中加入:pBtn=GetDlgItem(IDC_BUTTON1);//获得控件句柄ASSERT(pBtn!=NULL);//判断句柄是否有效m_tip.Create(pBtn,TTS_ALWAYSTIP);//创建ToolTipm_tip.AddTool(pBtn);//将ToolTip与控件建立关联m_tip.SetTipTextColor(RGB(0,0,0));//设置字体前景色m_tip.SetTipBkColor(RGB(255,255,255));//设置背景色3).重载PreTranslateMessageBOOL CtooltipDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if(m_tip.m_hWnd!=NULL) m_tip.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);}4).重载WM_MOUSEMOVEvoid CtooltipDlg::OnMouseMove(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 m_tip.UpdateTipText("我爱你!!!",pBtn); CDialog::OnMouseMove(nFlags, point);} 楼上两位回答很精确. laiyiling是自己定义消息内容; kvw3000主要是在treectrl/listctrl用的比较多,提示信息可以是ITEM当前的内容,也可以自己定义. 选项卡的消息处理函数是怎么调用的? 请教一个WMI远程执行命令的问题,万分感谢! IOCP中 被大家忽略的重点 listctrl中REPORT的插入问题? 如何显示特殊字符? ADO中 .和->运算符 说说年终奖,大家都有多少? 请问线程建立的问题!! 如何存成图片? 软件初学者 请问三层的网怎么组建? 插入OLE时的错误???
CToolTipCtrl m_tip[2],CWnd *m_pSub[2];
2、在CTipTestDlg::OnInitDialog()函数中增加如下代码:
pSub[0] = GetDlgItem(IDC_RADIO1); //得到单选按钮的指针
pSub[1] = GetDlgItem(IDC_BUTTON1);
m_tip[0].Create(pSub[0],TTS_ALWAYSTIP); //创建CToolTipCtrl
m_tip[0].AddTool(pSub[0]); //将CToolTipCtrl与相应的控件对应起来
m_tip[1].Create(pSub[1],TTS_ALWAYSTIP);
m_tip[1].AddTool(pSub[1]);
m_tip[0].SetTipTextColor(RGB(0,0,255)); //设定文字的颜色
m_tip[0].SetDelayTime(150); //设定提示文字在控件上停留的时间
3、重载CTipTestDlg::PreTranslateMessage(MSG* pMsg)函数,增加如下代码: if(m_tip[0].m_hWnd!=NULL)
m_tip[0].RelayEvent(pMsg);
//如果m_tip[0]句柄不为空,就从主窗口中捕获消息,如WM_MOUSEMOVE,WM_LBUTTONDOWN等消息
if(m_tip[1].m_hWnd!=NULL)
m_tip[1].RelayEvent(pMsg);
4、捕获主窗口的WM_MOUSEMOVE消息,
在CTipTestDlg::OnMouseMove(UINT nFlags, CPoint point)函数中增加如下代: m_tip[0].UpdateTipText("hello!",pSub[0]); //鼠标在相应的控件上移动时显示提示文字
m_tip[1].UpdateTipText("http://vckbase.com",pSub[1]);
显示工具提示文本
(1).如果是菜单或工具栏显示,则只要在ID属性的Prompt栏加"\n提示显示".
(2).在公共控件里显示则需以下步骤:
<1>.激活工具提示,方法在初始化里(OnInitDialog或OnInitUpdate)调用EnableToolTips();
<2>.在头文件的类声明中的类消息声明中添加:
afx_msg BOOL OnNeedToolTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pResult);
<3>.在源文件中BENGIN_MESSAGE_MAP与END_MESSAGE_MAP之间的类消息表定义中添加:
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnNeedToolTipText)
<4>.在源文件中添加OnNeedToolTipText函数:
BOOL CMFCSampleDlg::OnNeedToolTipText(UINT id, NMHDR * pNMHdr, LRESULT * pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *) pNMHdr; if (pTTT->uFlags & TTF_IDISHWND) {
UINT idCtrl = ::GetDlgCtrlID(HWND(pTTT->hdr.idFrom));
pTTT->lpszText = MAKEINTRESOURCE(idCtrl);
pTTT->hinst = AfxGetResourceHandle(); return TRUE;
} return FALSE;
}
<5>.在资源中添加String table资源(要显示的提示信息).一般为IDS_TT_×××_×××.对应控件ID号IDC_×××_×××.
<6>.在Resource.h文件中修改IDS_TT_×××_×××与IDC_×××_×××同一资源号。
<7>.如果控件为静态文本(其他待研究)则需使控件有Notify属性。方法2:
1).在对话框类的.h中加入:
public:
CToolTipCtrl m_tip;
CWnd *pBtn;2).在OnInitDialog中加入:
pBtn=GetDlgItem(IDC_BUTTON1);//获得控件句柄
ASSERT(pBtn!=NULL);//判断句柄是否有效
m_tip.Create(pBtn,TTS_ALWAYSTIP);//创建ToolTip
m_tip.AddTool(pBtn);//将ToolTip与控件建立关联
m_tip.SetTipTextColor(RGB(0,0,0));//设置字体前景色
m_tip.SetTipBkColor(RGB(255,255,255));//设置背景色3).重载PreTranslateMessage
BOOL CtooltipDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(m_tip.m_hWnd!=NULL)
m_tip.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);
}4).重载WM_MOUSEMOVE
void CtooltipDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 m_tip.UpdateTipText("我爱你!!!",pBtn); CDialog::OnMouseMove(nFlags, point);
}
laiyiling是自己定义消息内容;
kvw3000主要是在treectrl/listctrl用的比较多,提示信息可以是ITEM当前的内容,也可以自己定义.