<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC拆分窗口及它們之間的數據交換

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    源代碼:http://download.csdn.net/detail/nuptboyzhb/4221531

    CSplitterWnd

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

    一個CSplitterWnd對象通常被嵌入CFrameWndCMDIChildWnd父對象。你應按如下步驟創建一個CSplitterWnd對象:

    1.

    父框架中嵌入一個CSplitterWnd成員變量。

    2.

    重載父框架的CFrameWnd::OnCreateClient成員函數。

    3.

    從重載的OnCreateClient函數中調用類CSplitterWndCreateCreateStatic成員函數。

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

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

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

    重要的函數講解:

    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成員函數)。

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

    應用舉例:

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

    2.       插入一個對話框的資源,作為其中一個分割窗口;為對話框添加相應的控件;

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

    2.2為對話框創建一個類,類名CLeftView;父類選擇為CFormView;

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

    CSplitterWnd m_splitterWnd;

    4.       重載父框架CMainFrameCFrameWnd::OnCreateClient成員函數,編輯代碼如下:

    [cpp] view plaincopy
    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的指針,獲得CMainFrameCsplitterWnd類型的成員變量m_splitterWnd;然后調用m_splitterWndGetPane函數;即可獲得;

    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);

    三.自定義的消息;

     

     

    from:http://blog.csdn.net/nupt123456789/article/details/7455471

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全