1. 在资源里添加dialog时,使用formview的dialog。
2. 给dialog添加类CParamsDlg,基类选CDialog,生成代码后,将代码中的CDialog改成CPanedialog
3. 创建CPaneDialog,其中m_wndFileView是一个CDockablePane子类的对象。
if
(
!
m_wndFileView.Create(strFileView,
this
, CRect(
0
,
0
,
200
,
200
), TRUE, ID_VIEW_FILEVIEW, WS_CHILD
|
WS_VISIBLE
|
WS_CLIPSIBLINGS
|
WS_CLIPCHILDREN
|
CBRS_LEFT
|
CBRS_FLOAT_MULTI))

{
TRACE0("Failed to create File View window/n");
return FALSE; // failed to create
}

if
(
!
m_dlgParams.Create (_T(
"
DialogBar
"
),
this
, TRUE,
MAKEINTRESOURCE (IDD_FORM_PARAMS),
WS_CHILD
|
WS_VISIBLE
|
WS_CLIPSIBLINGS
|
WS_CLIPCHILDREN
|
CBRS_LEFT
|
CBRS_FLOAT_MULTI,
IDD_FORM_PARAMS))

{
TRACE0("Failed to create Dialog Bar/n");
return FALSE; // fail to create
}

m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
m_dlgParams.EnableDocking(CBRS_ALIGN_ANY);
DockPane(
&
m_wndFileView);
m_dlgParams.DockToWindow (
&
m_wndFileView, CBRS_ALIGN_BOTTOM);

4. 在CParamsDlg中对控件添加响应事件,不能捕获到,初步想到的解决办法未,在CParamsDlg中添加一个通过控件id取得控件内容的函数,然后将窗体中的按钮响应事件,添加到mainframe中,这样由mainframe来捕获,在响应函数里调用CParamsDlg中的函数,来获得对应控件的值。
cpanedialog风格问题:
在你的dialog里面加入WM_PAINT的响应,在OnPaint()函数里写如下代码:
CPaintDC dc(this);
CMemDC memDC(dc,this);
CRect rectClint;
GetClientRect(rectClint);
CMFCVisualManagerOffice2007::GetInstance()->OnFillOutlookPageButton(&memDC.GetDC(),this,rectClient, rectClient);
以上这些代码还没验证,先把它保存下来