青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

tbwshc

tbw

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(4)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

前言

在許多視窗應(yīng)用軟件中,通常要在屏幕上同時(shí)顯示若干個(gè)子視窗,以顯示同一個(gè)文檔的不同部分,或者是在每個(gè)視窗中分別顯示不同文檔的內(nèi)容。為了實(shí)現(xiàn)多視窗界面,可以采用MDI(Multiple Document Interface)的多文檔模式進(jìn)行處理,但是多文檔的應(yīng)用程序設(shè)計(jì)與維護(hù)相對(duì)于單文檔的應(yīng)用程序而言比較復(fù)雜。而且,如果要在屏幕上同時(shí)顯示多個(gè)子視窗,通常要利用視窗重疊函數(shù)進(jìn)行管理,每個(gè)子視窗的位置往往需要用鼠標(biāo)人為設(shè)定,過(guò)多的人為干預(yù)降低了程序使用的效率。因此,如果能對(duì)單文檔視窗做適當(dāng)?shù)姆至眩瑹o(wú)疑程序使用者將可以得到更易于操作的接口,數(shù)據(jù)的顯示也更加直觀和方便。本文通過(guò)對(duì)單文檔視窗的靜態(tài)分裂原理進(jìn)行分析,實(shí)現(xiàn)上述要求。

二分裂視窗的類型

視窗的分裂可分為兩種類型,一是動(dòng)態(tài)分裂,二是靜態(tài)分裂。動(dòng)態(tài)分裂可以讓使用者通過(guò)拖曳分裂方塊的使用,將視窗分裂。但是,動(dòng)態(tài)分裂最多只可以將視窗分裂為2×2個(gè)子視窗,不能進(jìn)行混合分裂視窗,所有子視窗的屬性和父視窗都是一樣的,而且子視窗的數(shù)據(jù)通常來(lái)源于同一處。而靜態(tài)分裂,使用者除了可以調(diào)整子視窗的大小和進(jìn)行混合分裂視窗外,最多可將視窗分裂為16×16個(gè)子視窗,每個(gè)子視窗可以有各自不同的視圖類(CView),各個(gè)子視窗顯示的數(shù)據(jù)可以來(lái)自于不同的數(shù)據(jù)源。不論是要?jiǎng)?chuàng)建動(dòng)態(tài)分裂視窗還是靜態(tài)分裂視窗,都必須要利用MFC的CSplitterWnd類別來(lái)完成視窗的分裂。

混合靜態(tài)分裂視窗的實(shí)現(xiàn)

混合分裂視窗是指在子視窗中進(jìn)行視窗的再分裂。在MFC的框架下,混合分裂視窗必須完成三件工作:

⑴在視窗框架類別中定義CSplitterWnd控件為其屬性(數(shù)據(jù)成員)。

⑵重載視窗框架類別中的OnCreateClient函數(shù)(CFrameWnd::OnCreateClient),建立靜態(tài)分裂子視窗,為靜態(tài)分裂子視窗填充視圖。

⑶建立維持各子視窗同步更新的機(jī)制。

首先,利用MFC AppWizard生成一個(gè)單文檔應(yīng)用程序,在應(yīng)用程序的CMainFrame類別中聲明CSplitterWnd類別的數(shù)據(jù)成員。

其次,重載CMainFrame類別中的OnCreateClient(LPCREATESTRUCT,CCreateContext* pContext)函數(shù)。在該函數(shù)中利用CsplitterWnd類別的構(gòu)造函數(shù)Create Static(CWnd *pParentWnd,int nRows,int nCols,DWORD dwstyle,UINT nID) 創(chuàng)建混合靜態(tài)分裂子視窗,即在Create Static分裂出的子視窗中利用CsplitterWnd類別的控件再一次分裂視窗。

Create Static函數(shù)的參數(shù)含義為:

·pParentWnd是準(zhǔn)備建立靜態(tài)分裂視窗的視窗框架控件的指針;

·nRows和nCols是準(zhǔn)備建立靜態(tài)分裂視窗行數(shù)(nRows)與列數(shù)(nCols)

