程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 使用VC6.0實現窗口的任意分割

使用VC6.0實現窗口的任意分割

編輯:vc教程
 一、關於CSplitterWnd類

  我們在使用CuteFTP或者NetAnt等工具的時候,一般都會被其復雜的界面所吸引,在這些界面中窗口被分割為若干的區域,真正做到了窗口的任意分割。 那麼我們自己如何創建類似的界面,也實現窗口的任意的分割呢 ?在VC6.0中這就需要使用到CSplitterWnd類。CSplitterWnd看上去像是一種特殊的框架窗口,每個窗口都被相同的或者不同的視圖所填充。當窗口被切分後用戶可以使用鼠標移動切分條來調整窗口的相對尺寸。雖然VC6.0支持從AppWizard中創建分割窗口,但是自動加入的分割條總是不能讓我們滿意,因此我們還是通過手工增加代碼來熟悉這個類。

  CSplitterWnd的構造函數主要包括下面三個。


BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWord dwStyle,UINT nID);
  功能描述:該函數用來創建動態切分窗口。 參數含義:pParentWnd 切分窗口的父框架窗口。 nMaxRows,nMaxCols是創建的最大的列數和行數。 sizeMin是窗格的現實大小。 pContext 大多數情況下傳給父窗口。 nID是字窗口的ID號.
BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWord dwStyle,UINT nID)
  功能描述:用來創建切分窗口。 參數含義同上。
BOOL CreateView (int row,int col,CruntimeClass* pVIEwClass,SIZE sizeinit,CcreateContext* pContext);
  功能描述:為靜態切分的窗口的網格填充視圖。在將視圖於切分窗口聯系在一起的時候必 須先將切分窗口創建好。

  參數含義:同上。

  從CSplitterWnd源程序可以看出不管是使用動態創建Create還是使用靜態創建CreateStatic,在函數中都調用了一個保護函數CreateCommon,從下面的CreateCommon函數中的關鍵代碼可以看出創建CSplitterWnd的實質是創建了一系列的MDI子窗口。

DWord dwCreateStyle = dwStyle & ~(WS_HSCROLL|WS_VSCROLL);
if (afxData.bWin4)
       dwCreateStyle &= ~WS_BORDER; //create with the same wnd-class as MDI-Frame (no erase bkgnd)
if (!CreateEx(0, _afxWndMDIFrame, NULL, dwCreateStyle,
          0, 0, 0, 0,pParentWnd->m_hWnd, (HMENU)nID, NULL))
       return FALSE; // create invisible
         
  二、創建嵌套分割窗口

  2.1創建動態分割窗口

  動態分割窗口使用Create方法。下面的代碼將創建2x2的窗格。

m_wndSplitter.Create(this,2,2,CSize(100,100),pContext);
  但是動態創建的分割窗口的窗格數目不能超過2x2,而且對於所有的窗格,都必須共享同一個視圖,所受的限制也比較多,因此我們不將動態創建作為重點。我們的主要精力放在靜態分割窗口的創建上。

  2.2創建靜態分割窗口

  與動態創建相比,靜態創建的代碼要簡單許多,而且可以最多創建16x16的窗格。不同的窗格我們可以使用CreateVIEw填充不同的視圖。

  在這裡我們將創建CuteFtp的窗口分割。CuteFTP的分割情況如下:


CCuteFTPVIEw
CView2 CVIEw3
CVIEw4

  創建步驟:

  ▲ 在創建之前我們必須先用AppWizard生成單文檔CuteFTP,生成的視類為 CCuteFTPView.同時在增加三個視類或者從視類繼承而來的派生類CView2,CView3 CVIEw4.

  ▲ 增加成員:

  在Cmainfrm.h中我們將增加下面的代碼:

CSplitterWnd wndSplitter1;
CSplitterWnd wndSplitter2;

  ▲ 重載CMainFrame::OnCreateClIEnt()函數:
BOOL CMainFrame::OnCreateClIEnt( LPCREATESTRUCT  /*lpcs*/, CCreateContext* pCont

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved