1、在对话框的:OnInitDialog()函数中添加以下红色代码:

BOOL CGSM_MessageDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

//  执行此操作

SetIcon(m_hIcon, TRUE);          // 设置大图标

SetIcon(m_hIcon, FALSE);         // 设置小图标

// TODO: 在此添加额外的初始化代码

//创建图像列表

m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);

//向图像列表中添加图标

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONBOOK));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONNOTE));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSEND));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECV));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));

UINT array[8];

for(int i=0;i<8;i++)

{

if(i==2 || i==5)

array[i] = ID_SEPARATOR; //第、个按钮为分隔条

else

array[i] = i+1001; //为工具栏按钮设置索引

}

m_ToolBar.Create(this);

m_ToolBar.SetButtons(array,8);

//关联图像列表

m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);

m_ToolBar.SetSizes(CSize(50,60),CSize(32,32)); //设置按钮和图标的大小

m_ToolBar.SetButtonText(0,L"电话簿管理");

m_ToolBar.SetButtonText(1,L"常用语管理");

m_ToolBar.SetButtonText(3,L"短信息发送");

m_ToolBar.SetButtonText(4,L"短信息接收");

m_ToolBar.SetButtonText(6,L"短信猫设置");

m_ToolBar.SetButtonText(7,L"操作员管理");

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

return TRUE;  // 除非将焦点设置到控件,否则返回TRUE

}

2、从代码中的“array[i] = i+1001; //为工具栏按钮设置索引”可以看出,工具栏图标的地址是1001开始的。因此,工具栏的图标分别为1001 1002 1003 1004等等。

3、现在为图标工具栏添加响应函数:

在对话框头文件的.h中添加红色代码:如下

// 实现

protected:

HICON m_hIcon;

// 生成的消息映射函数

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnPhoneBook();

4、在对话框的Dlg.cpp中添加如下代码:

BEGIN_MESSAGE_MAP(CGSM_MessageDlg, CDialog)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_COMMAND(1001,OnPhoneBook)//1001时候第一个按钮的ID值,如果要为第二个图标按钮添加函数这改为:ON_COMMAND(1002,OnPhoneBook)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

5、在对话框的Dlg.cpp中添加响应函数:

void CGSM_MessageDlg::OnPhoneBook()

{

CPhoneBookDlg dlg;

dlg.DoModal();//用于链接一个对话框

}

void CFilterDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
 
    if (m_list.m_hWnd)
    {
        CRect  rect(0, 32, cx, cy); 
        //GetWindowRect(&rect);  //获取窗口rect
        //ScreenToClient(&rect);  //从窗口尺寸转换到用户区rect
        //rect.InflateRect(-10, 0, -10, -10);
        m_list.MoveWindow(&rect); 
    }
}
vs2008 对话框上的工具栏添加提示信息

对话框上的工具条上的提示信息不能采用mfc应用程序直接在资源中添加的方式添加,因为对话框不由CFrameWnd管理。

1. 在对话框类头文件.h中添加

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

2. 在对话框.cpp文件中添加

(1)消息映射中添加:

BEGIN_MESSAGE_MAP(CAssessMainDialog, CBCGPDialog)

//控件响应,范围为0到无穷大

ON_NOTIFY_EX( TTN_NEEDTEXT,0,OnToolTipNotify)

//控件响应,范围为0到OxFFFF

//ON_NOTIFY_EX_RANGE( TIN_NEEDTEXT,0,OxFFFF,OnToolTipNotify)

END_MESSAGE_MAP()

(2)添加响应函数:

BOOL CAssessMainDialog::OnToolTipNotify( UINT id,NMHDR* pNMHDR,LRESULT* pResult )

{

  BOOL bResult = TRUE;

  TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*)pNMHDR;

  UINT_PTR uID = pNMHDR->idFrom;

  if ( pTTT->uFlags && TTF_IDISHWND)

  {

  //int nID = ::GetDlgCtrlID(HWND(uID);)网上例子说uID为控件在窗口中的句柄,测试结果其实就是控件的ID,因此这句不需要,

   //也可能是编译器的原因。。。。。。

    CString strToolTips(_TEXT(""));

    switch ( uID )

    {

    case ID_EXECUTE:

      strToolTips.Format(_TEXT("%s"),_TEXT("执行评估流程"));

    break;

    case ID_SAVEFILE:

      strToolTips.Format(_TEXT("%s"),_TEXT("保存评估流程"));

    break;

    case ID_OPENFILE:

      strToolTips.Format(_TEXT("%s"),_TEXT("打开评估流程"));

    break;

    default:

      bResult = FALSE;

    }

    if ( TRUE == bResult)

    {

      *pResult = 0;

      _tcscpy( pTTT->lpszText,strToolTips);

      pTTT->hinst = NULL;

    }

   }

   return bResult;

}

(3)启用工具提示

在初始化函数中添加,不一定在OnInitDialog函数中。

BOOL CAssessMainDialog::OnInitDialog()

{

  CBCGPDialog::OnInitDialog();

  CBCGPDialog::EnableVisualManagerStyle();

  m_ToolBar->EnableToolTips(TRUE);

  //网上的例子是直接启用对话框工具提示,测试结果只能对整个工具栏显示提示信息,改为启用工具栏提示信息,ok了

  //EnableToolTips(TRUE);

  return TRUE;

}

二、状态栏
头文件:
CStatusBar m_StatBar;
void CreateStatusBar();
 