因此,創(chuàng)建的靜態(tài)分裂子視窗個(gè)數(shù)為nRows × nCols個(gè),這兩個(gè)參數(shù)最小不得小于0,最大不可超過(guò)16;dwstyle是設(shè)定子視窗的形式;nID靜態(tài)分裂的代號(hào)(ID),此代號(hào)預(yù)設(shè)為AFX_IDW_PANE_FIRST,若靜態(tài)分裂視窗位于另一個(gè)分裂視窗內(nèi)時(shí),不可以使用默認(rèn)值,可以利用CsplitterWnd類別的成員函數(shù)IdFromRowCol(int row,int col)獲得。利用CsplitterWnd類別的成員函數(shù)Create View (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext) 為靜態(tài)分裂子視窗填充視圖,在將視圖與子視窗關(guān)聯(lián)時(shí)必須先完成子視窗的創(chuàng)建。

Create View函數(shù)的參數(shù)含義為:

·row和col是指定準(zhǔn)備建立View控件的子視窗,其指定的方式是以表示該子視窗所在的行列位置;

·pViewClass是指定用于建立子視窗View控件的View類別,該類別需要被聲明為Run-Time類別;

·Sizeini是View控件的起始大小;pContext是一個(gè)指向記錄應(yīng)用程序所使用的視窗框架控件、Document控件,以及View控件之變量的指針,此參數(shù)在CMainFrame::OnCreateClient函數(shù)被調(diào)用時(shí)傳入,再由該tb函數(shù)傳遞給此函數(shù)。

·CsplitterWnd類別的成員函數(shù)SetColumnInfo(int col,int cxIdeal,int cxMin)和SetRowInfo(int row,int cyIdeal,cyMin)為設(shè)置子視窗的寬度和高度,參數(shù)cxIdeal和cxMin是指定子視窗的寬度和最小寬度,cyIdeal和cyMin是指定子視窗的高度和最小高度,在使用這兩個(gè)函數(shù)調(diào)整子視窗的大小后還應(yīng)該使用該類別的成員函數(shù)RecalLayout()重新調(diào)整視窗框架的布局。如果要設(shè)定視窗框架里的活動(dòng)子視窗,可以通過(guò)CsplitterWnd類別的成員函數(shù)SetActivePane(int row,int col,CWnd* pWnd=NULL)來(lái)完成,該函數(shù)指定子視窗的方式有兩種,一是指出子視窗所在的行列,二是傳入指向該子視窗的控件指針。

最后,將視窗分裂成多個(gè)子視窗后,整個(gè)視窗程序中將存在多個(gè)View控件。當(dāng)在其中一個(gè)View控件執(zhí)行更新操作時(shí),如何讓其它View控件同步更新數(shù)據(jù)?可以通過(guò)文檔類別(CDocument)的UpdateAllViews(CView* pSender,LPARAM lHint,CObject* pHint)成員函數(shù)的調(diào)用,再由該函數(shù)分別調(diào)用目前存在于視窗程序中各View控件的On Update函數(shù)來(lái)完成數(shù)據(jù)的同步更新。

UpdateAllViews函數(shù)的參數(shù)含義為:

·pSender是指向引發(fā)更新操作的View控件指針,如果傳入NULL表示所有視圖都要執(zhí)行更新操作;

·lHint是用于傳送更新視圖時(shí),需要傳送的額外信息參數(shù);

·pHint是指向記錄更新視圖所需額外信息的控件。在調(diào)用該函數(shù)時(shí),將View控件的指針傳入的目的是要告訴該函數(shù)該子視圖已經(jīng)完成數(shù)據(jù)更新,該函數(shù)不需要再調(diào)用該子視圖的On Update進(jìn)行數(shù)據(jù)更新。


子視圖的動(dòng)態(tài)切換

在多視圖應(yīng)用程序中,可以通過(guò)改變CCreateContext對(duì)象的值,來(lái)創(chuàng)建更加靈活的視圖,實(shí)現(xiàn)多視圖的動(dòng)態(tài)切換。CCreateContext是MFC框架所使用的一種數(shù)據(jù)結(jié)構(gòu),它將構(gòu)成文檔/視圖結(jié)構(gòu)的組件聯(lián)系起來(lái)。這個(gè)結(jié)構(gòu)包括指向文檔的指針、視窗框架的指針、視圖的指針以及文檔模板的指針,它還包含一個(gè)指向CRuntimeClass結(jié)構(gòu)的指針,以指明所創(chuàng)建的視圖的類型。

其數(shù)據(jù)成員如下:

·m_pNewViewClass是指向創(chuàng)建上下文的視圖的CRuntimeClass結(jié)構(gòu)的指針;

