在Dialog中使用Menu和Toolbar
来源:互联网 发布:python 数据库编程 编辑:程序博客网 时间:2024/06/01 10:15
本文适合初学者
前言
在用VC编程时,界面制作远不如Delphi、VB容易。我又常常用到基于Dialog编写应用程序。而在直接在Dialog使用Toolbar和Menu的资料很少。而我有机会可以总结一些经验,供大家分享,希望能得到指教。
下载本文示例工程 大小:11.2K
运行效果如下图
我们先建立一个基于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_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(CDlgMenuToolbarDlg)ON_WM_PAINT()ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )//}}AFX_MSG_MAPEND_MESSAGE_MAP()
四、其它
为了使你的程序看起来更酷,还可以在CDlgMenuToolbarDlg::OnPaint()中修改代码实现Dialog 填充颜色。
CPaintDC dc(this);CRect rect; GetClientRect(rect); dc.FillSolidRect(rect, RGB(60,110,170));
好了,编译运行看看效果吧!希望本文能够给您一些提示!
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar(作者:xujian)
- 在Dialog中使用Menu和Toolbar(作者:xujian)
- 在Dialog中使用Menu和Toolbar 作者 xujian(www.vchelp.com)
- 在Dialog中使用Toolbar
- Toolbar和menu使用
- Dialog中使用Toolbar
- dialog中使用toolbar
- Dialog中使用Toolbar
- C#中关于DLL的基础调用和获取DLL的入口点
- Tomcat6.0中配置数据源的方法
- 利用Java导入并操作 Microsoft Excel 文档
- 博士后和民工的区别
- C#与Flash交互
- 在Dialog中使用Menu和Toolbar
- 企业中的4种人才
- Java调用存储过程的2种方法
- 在对话框中加入工具条与 RepositionBars的调用
- 判断表中字段是否存在并添加
- sources.list use proxy
- 解决Microsoft JET Database Engine (0x80040E09) 不能更新,数据库或对象为只读
- 利用游标操作多个数据库
- JSF伴随着Java EE 5从幕后走上前台