把CDialog对话框资源创建成CDialogBar

来源:互联网 发布:河南公务员网络培训 编辑:程序博客网 时间:2024/05/22 20:25

1.  创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为OverlappedPopup(把原有的Dialog属性改一下);

2.  建立关于次对话框的类CDlgMircoImage,由于可选项只有CDialog,没有CDialogBar;所以选择CDialog作为基类

3.  修改:修改派生类以CDialogBar为基类(添加手动)

如下;

1). class CDlgMircoImage : public CDialog 改为class CDlgMircoImage: public CDialogBar

2). CDlgMircoImage:: CDlgMircoImage (CWnd* pParent /*=NULL*/)
: CDialog(CDlgMircoImage::IDD, pParent)////
修改(方法一:CDialog改成CDialogBar;方法二:把这一行注释掉如//: CDialog(CDlgMircoImage::IDD, pParent)

{

//{{AFX_DATA_INIT(CDlgMircoImage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT

}

3). void CDlgMircoImage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX); ///
把这一行注释掉如// CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCurrentCheckDlg)
………..
//}}AFX_DATA_MAP
}

 

 

3. 重新初始化函数

首先在ClassWizardMessageMap中对消息该CDlgMircoImage类的WM_INITDIALOG消息添加处理函数默认名为OnInitDialog手工修改代码如下:

1、   添加消息映射函数。由于对话框形式的初始化函数消息并未加载到消息映射内,为此我们需要手工添加,要不然代码无法拦截该工具条的初始化消息,形式如下:
BEGIN_MESSAGE_MAP(CDlgMircoImage, CDialogBar)
//{{AFX_MSG_MAP(CDlgMircoImage)
.......
//添加:ON_MESSAGE(WM_INITDIALOG,OnInitDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

2修改OnInitDialog函数,此函数并未传递参数,但是在这里我们需要让它传递参数,代码如下修改

BOOL CDlgMircoImage::OnInitDialog(UINT wParam,LONG lParam)    
{  
        //CDialogBar::OnInitDialog();  
        // TODO: Add extra initialization here  

//以下部分手动添加
       
BOOL bRet = HandleInitDialog(wParam,lParam);  
        if (!UpdateData(FALSE))  
        {  
                      TRACE("Init
CDlgMircoImage Failed");  
        }  
        return TRUE; // return TRUE unless you set the focus to a control  
                                    // EXCEPTION: OCX Property Pages should return FALSE  
}  

 

4.  首先,在框架类的头文件内声明实例对象,本例实例化:CDlgMircoImage m_pNavigator;当然头文件中不可避免要包含新派生类的头文件。

其次,在框架类的OnCreate函数内创建对象并将对象绑定对话框资源。形式与创建ToolBar原理一样,本例实例如下:

 if (!m_pNavigator.Create(this, IDD_DIALOG_IMAGE_MICRO 

|CBRS_SIZE_DYNAMIC|CBRS_BOTTOM, IDD_DIALOG_IMAGE_MICRO))  

{  

                              TRACE0("Failed to CDlgMircoImage  create  bar!");  
                              return -1;  
    }

 

5.  添加并修改框架类的OnCmdMsg虚函数:

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)   

 {                 

 // TODO: Add your specialized code here and/or call the base class  
               
if (m_pNavigator.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))  
                              return TRUE; 
  //修改部分
                return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);  
}  

 

 

 

原创粉丝点击