VC++2008 初体验(二)--自定义对话框

来源:互联网 发布:淘宝买药提交需求以后 编辑:程序博客网 时间:2024/04/29 13:09

自定义的对话框

今天学习一下为工具栏添加一个自定义的对话框,是MFC封装好的。。。

 

一,首先还是先创建一个普通的单文档视图程序,名字叫BinCustomPage其它的基本设置就和上遍文章中的所提到的一样。。。

二,  像上节中提到的一样,

stdafx.h 中加入下句 #include <afxcontrolbars.h>

     修改 BinCustomPage.h .cpp中的CWinAppCWinAppEx

     修改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

 

  
原创粉丝点击