基本思路:
第一步:先创建一个MFC的类,继承自CDockablePane。
第二步:给该类添加WM_CREATE、WM_SIZE消息处理函数。
第三步:创建一个对话框资源,并关联一个类。
第四步:在新的Pane类的WM_CREATE消息处理函数中添加创建上面对话框的代码;
同时在新的Pane类的WM_SIZE消息处理函数中添加上述创建的对话框位置的代码;
第五步:在项目的框架类的OnCreate函数中创建panel对象,并使之可停靠。
具体实现如下:
1.新建一个MFC应用程序,命名为TestDockablePane,类型是SDI或者MDI:
2.创建继承自CDockablePane的类CMyPane:
3.给类CMyPane添加WM_CREATE、WM_SIZE消息处理函数。
4.创建一个想放入悬浮框的对话框资源IDD_DIALOG_DOCKDLG,style设为child,border设为none,建议把默认的“确定”和“取消”按钮去掉,因为一般情况下点击这两个按钮后,对话框会销毁,而这里是不需要销毁的。(如果不小心点击了,悬浮框中的对话框内容就不能用了)为该对话框添加一个IDC_BUTTON_TEST按钮,点击弹出提示框。然后给该对话框资源关联一个类CDockablePaneDlg。
5.在类CMyPane头文件中添加如下代码:
#include "DockablePaneDlg.h"
public:
CDockablePaneDlg m_dlg;
在CMyPane.cpp文件的OnCreate函数中增加下述代码:
// TODO: 在此添加您专用的创建代码
CRect rectDummy;
rectDummy.SetRectEmpty();
//创建选项卡窗口
if (!m_dlg.Create(IDD_DIALOG_DOCKDLG,this))
{
TRACE0("未能创建输出选项卡窗口/n");
return -1;
}
m_dlg.ShowWindow(SW_SHOW);
在CMyPane.cpp文件的OnSize函数中增加下述代码:
// TODO: 在此处添加消息处理程序代码
//选项卡控件应覆盖整个工作区
m_dlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
m_dlg.ShowWindow(SW_SHOW);
6.在MainFrm.h中添加如下代码:
#include "MyPane.h"
public:
CMyPane m_MyPane;
7.在MainFrm.cpp中的OnCreate函数中添加如下代码:
if (!m_MyPane.Create(_T("MyPane"), this, CRect(0, 0, 100, 100), TRUE, IDD_DIALOG_DOCKDLG, WS_CHILD | WS_VISIBLE |WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建输出窗口/n");
return FALSE;
}
m_MyPane.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_MyPane); // 调整m_MyPane的大小使之适合父窗口
8.demo程序见
http://download.csdn.net/detail/xiaxiaojing/8811341