先建立一个基于Dialog 的程序,我他起了个名字叫:DlgMenuToolbar。

一、如何往基于Dialog的程序添加菜单

[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。
[1.2] 编辑对话资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话中选择IDR_MENU1即可。

[1.3] 假如您不希望在对话属性中直接设置菜单,而通过代码在程序中动态生成可以采用如下方法:

[1.3.1]在CDlgMenuToolbarDlg类声名中添加成员变量CMenu m_menu
再在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码: //加载菜单
m_menu.LoadMenu(IDR_MENU1);
//设置当前菜单
SetMenu(&m_menu);
//当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单
二、如何往基于Dialog的程序添加工具

[2.1] 先添加工具(IDR_TOOLBAR1)资源,并画好各个按钮。
[2.2] 在CDlgMenuToolbarDlg类声名中添加成员变量 CToolBar m_wndtoolbar;
[2.3] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码  //添加一个平面工具
if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
    CRect(4,4,0,0)) ||!m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )
{
TRACE0("failed to create toolbar/n");
return FALSE;
}
m_wndtoolbar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
三、为工具添加工具提示

[3.1] 在CDlgMenuToolbarDlg类定义中手工添加消息映射函数的定义,如下黑体部分   //{{AFX_MSG(CDlgMenuToolbarDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

[3.2] 在CDlgMenuToolbarDlg.cpp添加函数的实现代码 //工具提示
BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// UNICODE消息
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
//TCHAR szFullText[512];
CString strTipText;
UINT nID = pNMHDR->idFrom;

if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom为工具条的HWND 
nID = ::GetDlgCtrlID((HWND)nID);
}

if (nID != 0) //不为分隔符
{
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find(''/n'',0)+1);

#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#endif

*pResult = 0;

// 使工具条提示窗口在最上面
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
return TRUE;
}
return TRUE;
}

[3.3] 在CDlgMenuToolbarDlg.cpp中添加消息映射,请看如下代码中的黑体部分 BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
//{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
ON_WM_PAINT()
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

四、其它
为了使你的程序看起来更酷,还可以在CDlgMenuToolbarDlg::OnPaint()中修改代码实现Dialog 填充颜色。
CPaintDC dc(this);
CRect rect; 
GetClientRect(rect); 
dc.FillSolidRect(rect, RGB(60,110,170));

五、添加状态栏

static UINT indicators[] =  
 {  
//  ID_SEPARATOR,                       //   status   line   indicator 
  ID_TEST_ITEM,    //自己在STRING TABLE中所定义的ID
  ID_USB_STATE,
  IDS_POWER_STATE,
  ID_DATE,
  ID_TIME,
//  ID_INDICATOR_CAPS,  
//  ID_INDICATOR_NUM,  
//  ID_INDICATOR_SCRL,  
 }; 
void CThreadDemoDlg::OnInitDialog()

{

if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))  
 {  
  TRACE0("Failed to create statusbar/n");  
  return   -1;             //   fail   to   create  
 }   
 RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

}

void CThreadDemoDlg::OnButton1()
{
 CStatusBar* pStatus=&this->m_wndStatusBar;   //对状态栏字符进行修改
 if(pStatus)
 {
  pStatus->SetPaneText(0,"测试0");
  pStatus->SetPaneText(1,"测试1");
  pStatus->SetPaneText(2,"测试2");
  pStatus->SetPaneText(3,"测试3");
  pStatus->SetPaneText(4,"测试4");
 }
}

