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. CPU的物理数、核心数、线程数

    最近了解下CPU的参数,主要是对常见的CPU参数指标:物理数.核心数以及线程数做了下了解.增长了点自己的见识,方便自己回忆和分享,记录下来.参考了网上的一些说明并加以整理,形成该随笔.主要参考链接如下 ...

  2. laravel基础操作手册

    laravel基础操作手册 1.路由配置 测试配置路由: Route::get('/test', 'TestController@index'); 2.控制器书写 3.模型文件 4.增加扩展类文件 L ...

  3. HBase学习与实践

    Photo by bealach verse on Unsplash 参考书籍:<HBase 权威指南> -- Lars George著. 文章为个人从零开始学习记录,如有错误,还请不吝赐 ...

  4. 一道短小精悍的JS小题目

    看到题目你是不是以为我在开车,没错,我就不承认,你能咋的,你瞅啥,别瞅我,瞅题 题目是这样式的 结果是啥呀,这里我就不买关子了,结果是undefined,相信基础好一点的大佬们一眼就能看出来,像我这种 ...

  5. Thinkphp5.0第四篇

    删除数据 当前模型删除 $user=UserModel::get(1); if($user->delete()){return '删除成功';} else{return '删除失败';} 根据主 ...

  6. 【主动学习】Variational Adversarial Active Learning

    本文记录了博主阅读ICCV2019一篇关于主动学习论文的笔记,第一篇博客,以后持续更新哈哈 论文题目:<Variational AdVersarial Active Learning> 原 ...

  7. Inkscape 旋转并复制

    画一个图形,点击图标. 然后图标中心有个十字叉, 然后把这个十字叉拖到你想要旋转的地方. 然后shift+ctrl+m打开变换菜单. 选择旋转选项卡,然后设置角度,点击应用.就可以旋转了,如果配合ct ...

  8. [经验分享]C# 操作Windows系统计划任务

    背景:我做了一个事情是要自己提前创建好很多要定时执行的任务,在我不在的时候自动执行这些程序,以保证我的工作能无人值守,那么我就需要建立系统计划任务来帮我完成这件事情,当然用脑子想想如何实现,很简单,每 ...

  9. Windows 8.1硬盘安装Ubuntu 14.04双系统参考教程及多硬盘注意事项

    本文来自:http://www.linuxidc.com/Linux/2015-08/122140.htm,此处仅做收藏. Windows 8.1硬盘安装Ubuntu 14.04双系统参考教程及多硬盘 ...

  10. go-接口-反射

    接口类型总是代表着某一种类型(即所有实现它的类型)的行为. 一个接口类型的声明通常会包含关键字type.类型名称.关键字interface以及由花括号包裹的若干方法声明. type Animal in ...