自定义的对话框
今天学习一下为工具栏添加一个自定义的对话框,是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函数,修改后如下
int
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)


...
{

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)
void
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