在Dialog中使用Menu和Toolbar

2016-01-29 11:50 80 1 收藏

在Dialog中使用Menu和Toolbar,在Dialog中使用Menu和Toolbar

【 tulaoshi.com - C语言心得技巧 】

在Dialog中使用Menu和Toolbar
作者:xujian

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

本文适合初学者

前言
在用VC编程时,界面制作远不如Delphi、VB容易。我又常常用到基于Dialog编写应用程序。而在直接在Dialog使用Toolbar和Menu的资料很少。而我有机会可以总结一些经验,供大家分享,希望能得到指教。

下载本文示例工程 大小:11.2K

运行效果如下图

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

我们先建立一个基于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 toolbarn");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_MSGDECLARE_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 _UNICODEif (pNMHDR->code == TTN_NEEDTEXTA){lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));}else{_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));}#elseif (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(CDlgMenuTo
                        

来源:https://www.tulaoshi.com/n/20160129/1483544.html

延伸阅读
对于名称空间,理解了OO思想的人应该是比较简单的了,特别是对学过C++的人来说更是 如此;但很多看了我前面文章的朋友,在和我的交流中,好像对名称空间都不怎么清楚, 下面我们就来说说怎么样在 XML Schema和WSDL中使用名称空间. 先看看一段JAVA代码: package com.hongsoft.test.pkg1; import com.hongsoft.test.pkg2.Test1; import com.hongsof...
标签: ASP
创建对象 在VBScript中创建对象类型(类)时,你首先要知道,这真的很容易!我在一个下午自学,只是阅读了Microsof VB Script 的参考书,但必须承认,这书不是最容易阅读的文档。 初学者需要安装VBScript 5.0引擎,可以在Microsoft's Scripting Site下载。 我们来看代码。类的定义与函数和子过程非常类似。起始行为Class ,结尾是End C...
    我们已经熟悉在 ASP 中通过调用 SQL Server 存储过程来执行数据库操作,不过大家是否知道,在桌面级数据库 Access 中,我们也能够创建并使用“存储过程”? Access + ASP 是开发轻量级 Web 应用程序的绝佳组合:简单,快速,兼容性好,但是性能通常不高。并且,用 ADODB.Connection 和 Recordset 对象来执行 SQL 语句的方式...
标签: word
在Word中使用函数计算 如下图一样,存在如下的表格。 电脑教程 现在,我们要计算的就是男女生的总人数,所以,把插入条定位在总人数的下面的那个单元格。 然后,执行如下图的菜单操作:表格→公式。 弹出如下图。 上图中,直接输入公式: =Sum(A2,B2) 最后,点击确定按钮,计算结果就出来...
标签: ASP
前言 首先,在我进入实质性主题并解释如何建立类之前,我希望保证你知道“对象”。虽然你可以在程序中使用对象而不用知道其正确的规则,但我并不建议如此!对于对象的初学者,接下来的部分将让你了解其概念及内容。已经了解面向对象编程(OOP)的读者可以跳过这章节。 导论 l “对象是什么?”——对象通常代表某种实体,主要是一个变量...

经验教程

350

收藏

40
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部