paneCDockablePane类的使用
目录
CDockablePane与对话框类联合使用方法 (2)
CDockablePane与CTreeCtrl类联合使用的方法 (6)
CDockablePane同CFormView类的联合使用方法 (9)
两个带图标的CDockablePane派生类与CFormView类的联合使用方法 (12)
CDockablePane类的布局设计 (15)
CDockablePane窗口风格设置 (23)
去除VS2010风格的框架菜单 (24)
在View视图类中使用CSplitterWnd来拆分视图窗口(不在CMainFrame类的虚函数OnCreateClient中拆分视图框架窗口) (25)
禁止dockablepane停靠浮动拖动 (27)
VS2010菜单修改不了问题 (28)
VS2010 DockablePane 每次打开都自动隐藏 (30)
EnableDocking函数解释 (31)
CDockablePane与对话框类联合使用方法
1、新建对话框资源:
①新建一个对话框资源IDD_DIALOG_DOCKDLG,Style设为Child,Border设为None;
②把默认的OK和Cancel按键去掉,因为一般情况下点击这两个按钮后,对话框会销毁,
而这里是不需要销毁的(如果没去掉点击了,悬浮框中的对话框内容就不能用了);
③如下添加一个按钮IDC_BUTTON_TEST,后为对话框添加类CTestDlg;
④为按钮添加响应
void CTestDlg::OnBnClickedButtonTest()
{
// TODO: Add your control notification handler code here
MessageBox(_T("Hello World!"));
}
2、派生CDockablePane类
①添加继承自CDockablePane的类CMyPane
②添加此类的WM_CREATE和WM_SIZE消息响应,并添加上面对话框的成员变量
CTestDlg m_TestDlg;
③在CMyPane::OnCreate和CMyPane::OnSize函数中添加代码
int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CRect rectDummy;
rectDummy.SetRectEmpty();
// 创建选项卡窗口:
if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this))
{
TRACE0("未能创建输出选项卡窗口/n");
return -1; // 未能创建
}
m_TestDlg.ShowWindow(SW_SHOW);
return 0;
}
void CMyPane::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);
/
/ TODO: Add your message handler code here
// 选项卡控件应覆盖整个工作区
m_TestDlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
m_TestDlg.ShowWindow(SW_SHOW);
}
3、修改MainFrame类
①然后在MainFrame.h代码中添加成员变量
CMyPane m_MyPane;
②在CMainFrame::OnCreate函数中添加代码
if (!m_wndStatusBar.Create(this))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
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);
// 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); // 调整m_MyPane的大小使之适合父窗口
4、运行结果
5、补充
① CDockablePane派生类销毁时,对话框也销毁掉(没有试验)
void ControlPanel::OnDestroy()
{
CDockablePane::OnDestroy();
// TODO: Add your message handler code here
m_dlg.DestroyWindow();
}
② CDockablePane派生类对象的Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID,前面使用的是对话框的IDD
m_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论