CDockablePane类可以用来创建停靠栏。可以将其他控件集成到CDockablePane的派生类中。本文描述如何将对话框集成到CDockablePane中。集成其他控件的方式类似。
1、首先创建多文档应用程序,创建一个对话框类CTestDlg。
2、在程序添加一个停靠栏类,名为ControlPanel,其父类为CDockablePane,在该类中添加对话框成员。
需要将对话框的style设置为child。另外border设置为none的话,得到的界面看上去会更主流一点。
1: class ControlPanel : public CDockablePane
2: {
3: .....
4: public:
5: CTestDlg m_dlg;
6: };
3、在ControlPanel的OnCreate方法中创建并显示对话框。
1: int ControlPanel::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3: if (CDockablePane::OnCreate(lpCreateStruct) == -1)
4: return -1;
5:
6: // TODO: Add your specialized creation code here
7:
8: m_dlg.Create(IDD_DIALOG_TEST,this);
9: m_dlg.ShowWindow(SW_SHOW);
10: return 0;
11: }
4、ControlPanel销毁时,对话框也销毁掉:
1: void ControlPanel::OnDestroy()
2: {
3: CDockablePane::OnDestroy();
4:
5: // TODO: Add your message handler code here
6: m_dlg.DestroyWindow();
7: }
5、ControlPanel尺寸变化、隐藏的时候,对话框也要做相关处理:
1: void ControlPanel::OnSize(UINT nType, int cx, int cy)
2: {
3: CDockablePane::OnSize(nType, cx, cy);
4:
5: // TODO: Add your message handler code here
6: if(m_dlg.GetSafeHwnd())
7: {
8: CRect rct;
9: GetClientRect(rct);
10: m_dlg.MoveWindow(rct);
11: }
12: }
6、在框架类中添加ControlPanel成员:
1: class CMainFrame : public CMDIFrameWndEx
2: {
3: ...
4: ControlPanel m_Panel;
5: ...
6: };
7、在框架类创建时,创建这个ControlPanel对象:
Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID。
1: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3: ...
4: m_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,
5: WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);
6: m_Panel.EnableDocking(CBRS_ALIGN_ANY);
7:
8: EnableDocking(CBRS_ALIGN_ANY);
9: DockPane(&m_Panel);
10: ...
11: }
编译运行后,可以发现框架中添加了一个停靠栏,之前创建的那个对话框嵌入在里面。
分享到:
相关推荐
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中利用CDockablePane类来嵌入对话框。CDockablePane是MFC提供的一种功能强大的类,用于创建可停靠的面板,它允许用户灵活地组织和管理应用...
本文将深入探讨如何在CDockablePane中嵌入对话框以及如何拆分CView,这两个主题都是MFC框架下创建复杂UI的重要组成部分。 首先,让我们了解一下CDockablePane类。CDockablePane是MFC中一个非常关键的类,它用于创建...
在本文中,我们将深入探讨如何在Visual Studio 2017中使用`CDockablePane`类来嵌入对话框。`CDockablePane`是MFC(Microsoft Foundation Classes)库中的一个关键组件,用于创建可停靠的用户界面元素,如工具栏或...
在给定的标题“CDockablePane中创建CWinFormsView”中,涉及到的关键技术是在一个可停靠的pane(CDockablePane)中嵌入Windows Forms视图(CWinFormsView)。这样的设计可以让我们在MFC应用中利用.NET Framework的...
MFC提供了对对话框管理的一些支持,如CDialogBar和CDockablePane等,它们可以方便地嵌入到主窗口中,并能自动管理其生命周期。如果你使用了这些特性,关闭主窗口时,子对话框可能也会自动关闭。 在实际应用中,...
在描述中提到的“在添加的Pane中添加对话框”,指的是将一个对话框(CDialog派生类)嵌入到CDockablePane中。这通常通过创建一个基于对话框资源的子类,并将其作为成员变量添加到CDockablePane类中来实现。然后,...
6. DlgBar类:在某些情况下,如果你的浮动窗体需要包含对话框元素,可以使用MFC的DlgBar类,它允许将对话框资源嵌入到浮动窗体中。 7. 响应WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息:这些消息在窗口位置改变...
11. **COleServerDoc** 和 **COleServerItem**: 支持OLE(Object Linking and Embedding)技术,使得MFC应用程序可以作为嵌入或链接对象在其他应用程序中使用。 12. **CAsyncSocket** 和 **CSocket**: 提供了网络...
- 使用Internet Explorer的ActiveX控件(WebBrowser Control),这是一个可以直接嵌入到应用程序中的网页浏览组件。 - 在CWnd派生类中,添加WebBrowser Control的成员变量,并在创建窗口时实例化它。通过调用...
7. COleServerDoc和COleClientItem:这些类支持OLE(Object Linking and Embedding),允许在不同应用程序之间嵌入和链接对象。 8. CRecordset和CDatabase:用于数据库编程,提供了一种面向对象的方式来访问和操作...