注意:本人使用VC++2010开发环境进行測试。

在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,非常多资源都须要自己手动加入。近期在开发一个程序时。想尝试在对话框程序里面加入
工具栏 及其 buttontooltip,于是便有了这篇文章,希望把经验总结下来以方便自己以后查询以及各位同仁查询!

一、首先建立一个对话框程序

1、加入工具栏资源,并在工具栏资源里加入几个button,并将button的width 和 height 改为24,也能够依据自己的须要更改尺寸。同一时候,还要为对应的button设置一个ID。

详细操作如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJtb3hpYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二、创建工具栏

1、在***Dlg.h加入工具栏对象, 以及位图资源

  1. private:
  2. CToolBar m_ToolBar;
  3. // 位图资源
  4.     CBitmap m_bitmap1;
  5.     CBitmap m_bitmap2;
  6.     CBitmap m_bitmap3;
  7.     CImageList m_ImageList;

2、在OnInitDialog()函数里面加入下面代码,创建工具栏

  1. if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) ||
  2. !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
  3. {
  4. TRACE0("未能创建工具栏\n");
  5. AfxMessageBox(_T("未能创建工具栏\n"));
  6. return FALSE; // 未能创建
  7. }
  8. m_ToolBar.ShowWindow(SW_SHOW);
  9. //控件条定位
  10. RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

3、加载几个24*24尺寸的位图,注意。该尺寸是依据上面button的尺寸而设定的。

4、在以上 第2   步后面的代码添载入入位图的代码。终于如图

  1. if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) ||
  2. !m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
  3. {
  4. TRACE0("未能创建工具栏\n");
  5. AfxMessageBox(_T("未能创建工具栏\n"));
  6. return FALSE; // 未能创建
  7. }
  8. m_ToolBar.ShowWindow(SW_SHOW);
  9. //控件条定位
  10. RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
  11.  
  12. m_bitmap1.LoadBitmapW(IDB_BITMAP_MULTIMETER);
  13. m_bitmap2.LoadBitmapW(IDB_BITMAP_PHONE);
  14. m_bitmap3.LoadBitmapW(IDB_BITMAP_SPEAKER);
  15. m_ImageList.Create(24,24, ILC_COLOR32 | ILC_MASK,0,0);
  16. m_ImageList.Add(&m_bitmap1, RGB(0, 0, 0));
  17. m_ImageList.Add(&m_bitmap2,RGB(0, 0, 0));
  18. m_ImageList.Add(&m_bitmap3,RGB(255, 255, 255));
  19. m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);

至此。便已并执行程序。能够看到程序界面就有我们加入上句的工具栏button图标,如图:

以上已经实现了为工具栏button加入图标的功能。那怎样为工具栏button加入tooltip功能能。例如以下图的效果:

接着就由本人继续介绍操作步骤:

1、在***Dlg.h 头文件加入 消息处理函数声明:

  1. afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult); // 工具条提示

2、在***Dlg.cpp加入消息映射

  1. BEGIN_MESSAGE_MAP(CSageRemoteKeyTestDlg, CDialogEx)
  2. ......
  3. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText)
  4. END_MESSAGE_MAP()

3、加入函数定义

  1. BOOL ***Dlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.  
  4. TOOLTIPTEXT *pTTT=(TOOLTIPTEXT*)pNMHDR;
  5. UINT uID=pNMHDR->idFrom; // 相当于原WM_COMMAND传递方式的wParam(low-order), 在wParam中放的则是控件的ID。
  6.  
  7. if(pTTT->uFlags & TTF_IDISHWND)
  8. uID=::GetDlgCtrlID((HWND)uID);
  9. if(uID==NULL)
  10. return FALSE;
  11. switch(uID)
  12. {
  13. case IDOK:
  14. pTTT->lpszText= _T("按下此键開始測试");
  15. break;
  16.  
  17. case IDM_POWER_MULTIMETER:
  18. pTTT->lpszText= _T("电表配置");
  19. break;
  20.  
  21. case IDM_SHIELDINGBOX_COM:
  22. pTTT->lpszText= _T("串口配置");
  23. break;
  24.  
  25. case IDM_BEEP:
  26. pTTT->lpszText= _T("蜂鸣器配置");
  27. break;
  28. }
  29.  
  30. return TRUE;
  31. }

