打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC实现工具栏
userphoto

2010.08.22

关注

首先,需要具备几个条件,一是工具栏具有CBRS_TOOLTIPS风格,二是工具栏的父窗口需要处理TTN_NEEDTEXT通知消息.在MFC类库中,CFrameWnd默认处理了TTN_NEEDTEXT通知消息,因此在文档视图结构的应用程序中,只要工具栏拥有CBRS_TOOLTIPS风格,就能显示提示信息.

如果在对话框中添加TTN_NEEDTEXT通知消息,需要消息映射部分添加如下代码:

ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)

函数原型:

OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult)

参数说明:

id:是发送消息的控件ID,但此处没有用,因为控件ID可以来自于pNMHDR.

pNMHDR:是一个NMHDR结构指针(实际应该是NMTTDISPINFO结构指针),NMHDR结构记录了发送消息的控件ID,句柄等信息.

pResult:表示结果代码指针,TTN_NEEDTEXT消息可以忽略该参数.

实现过程:

定义一个CToolBar变量m_wndToolBar,创建一个工具栏资源.

在OnInitDialog方法中创建工具栏:

//创建工具栏
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS |CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP ) ||
  !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
 {
  TRACE0("Failed to create toolbar\n");
  return -1;      // fail to create
 }
 
 //设置图象和按钮的大小,为了适当的演示按钮文本
 m_wndToolBar.GetToolBarCtrl().SetBitmapSize(CSize(16,16));
 m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(32,32));

 //设置按钮文本
 m_wndToolBar.SetButtonText(0,"新建");
 m_wndToolBar.SetButtonText(1,"打开");
 m_wndToolBar.SetButtonText(2,"保存");
 m_wndToolBar.SetButtonText(4,"剪切");
 m_wndToolBar.SetButtonText(5,"复制");
 m_wndToolBar.SetButtonText(6,"粘贴");
 m_wndToolBar.SetButtonText(8,"打印");
 m_wndToolBar.SetButtonText(10,"帮助");


 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

 // TODO: Add extra initialization here
 
 return TRUE;  // return TRUE  unless you set the focus to a control

在消息影射部分添加消息映射:

ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)

接收函数部分:

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

函数实现:一种

BOOL CMainFrame::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
 int index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引
 CString str;
 switch(index)
 {
 case 0:
  pTTT->lpszText = "检测窗口";
  break;
 case 1:
  pTTT->lpszText = "分析窗口";
  break;
 case 2:
  pTTT->lpszText = "网络连接";
  break;
 case 3:
  pTTT->lpszText = "显示图像";
  break;
 case 4:
  pTTT->lpszText = "开始录像";
  break;
 case 5:
  pTTT->lpszText = "存入数据库";
  break;
 case 6:
  pTTT->lpszText = "读取数据库文件";
  break;
 case 7:
  pTTT->lpszText = "阀位分析查询";
  break;
 case 8:
  pTTT->lpszText = "报表打印";
  break;
 default:
  pTTT->lpszText = "什么东西?";
  break;
 }
    pTTT->hinst = AfxGetResourceHandle();
    return(TRUE);
}

另一种:

BOOL CToolHintDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
 int index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引

 m_wndToolBar.GetButtonText(index,m_ToolText);//获取按钮文本
    pTTT->lpszText =m_ToolText.GetBuffer(0);//设置显示的提示信息
    pTTT->hinst = AfxGetResourceHandle();
    return(TRUE);
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CReBar的使用
VC编程实现IE风格的界面
【转】MFC工具栏设计
自定义工具栏
VC++6.0去掉单文档中的菜单,工具栏,状态栏
浅谈VS2010中CMFCToolBar的用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服