给对话框添加菜单 工具栏 状态栏简易方法相关推荐

  1. PyQt5中为窗口添加菜单工具栏状态栏

    PyQt5中为窗口添加菜单 QtDesigner中添加菜单 移除菜单栏 添加菜单栏 代码中添加菜单 QtDesigner中添加工具栏 代码中添加工具栏 QtDesigner中添加状态栏 代码中添加状态 ...

  2. Java 在PPT中添加文本水印的简易方法(单一/平铺水印)

    [前言] 在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即在幻灯片中心位置水印以单个文本字样显示,但通过一定方法也可以添加多行(平铺)文本水印效果,即在幻灯片中 ...

  3. qt中添加资源文件以及添加菜单图标、工具栏中菜单的快捷方式、窗口以及对话框的icon

    1.file--new-QT resource file,就会在工程中添加一个资源文件,然后单击Add下拉框,选择Add prefix,可以将生成的/new/prefix的后缀改为其他的名字,如fil ...

  4. MFC对话框中的工具栏、状态栏设计小结

    对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...

  5. C++ Qt学习笔记(2)简易计算器设计(为计算器添加菜单功能)

    Qt中的主窗口为建立桌面应用程序的用户提供了一个框架,Qt中提供了QMainWindow和一些相关的类共同完成主窗口的管理.Qt中的QWidget是一个最基本的窗口控件,只有一个最基本的窗口,其余什么 ...

  6. C语言菜单工具栏在哪里,[c语言-菜单工具栏与状态栏.ppt

    [c语言-菜单工具栏与状态栏 第 6 章 菜单.工具栏与状态栏 参数nflags的含义 Evaluation only. Created with Aspose.Slides for .NET 3.5 ...

  7. c语言菜单栏隐藏,c语言-菜单工具栏与状态栏.ppt

    c语言-菜单工具栏与状态栏 第 6 章 菜单.工具栏与状态栏 参数nflags的含义 岂绩护围汞囊昌懦禁埠逼虫墒帅称惦尊瘫饿剿栏弧历置烂宣茵卑沃琉姐钻c语言-菜单工具栏与状态栏c语言-菜单工具栏与状态 ...

  8. QT添加菜单栏-工具栏-中心区域-状态栏-dock 示范

    QT添加菜单栏-工具栏-中心区域-状态栏-dock 示范 QT添加菜单栏-工具栏-中心区域-状态栏-dock示范.rar-QT文档类资源-CSDN下载QT添加菜单栏-工具栏-中心区域-状态栏-dock ...

  9. MFC对话框程序如何添加菜单

    一般创建MFC有四种程序类型,分别是单个文档,多个文档,基于对话框和顶级文档.其中只有基于对话框的类型是不自带菜单栏的,但是如果需要,也可以手动创建,也是非常简单的. 如何添加菜单? 此处以VS201 ...

最新文章

  1. 01背包 + 概率 之 hdu 2955
  2. 一旦一个业务可以由一个人来全部完成而不涉及分工,就会产生单干的情况
  3. safehandle 和析构函数
  4. 牛客题霸 NC24 删除有序链表中重复的元素-II
  5. live555 源码分析:基础设施
  6. 页面重构-让我们的布局自适应
  7. 为了更好——关于博客搬迁的说明
  8. 太阳能板清洗机器人科沃斯_太阳能电池板清洁机器人
  9. win ftp 指定的密码无效。请键入新密码。_重设OS X (macOS)系统帐户密码的5种方法...
  10. C语言实例 区分旅客国籍
  11. SQL Server 2005 Express数据库为“只读”
  12. hdu1233 还是畅通工程 基础最小生成树
  13. JDK和CGLIB生成动态代理类的区别
  14. try固定搭配_regret cease try等词的固定搭配用法
  15. 帆软报表更新到服务器控件展示不出来_帆软报表问题汇总
  16. 爱测未来移动-iTest特色功能介绍
  17. 微信登录界面安卓代码_「微信多开神器」一键安排你的所有微信
  18. 一个学习小组有5个人,每个人有三门课的考试成绩。将各个数据保存到二维数组a[5][3]中,并求全组分科的平均成绩和总平均成绩
  19. 曲线图chart.js插件例子
  20. CO2/MAG/MIG焊接机(碳钢和不锈钢脉冲)

热门文章

  1. 报错:“java.lang.RuntimeException:Some file crunching failed,see logs for details”
  2. 机器学习对异常值处理方法
  3. java map增加值_Java程序以创建HashMap并添加键值对
  4. 计算机辅助设计技术的应用研究,计算机辅助设计软件在室内设计中的应用研究...
  5. *grep -F/f的作用*
  6. 欧创芯原装OC 6701关断时间可调,智能过温保护芯片,SOP8 封装
  7. potplayer 播放下一个视频时,保持当前屏幕大小不变(锁定播放屏幕尺寸)
  8. 【嵌入式基础】串口中断通信VS串口DMA通信
  9. 三分法解决凸(凹)函数极值问题​​​​​​​
  10. 笔记本一直提示计算机内存不足怎么办,笔记本电脑内存不足怎么办 解决方法...