1.创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为Overlapped或Popup,否则运行肯定出错;至于边界属性则随用户自己喜欢,一般都是选择None。其余属性也随用户选择,一般没有特殊要求还是选择默认的好。
2.自己派生一个继承于CDialogBar的类,注意此时由于ClassWizard没有把CDialogBar列出来,所以只好自己手动编写.h和.cpp,然后加上必要的处理函数,如:
class CmyDlgWnd : public CDialogBar
{
public:
CmyDlgWnd(CWnd *pParent=NULL);
virtual ~CmyDlgWnd();
//{{AFX_VIRTUAL(CmyDlgWnd)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(myDlgWnd)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
3.假设在对话框添加了一个按钮,现在要响应,可以手动编写处理函数:
.h:
afx_msg void OnClose();
.cpp:
BEGIN_MESSAGE_MAP(CmyDlgWnd, CDialogBar)
//{{AFX_MSG_MAP(CmyDlgWnd)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_CLOSE,OnClose)
END_MESSAGE_MAP()
4.同上,如果想添加关联变量,可以这样做:
.h:
CString m_edit;
.cpp:
void CmyDlgWnd::DoDataExchange(CDataExchange* pDX)
{
CDialogBar::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Csql)
DDX_Text(pDX, IDC_EDIT1, m_edit);
//}}AFX_DATA_MAP
}
5.处理完毕后,在CMainFrame中添加:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
//创建控制条
if(!m_wndDlg.Create(this,IDD_DIALOG2,CBRS_LEFT,100))
return -1;
//停泊控制条
m_wndDlg.EnableDocking(CBRS_ORIENT_HORZ);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndDlg);
}
6.注意此时对话框控制条并不能响应消息,因为消息被CMainFrame截获,因此要想办法把消息转发给CDialogBar,方法就是重载OnCmdMsg,具体的消息转发知识理论将在下次专题中推出:
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if(CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
return m_wndDlg.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
以上就是一种处理方法,还有一种方法是:(转载),该方法可以
提供ClassWizard帮助,比较好