·m_pNewDocTemplate是指向與視窗框架的創(chuàng)建相聯(lián)系的文檔模板的指針;

·m_pCurrentDoc是指向文檔對(duì)象的指針,以和新視圖tb聯(lián)系起來(lái);

·m_pLastView是指向已存在的視圖的指針,它是新產(chǎn)生的視圖的模型;

·m_pCurrentFrame是指向已存在的視窗框架的指針,它是新產(chǎn)生的視窗框架的模型。

此外,任何一個(gè)從CObject類別繼承而來(lái)的子類別,在使用宏DECLARE_DYNAMIC、DECLARE_DYNCREATE、DECLARE_SERIAL三個(gè)中的任意一個(gè)時(shí)都會(huì)產(chǎn)生一個(gè)CRuntimeClass結(jié)構(gòu)的靜態(tài)對(duì)象,RUNTIME_CLASS返回的就是這個(gè)對(duì)象的指針,這個(gè)對(duì)象包含了其基類和本身在運(yùn)行時(shí)刻的信息。

在單文檔靜態(tài)分裂視窗的應(yīng)用程序中,利用CsplitterWnd類別的成員函數(shù)Delete View(int row,int col)可以刪除子視窗的原有視圖,然后再通過(guò)該類別的成員函數(shù)Create View為子視窗創(chuàng)建新的視圖。但是,創(chuàng)建新視圖前必須初始化創(chuàng)建上下文相關(guān)指針,即對(duì)CCreateContext結(jié)構(gòu)賦值。值得注意的是,使用Create View函數(shù)創(chuàng)建的新視圖不能自動(dòng)調(diào)用視圖類別的成員函數(shù)OnInitialUpdate和自動(dòng)顯示并且激活新視圖,需要人工調(diào)用OnInitialUpdate函數(shù)和ShowWindow(SW_SHOW) 函數(shù),這些函數(shù)的調(diào)用都可以通過(guò)CsplitterWnd類別的成員函數(shù)Get Pane(int row,int col)獲得新視圖的指針來(lái)完成。

結(jié)束語(yǔ)

在MFC的框架下,混合分裂視窗有多種編程方法,本文只是從CsplitterWnd類別的角度去分析混合靜態(tài)分裂視窗的實(shí)現(xiàn)方法,希望能給讀者起到拋磚引玉的作用。

