自定义的对话框
今天学习一下为工具栏添加一个自定义的对话框,是MFC封装好的。。。
一,首先还是先创建一个普通的单文档视图程序,名字叫BinCustomPage其它的基本设置就和上遍文章中的所提到的一样。。。
二, 像上节中提到的一样,
在stdafx.h 中加入下句 #include <afxcontrolbars.h>。
修改 BinCustomPage.h 和.cpp中的CWinApp为CWinAppEx。
修改CMainFrame的父类为CFrameWndEx,这里我看到示例程序是用了以下这句
#define CFrameWnd CFrameWndEx,这样可以省下改很多东西。。挺不错的
三, 为CMainFrame添加三个成员变量
CMFCStatusBar m_wndStatusBar;
CMFCMenuBar m_wndMenuBar;
CMFCToolBar m_wndToolBar;
删除原来的
CToolBar m_wndToolBar;
CStatusBar m_wndStatusBar;
(小样,现在不要你们了)
四, 我们先自己建一个菜单栏
Stardard Toolbar的 ID 为ID_STARDARD_TOOLBAR
Custom 的 ID 为ID_VIEW_CUSTOMIZE
整个菜单的名称为 IDR_MENU1
五,
图表 1
接着修改CMainFrame::OnCreate函数,修改后如下
... {
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//这个是用来换肤功能的,这次我们设置为黑色的
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
//允许自定义功能
CMFCToolBar::EnableQuickCustomization();
//创建菜单栏
if(!m_wndMenuBar.Create(this))
...{
TRACE0("Faild to create menubar");
return -1;
}
//设置菜单栏类型
m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle()| CBRS_SIZE_DYNAMIC);
//创建工具栏
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
...{
TRACE0("Failed to create toolbar ");
return -1; // fail to create
}
//设置状态栏
if (!m_wndStatusBar.Create(this))
...{
TRACE0("Failed to create status bar ");
return -1; // fail to create
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
//这个是浮动工具栏的标题
CString strMainToolBarTitle("Standard Toolbar");
m_wndToolBar.SetWindowText(strMainToolBarTitle);
//将工具和菜单栏设置为可以浮动
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar);
//没有这个,那个自定义的对话框就出不来了
m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, _T("Custom..."));
return 0;
}
六 ,为Custom菜单项添加消息响应函数,名称为OnViewCustomize
ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
... {
// TODO: Add your command handler code here
//这个是可以为自定义对话框添加属性页,这里我们就不加了
CList<CRuntimeClass* ,CRuntimeClass*> lstCustomPages;
//以下就是传说中MFC内置的对话框类
CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog
(this, TRUE, AFX_CUSTOMIZE_MENU_SHADOWS| AFX_CUSTOMIZE_TEXT_LABELS
|AFX_CUSTOMIZE_MENU_ANIMATIONS, &lstCustomPages);
pDlgCust->Create();
}
七最后效果图
图表 2