`
java-mans
  • 浏览: 11818990 次
文章分类
社区版块
存档分类
最新评论

在CDockablePane中嵌入对话框

 
阅读更多

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: }

编译运行后,可以发现框架中添加了一个停靠栏,之前创建的那个对话框嵌入在里面。

分享到:
评论

相关推荐

    在CDockablePane中嵌入对话框(含源码)

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中利用CDockablePane类来嵌入对话框。CDockablePane是MFC提供的一种功能强大的类,用于创建可停靠的面板,它允许用户灵活地组织和管理应用...

    CDockablePane中嵌入对话框,嵌入CView拆分

    本文将深入探讨如何在CDockablePane中嵌入对话框以及如何拆分CView,这两个主题都是MFC框架下创建复杂UI的重要组成部分。 首先,让我们了解一下CDockablePane类。CDockablePane是MFC中一个非常关键的类,它用于创建...

    VS2017 CDockablePane 嵌入对话框

    在本文中,我们将深入探讨如何在Visual Studio 2017中使用`CDockablePane`类来嵌入对话框。`CDockablePane`是MFC(Microsoft Foundation Classes)库中的一个关键组件,用于创建可停靠的用户界面元素,如工具栏或...

    CDockablePane中创建CWinFormsView

    在给定的标题“CDockablePane中创建CWinFormsView”中,涉及到的关键技术是在一个可停靠的pane(CDockablePane)中嵌入Windows Forms视图(CWinFormsView)。这样的设计可以让我们在MFC应用中利用.NET Framework的...

    VC++同时关闭多个子对话框!!

    MFC提供了对对话框管理的一些支持,如CDialogBar和CDockablePane等,它们可以方便地嵌入到主窗口中,并能自动管理其生命周期。如果你使用了这些特性,关闭主窗口时,子对话框可能也会自动关闭。 在实际应用中,...

    可浮动窗体

    在描述中提到的“在添加的Pane中添加对话框”,指的是将一个对话框(CDialog派生类)嵌入到CDockablePane中。这通常通过创建一个基于对话框资源的子类,并将其作为成员变量添加到CDockablePane类中来实现。然后,...

    浮动窗体制作,值得学习的好实例!

    6. DlgBar类:在某些情况下,如果你的浮动窗体需要包含对话框元素,可以使用MFC的DlgBar类,它允许将对话框资源嵌入到浮动窗体中。 7. 响应WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息:这些消息在窗口位置改变...

    MFC类库参考手册(二)(H~W).rar

    11. **COleServerDoc** 和 **COleServerItem**: 支持OLE(Object Linking and Embedding)技术,使得MFC应用程序可以作为嵌入或链接对象在其他应用程序中使用。 12. **CAsyncSocket** 和 **CSocket**: 提供了网络...

    VC6.0编写多标签浏览器

    - 使用Internet Explorer的ActiveX控件(WebBrowser Control),这是一个可以直接嵌入到应用程序中的网页浏览组件。 - 在CWnd派生类中,添加WebBrowser Control的成员变量,并在创建窗口时实例化它。通过调用...

    MS VC++ 6.0 MFC类库参考手册一

    7. COleServerDoc和COleClientItem:这些类支持OLE(Object Linking and Embedding),允许在不同应用程序之间嵌入和链接对象。 8. CRecordset和CDatabase:用于数据库编程,提供了一种面向对象的方式来访问和操作...

Global site tag (gtag.js) - Google Analytics