MFC拆分視窗及它們之間的資料交換[轉]

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   檔案   資料   

原始碼:http://download.csdn.net/detail/nuptboyzhb/4221531

CSplitterWnd類

CSplitterWnd類提供一個分隔器視窗的功能,分隔器視窗是一個包含有多個窗格的視窗。窗格通常是應用程式特定的由CView派生的對象,但它也可以是具有適當子視窗ID的任何CWnd對象。

一個CSplitterWnd對象通常被嵌入CFrameWnd或CMDIChildWnd父物件。你應按如下步驟建立一個CSplitterWnd對象

1.在父架構中嵌入一個CSplitterWnd成員變數。

2.重載父架構的CFrameWnd::OnCreateClient成員函數。

3.從重載的OnCreateClient函數中調用類CSplitterWnd的Create或CreateStatic成員函數。

3.1調用Create成員函數可以建立一個動態的分隔器視窗。

3.2 使用CreateStatic成員函數可以建立一個靜態分隔器視窗。

4. 從重載的OnCreateClient函數中調用類CSplitterWnd的CreateView成員函數;

 

重要的函數講解:

BOOL Create( CWnd* pParentWnd,
             int nMaxRows,
             int nMaxCols,
             SIZE sizeMin,
             CCreateContext* pContext,
             DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT,
             UINT nID = AFX_IDW_PANE_FIRST
           );
傳回值:如果成功則返回非零值;否則返回0。
參數:

pParentWnd

分隔器視窗的父架構視窗。

nMaxRows

分隔器視窗中的最大行數。這個值不能超過2。

nMaxCols

分隔器視窗中的最大列數。這個值不能超過2。

sizeMin

指出顯示一個窗格所需的最小尺寸。

pContext

指向一個CCreateContext結構的指標。多數情況下,這個值可以是傳遞給父架構視窗的pContext

dwStyle

指定視窗的風格。

nID

此視窗的子視窗ID。如果這個分隔器視窗不是嵌套在另一個分隔器視窗中的,則這個ID可以是AFX_IDW_PANE_FIRST。

 

 

BOOL CreateStatic( CWnd* pParentWnd,
                   int nRows,
                   int nCols,
                   DWORD dwStyle = WS_CHILD | WS_VISIBLE,
                   UINT nID = AFX_IDW_PANE_FIRST
                 );

傳回值:如果成功則返回非零值;否則返回0。
參數:

pParentWnd

分隔器視窗的父架構視窗。

nRows

行數。這個值必須不超過16。

nCols

列數。這個值必須不超過16。

dwStyle

指定視窗的風格。

nID

此視窗的子視窗ID。如果這個分隔器視窗不是嵌套在另一個分隔器視窗中的,則這個ID可以是AFX_IDW_PANE_FIRSH。

virtual BOOL CreateView( int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext );
傳回值:如果成功則返回非零值;否則返回0。
參數:

row

指定用來放置新視的分隔器視窗行。

col

指定用來放置新視的分隔器視窗列。

pViewClass

指定新視的CRuntimeClass。

sizeInit

指定新視的初始尺寸。

pContext

指向用來建立此視的建立環境的指標(通常,該pContext被傳遞給在其中建立此分隔器視窗的父架構的重載的OnCreateClient成員函數)。

注意: 第三個參數CruntimeClass為RUNTIME_CLASS(類名);如果該類是資源類,那麼該類的父類必須是CformView,

 

應用舉例:

1.       建立一個單文檔的應用程式,命名為SplitterWndDemo;

2.       插入一個對話方塊的資源,作為其中一個分割視窗;為對話方塊添加相應的控制項;

2.1設定對話方塊的屬性:將‘樣式’設定為‘下層’;禁止使用標題列;邊框選擇‘調整大小’;其他格式暫時都不設定;

2.2為對話方塊建立一個類,類名CLeftView;父類選擇為CFormView;

3.       在CMainFrame嵌入一個CSplitterWnd成員變數。

CSplitterWnd m_splitterWnd;

