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

編譯運行后,可以發現框架中添加了一個停靠欄,之前創建的那個對話框嵌入在里面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM