windows显示Linux对话框程序,基于对话框的工具栏的ToolTip的实现

本文介绍了如何在对话框程序中实现工具提示功能。首先,通过调用CWnd::EnableToolTips启用工具提示。接着,添加消息映射项ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)并实现处理函数OnToolTipNotify。在处理函数中,根据控件ID或索引值设置提示文本,从而在对话框上显示相应的工具提示信息。
摘要由CSDN通过智能技术生成

感悟:1 加断点调试,单步执行是解决问题的利器,能自己找出问题。2 多动脑筋,先弄明白原理。

1.工具提示的原理及编程实现

工具提示控件要显示提示文本时,会发出TTN_NEEDTEXT消息以获取该文本,因此通过处理该消息我们可以为各个不同的工具提供它们所需的提示。但是,对于基于对话框的程序(从CDialog类派生)和基于框架窗口的程序(从CFrameWnd派生),它们对TTN_NEEDTEXT消息的处理是不同的。对于从CFrameWnd派生的窗口,它具有一个缺省的消息处理方法可以自动显示与工具相联系的提示文本;而对于从CDialog派生的窗口,这一缺省消息处理器并没有被调用,因此需要我们自己提供消息处理方法来处理这个消息。

2 在对话框中显示工具提示

为了在对话框中显示工具提示,可以按照以下步骤进行:

(1)调用CWnd::EnableToolTips(BOOL bEnable),传入参数为TRUE,使该窗口支持工具提示的显示。

(2)加入消息映射项如下:

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)

其中,TTN_NEEDTEXT为消息名,0表示工具提示控件的标识符,它始终是0,OnToolTipNotify为TTN_NEEDTEXT消息的处理函数名。

(3)在对话框类头文件中声明加入如下处理函数的原型说明:

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

(4)编写实现代码:

BOOL bResult = TRUE;

TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;

UINT nID =pNMHDR->idFrom;//获取发送消息的control的ID。Identifier of the control sending a message.

//方法一:通过工具栏上的按钮的ID找到按钮

if(nID))//此时该nID是工具栏的ID值,>0.

{

switch(nID))//此时该nID是工具栏的ID值,>0.

{

case ID_FILE_OPEN:

pTTT->lpszText=_T("打开");

break;

case ID_FILE_SAVE:

pTTT->lpszText=_T("保存");

break;

case ID_PUYIDAOSHU:

pTTT->lpszText=_T("谱仪道数设置");

break;

}

}

//方法二:通过索引值来找到按钮。

/* if(nID)//此时该nID是发送消息的控件的ID值,>0.

{

nID = m_ToolBar.CommandToIndex(nID);// 此时左边的nID是索引值,右边的nID是工具栏ID值。根据鼠标放在那个按钮的ID来获取按钮索引(索引值从0开始依次排序)。

switch(nID)//此时的nID表示索引值

{

case 0://第一个按钮的索引值为0

pTTT->lpszText = _T("打开"); //设置提示信息文本

// pTTT->hinst = AfxGetResourceHandle();//此时lpszText is the address of the tool tip text,hinst is NULL。

break;

case 1:

pTTT->lpszText = _T("保存");

pTTT->hinst = AfxGetResourceHandle();

break;

case 3://前面有条分割线,故索引值跳过了2

pTTT->lpszText = _T("谱仪道数设置");

pTTT->hinst = AfxGetResourceHandle();

break;

}

} */

return bResult;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值