posted on 2012-08-05 14:26 tbwshc 閱讀(872) 評(píng)論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲激情午夜| 国产欧美精品日韩精品| 欧美国产激情| 久久免费黄色| 免费不卡在线视频| 久久久久久色| 欧美.www| 女同性一区二区三区人了人一| 男人的天堂亚洲| 亚洲大胆女人| 亚洲激情另类| 一区二区三区精品久久久| a4yy欧美一区二区三区| 最新亚洲一区| 亚洲免费福利视频| 亚洲欧美精品| 久久久久久电影| 久久中文精品| 亚洲国产成人午夜在线一区| 亚洲欧洲在线观看| 亚洲伊人观看| 久久综合电影| 欧美日韩视频在线一区二区 | 免费视频久久| 亚洲国产一区二区三区在线播| 亚洲精品美女在线观看| av成人毛片| 欧美一区二区三区在线| 欧美激情成人在线视频| 国产精品国产三级国产专区53| 在线观看一区欧美| 亚洲中无吗在线| 亚洲大片在线| 欧美一区1区三区3区公司| 欧美不卡一卡二卡免费版| 国产精品xxxav免费视频| 亚洲高清一区二区三区| 亚洲免费网址| 亚洲国产天堂久久综合| 久久av老司机精品网站导航| 欧美电影美腿模特1979在线看| 国产精品视频一区二区高潮| 亚洲精品乱码久久久久久黑人| 午夜欧美精品久久久久久久| 亚洲欧洲日本专区| 鲁大师成人一区二区三区| 国产精品一区二区你懂得 | 在线看一区二区| 性色一区二区| 亚洲人午夜精品| 蜜臀99久久精品久久久久久软件 | 久久一区二区三区av| 一区二区日韩免费看| 米奇777在线欧美播放| 国产亚洲一区在线| 亚洲欧美日韩成人| 夜久久久久久| 欧美三级中文字幕在线观看| 亚洲精品视频在线| 欧美电影资源| 久久网站热最新地址| 国外成人在线视频| 久久亚洲视频| 久热精品在线| 亚洲三级免费电影| 久久精品欧美日韩| 亚洲免费av电影| 欧美乱妇高清无乱码| 亚洲全部视频| 亚洲电影第三页| 欧美激情第9页| 一区二区三区四区在线| 99精品欧美| 欧美午夜一区二区三区免费大片| 亚洲五月六月| 亚洲欧美在线一区二区| 国产精品视屏| 久久久噜噜噜久久| 久久全球大尺度高清视频| 亚洲欧洲日产国产综合网| 欧美大片一区二区| 欧美国产一区二区三区激情无套| 一本色道久久综合亚洲精品不| 一本到高清视频免费精品| 国产精品人人做人人爽人人添| 欧美亚洲视频在线观看| 欧美在线视频播放| 亚洲国产二区| 日韩一级黄色av| 国产一区免费视频| 亚洲国产一二三| 国产精品综合视频| 美女精品在线| 欧美日本亚洲视频| 久久精品国产综合| 欧美精品久久久久久久久老牛影院 | 香蕉成人久久| 在线观看欧美| 一区二区三区产品免费精品久久75| 国产精品第一页第二页第三页| 久久国产精品99国产精| 老司机精品导航| 午夜电影亚洲| 免费不卡欧美自拍视频| 亚洲欧美在线磁力| 久久九九国产| 亚洲午夜激情在线| 久久夜色撩人精品| 亚洲欧美久久久| 免费在线播放第一区高清av| 亚洲综合精品一区二区| 久久九九久精品国产免费直播 | 欧美精品福利| 欧美诱惑福利视频| 欧美成人精品在线播放| 午夜欧美不卡精品aaaaa| 欧美成黄导航| 久久一区二区三区av| 国产精品国产三级国产普通话三级| 蜜月aⅴ免费一区二区三区 | 久久久www免费人成黑人精品 | 亚洲国产精品一区二区www在线| 一区二区精品在线| 亚洲美女视频网| 久久手机免费观看| 欧美主播一区二区三区| 欧美视频中文一区二区三区在线观看 | 久久久久国产精品一区二区| 亚洲欧美日韩成人高清在线一区| 欧美成人xxx| 欧美www视频在线观看| 国产日产亚洲精品| 亚洲一区二区在线播放| 一本在线高清不卡dvd| 免费看亚洲片| 欧美成人精品一区二区三区| 国产老肥熟一区二区三区| 亚洲精品一区二区三区蜜桃久| 在线观看日韩av电影| 欧美在线黄色| 欧美淫片网站| 国产偷国产偷亚洲高清97cao| 一本大道av伊人久久综合| 一区二区三区你懂的| 欧美日韩成人一区| 日韩视频中文| 亚洲午夜精品久久久久久app| 欧美日韩一区二区欧美激情| 日韩视频在线一区二区| 亚洲一区二区视频| 欧美日韩在线观看一区二区| 一本色道久久综合亚洲精品婷婷 | 欧美高清在线| 亚洲黄网站在线观看| 免费久久99精品国产自| 欧美国产极速在线| 亚洲精品一区二区在线观看| 欧美大色视频| 99riav久久精品riav| 亚洲欧美www| 国产乱码精品一区二区三区五月婷| 亚洲自拍都市欧美小说| 久久精品欧美| 亚洲国产精品国自产拍av秋霞| 麻豆九一精品爱看视频在线观看免费| 免费日韩视频| 这里只有视频精品| 国产精品视频1区| 欧美在现视频| 欧美韩日精品| 亚洲一区二区三区欧美| 国产日韩av在线播放| 久久琪琪电影院| 亚洲美女视频在线观看| 亚洲欧美成人综合| 在线观看日韩精品| 国产精品国产三级国产普通话蜜臀 | 国产精品久久久久久户外露出| 亚洲综合日韩中文字幕v在线| 久久久久久婷| 一区二区高清在线观看| 国产色爱av资源综合区| 欧美大尺度在线观看| 亚洲一级黄色片| 欧美成人在线免费视频| 一区二区三区日韩精品| 激情丁香综合| 欧美日韩中文字幕在线视频| 午夜一区二区三区不卡视频| 亚洲欧洲偷拍精品| 久久免费视频观看| 亚洲一区国产| 亚洲欧洲在线免费| 国产亚洲精品久久飘花| 欧美日韩高清在线一区| 久久理论片午夜琪琪电影网| 亚洲视频精品在线| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美有码视频| 一区二区激情小说|