源文件: 
void CFilterDlg::CreateStatusBar()
{
  //创建状态栏
  if(m_StatBar.Create(this))
  {
  // 状态行指示器对应 ID
  static UINT indicators[] =
  {
  ID_SEPARATOR,           
  ID_INDICATOR_CAPS,
  ID_INDICATOR_NUM,
  ID_INDICATOR_SCRL,
  };
 
  // 设置状态栏指示器 ID 和指示器个数
  m_StatBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
 
  // 设置状态栏指示器文本
  m_StatBar.SetPaneText(0,L"指示器1",0);
  m_StatBar.SetPaneText(1,L"指示器2",0);
  m_StatBar.SetPaneText(2,L"指示器3",0);
  m_StatBar.SetPaneText(3,L"指示器4",0);
 
  // 设置状态栏指示器属性
  m_StatBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(1,ID_INDICATOR_CAPS,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(2,ID_INDICATOR_NUM,SBPS_NORMAL   ,100);
  m_StatBar.SetPaneInfo(3,ID_INDICATOR_SCRL,SBPS_NORMAL   ,100);
 
  ////为状态栏指示器添加图标
  //HICON icon[2];
  //icon[0] = AfxGetApp()->LoadIcon (IDI_ICON1);
  //icon[1] = AfxGetApp()->LoadIcon (IDI_ICON2);
  //m_StatBar.GetStatusBarCtrl().SetIcon(0,icon[0]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(1,icon[1]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(2,icon[0]);
  //m_StatBar.GetStatusBarCtrl().SetIcon(3,icon[1]);
  //设置状态栏高度
  m_StatBar.GetStatusBarCtrl().SetMinHeight(20);
 
  // 显示状态栏
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
  }
}

 
void CFilterDlg::OnSize(UINT nType, int cx, int cy)
{
  CDialog::OnSize(nType, cx, cy);
 
  if (m_list.m_hWnd)
  {
  // 显示更新状态栏
  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  
  CRect  rect(0, 40, cx, cy - 20); 
  //GetWindowRect(&rect);  //获取窗口rect
  //ScreenToClient(&rect);  //从窗口尺寸转换到用户区rect
  //rect.InflateRect(-10, 0, -10, -10);
  m_list.MoveWindow(&rect);     //列表控件位置
  }

}

VS2008给图标工具栏-状态栏添加响应函数的更多相关文章

  1. [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

    前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...

  2. MFC 学习 之 工具栏的添加(一)

    最终实现的效果图: 步骤一:接下来在资源视图中添加一个ToolBar工具栏(具体怎么添加在这儿就不详细讲解了!)添加后的ToolBar以及工具栏中每个按钮 所命名的ID如下:(可以自定义,只要不重名就 ...

  3. MFC实现多风格真彩色大图标工具栏按钮

    研究zlib库,想实现一个类似winrar功能的小东东,打开winrar界面看它的工具栏比较好看于是动手想做一个,当然资源也使用的是winrar附带的.下面是截图:真彩色(32位)32*32大图标工具 ...

  4. CEdit自动换行和状态栏添加

    CEdit自动换行在对话框的属性中是可以直接设置的. Auto HScroll设置为False Auto VScroll设置为True Mulitline设置为True Want Return设置为T ...

  5. Android 添加常驻图标到状态栏

    / * * 如果没有从状态栏中删除ICON,且继续调用addIconToStatusbar,则不会有任何变化.如果将notification中的resId设置不同的图标,则会显示不同的图标 * / p ...

  6. C#Windows窗体界面设计_05_添加菜单栏 工具栏 状态栏 按钮

  7. UEditor百度编辑器,工具栏自定义添加一个普通按钮

    根据网上前辈提供的,还真的不错,下面也整理一下 添加一个名叫“macros”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“macros” ...

  8. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

  9. PyQt4 菜单栏 + 工具栏 + 状态栏 + 中心部件 生成一个文本编辑部件示例

    我们将创建一个菜单栏.一个工具栏.一个状态栏和一个中心部件. #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import ...

随机推荐

  1. ES6入门之Promise对象

    1. Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理.更强大. 1.1 什么是Promise 简单来说就是一个容器,里面保存着某个未来才会结 ...

  2. php7和php5区别是什么

    PHP7距正式发布以及有挺长时间了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍.那么php7和php5之间的区别是什么?下面本篇文章就来给大家简单介绍一下,希望 ...

  3. (八十四)c#Winform自定义控件-导航菜单(类Office菜单)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  4. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

  5. css3:bacground-size

    个人博客: https://chenjiahao.xyz CSS3之背景尺寸Background-size是CSS3中新加的一个有关背景的属性,这个属性是改变背景尺寸的通过各种不同是属性值改变背景尺寸 ...

  6. spring boot使用vue+vue-router构建单页面应用

    spring boot http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ vue https: ...

  7. 52个有效方法(4) - 多用类型常量,少用#define预处理指令

    局部常量 在实现文件中使用 static const 来定义"只在编译单元内可见的常量"(translation-unit-specific constant).其命名规则为在前面 ...

  8. 杂谈:开发人员如何进行复杂业务的学习?让boss刮目相看

    一点小拙见,欢迎指正 一.概述 大型复杂的软件系统,是有许多人共同协作完成的,有些产品的业务是很复杂的,其在需求文档,及开发规范上都做得很好,不然维护的人越多,没有文档和规范去限制,岂不更加乱套. 如 ...

  9. A-08 拉格朗日对偶性

    目录 拉格朗日对偶性 一.原始问题 1.1 约束最优化问题 1.2 广义拉格朗日函数 1.3 约束条件的考虑 二.对偶问题 三.原始问题和对偶问题的关系 3.1 定理1 3.2 推论1 3.3 定理2 ...

  10. .NET Core 3.0 ,WTM 2.3.9发布

    .Net Core 3.0已经来了,WTM怎么可以落后呢.最新发布的WTM2.3.9版本已经支持.Net Core 3.0啦,现在在线生成项目的时候可以选择2.2和3.0两个版本.小伙伴们快来体验吧. ...