VC設(shè)計(jì)分割視圖通用創(chuàng)建框架_第1頁(yè)
VC設(shè)計(jì)分割視圖通用創(chuàng)建框架_第2頁(yè)
VC設(shè)計(jì)分割視圖通用創(chuàng)建框架_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VC設(shè)計(jì)分割視圖通用創(chuàng)建框架目前基于分割視圖的應(yīng)用開(kāi)發(fā)十分流行,分割視圖技術(shù)是在同一個(gè)框架窗口下同時(shí)顯示多個(gè)視圖的一項(xiàng)技術(shù).運(yùn)用分割視圖,可以在較短時(shí)間內(nèi)給用戶更多的信息量,從而使得用戶界面更加的友好,增強(qiáng)了軟件的可操作性.本文提出一個(gè)分割視圖的通用創(chuàng)建框架.1 分割視圖創(chuàng)建框架分割視圖的創(chuàng)建大體上分為兩個(gè)步驟;其一是創(chuàng)建分割窗體;然后就是處理鼠標(biāo)和鍵盤(pán)等消息.1.1 創(chuàng)建分割窗體MFC提供分割窗體類CsplitterWnd,它提供了很多對(duì)于分割窗體操作的成員函數(shù),每一個(gè)分割窗體都是一個(gè)CsplitterWnd的對(duì)象.本文提出的框架由于需要對(duì)定制的分割窗體進(jìn)行擴(kuò)充處理,所以首先從Csplitt

2、erWnd繼承一個(gè)子類CFixSplitterWnd,然后每個(gè)分割窗體是一個(gè)CfixSplitterWnd的對(duì)象,這樣以后只需要對(duì)CfixSplitterWnd進(jìn)行改寫(xiě)后就可以增強(qiáng)分割窗體的功能.(后面將提出這種改寫(xiě))創(chuàng)建分割窗體最重要的函數(shù)是主框架類的OnCreateClient函數(shù),它將在主框架創(chuàng)建的時(shí)候調(diào)用,本文將創(chuàng)建一個(gè)如下顯示的分割窗體; 圖1則可以如下實(shí)現(xiàn);/成員變量聲明CFixSplitterWnd m_wndSplitterH; /用于橫向切割CFixSplitterWnd m_wndSplitterV; /用于縱向切割BOOL m_bCreateSplitter;/

