VS2008中对于MFC的MDI程序界面做了增强,支持很炫的的布局效果,之前还在说不能用CDialogBar类,现在完全可以使用CDockablePane类替代了,现在只需要新建一个继承自CDockablePane的新类,就可以在其上添加各种控件了,如组合框、对话框等,现在尝试添加一个对话框。
新建一个MFC的多文档程序,如在Wizard中选择标准的MFC MDI
新建一个想放入悬浮框的对话框资源IDD_DIALOG_DOCKDLG,Style设为Child,Border设为None,建议把默认添加的OK和Cancel去掉,因为一般情况下点击这两个按钮后,对话框会销毁,而这里是不需要销毁的(如果没去掉点击了,悬浮框中的对话框内容就不能用了),如下添加一个按钮IDC_BUTTON_TEST。然后为对话框添加类CTestDlg,如下
为按钮添加响应
void CTestDlg::OnBnClickedButtonTest()
{
}
添加继承自CDockablePane的类CMyPane,如下
添加此类的WM_CREATE和WM_SIZE响应,并添加上面对话框的成员变量
CTestDlg m_TestDlg;
在CMyPane::OnCreate和CMyPane::OnSize函数中添加代码,如下
int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}
void CMyPane::OnSize(UINT nType, int cx, int cy)
{
}
然后在MainFrame.h代码中添加成员变量
CMyPane m_MyPane;
在CMainFrame::OnCreate函数中添加代码
if (!m_wndStatusBar.Create(this))
{
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
if (!m_MyPane.Create(_T("MyPane"), this, CRect(0, 0, 100, 100), TRUE, IDD_DIALOG_DOCKDLG,
{
}
m_MyPane.EnableDocking(CBRS_ALIGN_ANY);
// TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar);
DockPane(&m_MyPane);
运行程序,如下
点击按钮,弹出Message对话框
MyPane悬浮框可以悬浮在各个位置,具体见最上面的图片。