至此,编译执行程序就能实现上图的tooltip功能了!

VC 对话框程序加入工具栏button图标及其buttontooltip的更多相关文章

  1. VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)

    基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情 ...

  2. vc对话框程序运行时隐藏

    1.在资源编辑中设置对话框为不可见 2.在OnPaint中加入下面代码 void CMyDlg::OnPaint() { static b = false; if(!b){ ShowWindow(SW ...

  3. VC++ 对话框下使用工具栏

    关于这一技术网上也有很多的记录,下面仅记录我测试OK的代码.    在CXXDlg.h中添加如下成员变量: CToolBar m_ToolBar; CBitmap m_bmpTool; 在CXXDlg ...

  4. VC++MFC对话框程序中给对话添加背景图片

    VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^   工具/原料 Visual C++ 2010 方法一:用Pic ...

  5. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  6. 非对话框程序创建组合框Groupbox

    对话框程序中的控件,例如button.groupbox之类,是直接放上去的.当然,除groupbox以外,在MFC中其他控件都有相对应的类,以支持程序员在非对话框程序中动态创建控件.而唯独好像没有gr ...

  7. Win32对话框程序(1)

    之前学C语言是一直都是在控制台下面操作的,面对的都是黑框框,严重的打击了学习的兴趣.后来在TC下进行C语言课程设计,做了图形界面编程,但都是点线面画的…… 中间隔了好长一段时间没有碰过C语言,最近才开 ...

  8. VC对话框使用OnEraseBkgnd函数位图背景并透明

    1.使用OnEraseBkgnd函数实现对话框位图背景 BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC) { CRect rect; GetC ...

  9. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

随机推荐

  1. DropDownListFor

  2. 实现model中的文件上传FTP(一)

    由于在django的model中配置了filefield或者imagefield配置了upload_to参数只能将用户上传的文件上传到项目本地,就算重定向到项目外也只是直接读取文件系统,这样对未来的项 ...

  3. Java基础4一数组

    数组 数组是用来存储一组相同类型数据的数据结构 数组变量属于引用数据类型 数组中的元素可以是任何数据类型(基本类型和引用类型) 备注:数组中存放的都是相同数据类型的数据. 1.一维数组的声明 语法:数 ...

  4. 第五课: - Stack / Unstack / Transpose函数

    第 5 课   我们将简要介绍 stack 和 unstack 以及 T (Transpose)函数. 在用pandas进行数据重排时,经常用到stack和unstack两个函数.stack的意思是堆 ...

  5. Junit使用第二弹

    实例总结 1. 参数化测试 有时一个测试方法,不同的参数值会产生不同的结果,那么我们为了测试全面,会把多个参数值都写出来并一一断言测试,这样有时难免费时费力,这是我们便可以采用参数化测试来解决这个问题 ...

  6. MeayunDB学习笔记(一) MeayunDB介绍及安装

    系列目录   MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 ...

  7. nyoj14-会场安排问题

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  8. 2、Ansible配置文件详解

    0.配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下. ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径.模块 ...

  9. 新手学python-Day1-鸡汤,变量,编码,进制,判断

    作业要求为编写一个登录接口:`输入用户名密码`认证成功后显示欢迎信息`输错三次锁定做完作业以后,使用ctrl+alt+f格式化一下,特别舒爽 1 def jilu(str): 2 zt = open( ...

  10. Python面向对象之静态方法、静态方法与类方法

    静态属性: 类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入:类的实例调用函数属性时需要在后面加括号. class Building: def __init__(self, name, o ...