在CDockablePane中嵌入对话框
CDockablePane类可以用来创建停靠栏。可以将其他控件集成到CDockablePane的派生类中。下文描述如何将对话框集成到CDockablePane中。
a) 创建单文档应用程序;
b) 加入对话框资源,注意,对话框必须有Child属性,Border设置为None
c) 为对话框创建类CDialogEmbeded,基类为CDialogEx
d) 创建派生自CDockablePane的类CDockableDlg
e) 为CDockableDlg添加CDialogEmbeded类型的成员变量m_dlgEmbeded;
f) 重载CDockableDlg的OnCreate函数
int CDockableDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
m_dlgEmbeded.Create(CDialogEmbeded::IDD,this);
m_dlgEmbeded.ShowWindow(SW_SHOW);
return 0;
}
g) 重载CDockableDlg的OnSize函数
void CDockableDlg::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);
// TODO: 在此添加您专用的创建代码
if(m_dlgEmbeded.GetSafeHwnd())
{
CRect rect;
GetClientRect(&rect);
m_dlgEmbeded.MoveWindow(rect);
}
}
h) 重载CDockableDlg的OnDestory函数
void CDockableDlg::OnDestroy()
{
CDockablePane::OnDestroy();
// TODO: 在此处添加消息处理程序代码
m_dlgEmbeded.DestroyWindow();
}
i) 在框架类中添加CDockableDlg对象m_dockDlg
j) 在CMainFrame类的OnCreate函数中添加以下代码,Create函数里面的1001是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
…
EnableDocking(CBRS_ALIGN_ANY);
m_dockDlg.Create("Dock Dlg",this,CRect(0,0,200,200),TRUE,1001,
WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_LEFT|CBRS_FLOAT_MULTI);
m_dockDlg.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_dockDlg);
return 0;
}
k) 疑问:m_dockDlg什么时候销毁?