4.       重載父架構CMainFrame的CFrameWnd::OnCreateClient成員函數,編輯代碼如下:

 1 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 2  3 { 4  5 // TODO: Add your specialized code here and/or call the base class 6  7 //獲得主視窗的大小 8  9 CRect rect;10 11 GetClientRect(&rect);12 13 //產生第一次靜態切分14 15 m_splitterWnd.CreateStatic(this, //父視窗指標16 17                                                                    1,    //行數18 19                                                                    2);   //列數20 21 //為第1個窗格產生視圖22 23 m_splitterWnd.CreateView(0,0,24 25            RUNTIME_CLASS(CLeftView),26 27            CSize(rect.Width()/4,rect.Height()),28 29            pContext); 30 31 32 //為第2個窗格產生視圖33 34 m_splitterWnd.CreateView(0,1,  //窗格的行、列序數35 36            RUNTIME_CLASS(CSplitterWndDemoView),//視圖類37 38            CSize(rect.Width()-rect.Width()/5,rect.Height()),//初始化大小 39 40            pContext);//父視窗的建立參數41 42 return TRUE;//不再調用基類的OnCreateClient函數43 44 //return CFrameWnd::OnCreateClient(lpcs, pContext);45 46 }

注意:要添加標頭檔

#include "SplitterWndDemoView.h"

#include "LeftView.h"

由於CSplitterWndDemoView是應用程式的視圖類,在其標頭檔中添加文檔類的標頭檔#include"SplitterWndDemoDoc.h",否則會報錯:‘CSplitterWndDemoDoc‘ : missing storage-class or type specifiers

至此,介面已經完成

 

================================================================================

拆分視窗之間的資料傳遞:

 

一.應用文檔類進行資料傳遞

每一個由View類派生出來的類,都可以調用CView::GetDocument,獲得當前應用程式文檔類的指標;然後進行類型轉換;注意,要將文檔類的標頭檔包含進去;

舉例:(繼續上述應用程式的編程)

1.      為文檔類添加一個CString類型的成員變數m_str;

2.      為CLeftView添加一個按鈕控制項和一個編輯框控制項;為編輯框控制項關聯一個CString類型的成員變數;對按鈕控制項添加訊息響應函數,並編輯代碼如下:

UpdateData();

CSplitterWndDemoDoc *pDoc =(CSplitterWndDemoDoc*)GetDocument();//擷取文檔

pDoc->m_str=m_edit_data;//傳遞資料

    pDoc->UpdateAllViews(NULL);//更新所有視圖

3.      在CSplitterWndDemoView::OnDraw(CDC* pDC)編輯代碼如下:

CSplitterWndDemoDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

    pDC->TextOut(200,200,pDoc->m_str);

 

二.通過獲得對方視圖的指標,進行操作的互動

通過AfxGetApp()獲得應用程式的指標,然後再通應用程式的指標獲得主架構CMainFrame的指標,然後有CMainFrame的指標,獲得CMainFrame的CsplitterWnd類型的成員變數m_splitterWnd;然後調用m_splitterWnd的GetPane函數;即可獲得;

1.      為視圖類添加一個CString類型的成員變數m_str_view;

2.      為CleftView再添加一個按鈕控制項;編輯代碼如下:

CSplitterWndDemoApp *pApp = (CSplitterWndDemoApp *)AfxGetApp();//獲得應用程式的指標

CMainFrame *pFrame = (CMainFrame *)pApp->m_pMainWnd;//獲得主架構的指標

CSplitterWndDemoView *pView = (CSplitterWndDemoView *)pFrame->m_splitterWnd.GetPane(0,1);//獲得視圖類的指標

pView->m_str_view=m_edit_data;//資料傳遞

pView->Invalidate();//重繪視圖

注意:添加相應類的標頭檔:

#include "MainFrm.h"

#include "SplitterWndDemoView.h"

3.      修改CsplitterWndDemoView類的OnDraw(CDC* pDC)函數

pDC->TextOut(200,300,m_str_view);

三.自訂的訊息;

 

轉自:http://blog.csdn.net/nupt123456789/article/details/7455471

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.