3、分割窗體的實(shí)現(xiàn)BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) /對(duì)整個(gè)主框架進(jìn)行混合分割視圖BOOL bResult=m_wndSplitterV.CreateStatic(this,1,2);ASSERT(bResult);m_wndSplitterH.CreateStatic(&m_wndSplitterV,4,1,WS_CHILD | WS_VISIBLE,m_wndSplitterV.IdFromRowCol(0,1);/創(chuàng)建各自子窗片的對(duì)應(yīng)的視圖m_wndSp

4、litterV.CreateView(0,0,RUNTIME_CLASS(CSceneView),CSize(600,600),pContext);m_wndSplitterH.CreateView(0,0,RUNTIME_CLASS(CPitchView),CSize(100,100),pContext);m_wndSplitterH.CreateView(1,0,RUNTIME_CLASS(CYawView),CSize(100,100),pContext);m_wndSplitterH.CreateView(2,0,RUNTIME_CLASS(CRollView),CSize(100,1

5、00),pContext);m_wndSplitterH.CreateView(3,0,RUNTIME_CLASS(CControlView),CSize(100,100),pContext);/其中,CreateStatic(this,1,2)函數(shù)是將當(dāng)前主框架拆分成1行2列. 框架拆分后從0行0列開(kāi)始編號(hào)./CreateView(0,0,RUNTIME_CLASS(CNewView), CSize(rect.Width()/2,10),pContext)函數(shù)是讓視圖類CNewView顯示在框架的第0行第0列.CSize決定視圖的大小,這里是讓兩個(gè)視圖窗口大小一樣./設(shè)置窗格的初始化的大小m

6、_wndSplitterV.SetRowInfo(0,IDEAL_RAWHEIGHT,0);m_bCreateSplitter=TRUE;/激活sceneview使得其可以接受命令消息m_wndSplitterV.SetActivePane(0,0,NULL);return bResult; /主框架窗體大小發(fā)生變化,調(diào)節(jié)相應(yīng)的窗體大小void CMainFrame:OnSize(UINT nType, int cx, int cy) CMDIFrameWnd:OnSize(nType, cx, cy); CRect rect;GetClientRect(rect

7、);if (m_bCreateSplitter)/變量m_bSplitterCreated是用來(lái)判斷是否切分窗口的,不加這個(gè)的話,第一次運(yùn)行的時(shí)候會(huì)出錯(cuò)/在MainFrm.h中 定義變量BOOL m_bSplitterCreated;/在CMainFrame的 構(gòu)造函數(shù)中初始化m_bSplitterCreated=FALSE;m_wndSplitterV.SetColumnInfo(0,rect.Width() *3/4,10);m_wndSplitterV.SetColumnInfo(1,rect.Width() *1/4,10);m_wndSplitterH.SetRowInfo(0,re

8、ct.Height() /6,10);m_wndSplitterH.SetRowInfo(1,rect.Height() /6,10);m_wndSplitterH.SetRowInfo(2,rect.Height() /6,10);m_wndSplitterH.SetRowInfo(3,rect.Height()/2,10);m_wndSplitterV.RecalcLayout();m_wndSplitterH.RecalcLayout(); 注意m_wndSplitterH.CreateView 中的第二個(gè)參數(shù),這個(gè)參數(shù)將分割窗體和相應(yīng)的視圖類相對(duì)應(yīng).通過(guò)上述的程序代碼即可創(chuàng)建

9、圖1所示的分割窗體,那么由于這里每個(gè)分割窗體都是一個(gè)CfixSplitterWnd對(duì)象,所以可以通過(guò)改寫(xiě)CfixSplitterWnd類的虛函數(shù)或消息處理函數(shù)來(lái)完成自己特定的應(yīng)用實(shí)現(xiàn).(注意,如果需要對(duì)定制有特定屬性的分割窗體,一定要派生自己的分割窗體類而不能是MFC的CsplitterWnd類)這里我們需要分割窗體不能隨鼠標(biāo)拖動(dòng)而改變其大小,即所有窗格的大小都是一定的,不能在運(yùn)行時(shí)刻改變.所以必須在CfixSplitterWnd類的實(shí)現(xiàn)中加入如下代碼;void CFixSplitterWnd:OnMouseMove(UINT nFlags, CPoint point) CWnd:O

10、nMouseMove(nFlags, point); /防止鼠標(biāo)出現(xiàn)拖動(dòng)狀/ CSplitterWnd:OnMouseMove(nFlags, point); /鼠標(biāo)會(huì)在窗體邊界出現(xiàn)拖動(dòng)狀至此,分割窗體已經(jīng)創(chuàng)建完畢,下面需要在分割窗體里處理消息.1.2 分割窗體處理消息在分割窗體里處理消息和一般的文檔視圖模型處理消息大致一樣,但它也有其特殊之處.具體來(lái)說(shuō),由于各個(gè)分割窗體已經(jīng)與具體的視圖類相聯(lián)系了,所以在需要處理各個(gè)分割窗體中的消息時(shí),可以直接到相應(yīng)的視圖類中進(jìn)行處理;另外,多視圖之間的切換會(huì)導(dǎo)致目標(biāo)焦點(diǎn)之間的變更,這樣會(huì)影響菜單中與視圖有關(guān)的命令的執(zhí)行.比如在圖1中所示的分割窗體中,有一個(gè)“開(kāi)始”命令必須是焦點(diǎn)在CsceneView視圖上時(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論