当鼠标移到按钮或其它控件时出现TOOLTIP,请问是怎么做的?

fbiboss001 2004-08-07 02:00:50
当鼠标移到按钮或其它控件时出现TOOLTIP,请问是怎么做的?
...全文
202 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liuxianzhi 2004-08-07
楼上两位回答很精确.
laiyiling是自己定义消息内容;
kvw3000主要是在treectrl/listctrl用的比较多,提示信息可以是ITEM当前的内容,也可以自己定义.
回复
kvw3000 2004-08-07

显示工具提示文本
(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);
}

回复
flyelf 2004-08-07
TTN_NEEDTEXT消息的响应
回复
Semigod 2004-08-07
楼上的回答太标准了
回复
Kudeet 2004-08-07
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); //创建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]);
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-07 02:00
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……