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

tbwshc

tbw

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

常用鏈接

留言簿(4)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

前言

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

二分裂視窗的類型

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

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

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

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

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

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

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

其次,重載CMainFrame類別中的OnCreateClient(LPCREATESTRUCT,CCreateContext* pContext)函數(shù)。在該函數(shù)中利用CsplitterWnd類別的構造函數(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是準備建立靜態(tài)分裂視窗的視窗框架控件的指針;

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

結束語

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

posted on 2012-08-05 14:26 tbwshc 閱讀(873) 評論(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>
            久久成人18免费观看| 久久精品99| 欧美日韩一区在线播放| 一区二区三区国产精华| 亚洲日本激情| 欧美三区在线视频| 性欧美暴力猛交69hd| 亚洲欧美日韩视频一区| 国产精品尤物| 免费亚洲一区| 欧美日韩一区二区国产| 亚洲欧美国产精品桃花| 久久精视频免费在线久久完整在线看 | 久久久综合网站| 在线观看成人一级片| 欧美韩日高清| 欧美日韩国产bt| 亚洲欧美欧美一区二区三区| 欧美一二三区精品| 国产视频一区二区在线观看| 麻豆成人在线观看| 欧美日韩大片| 久久国产精品色婷婷| 欧美a级片一区| 亚洲欧美另类在线| 老牛国产精品一区的观看方式| 一区二区三区回区在观看免费视频| 亚洲欧美卡通另类91av| 亚洲国产你懂的| 亚洲影视在线| 亚洲精品网站在线播放gif| 一区二区成人精品| 永久免费毛片在线播放不卡| 亚洲美女精品久久| 黄色一区二区在线| 夜夜爽av福利精品导航| 在线观看日韩av电影| av成人国产| 亚洲第一页自拍| 亚洲欧美日韩另类| 一区二区三区波多野结衣在线观看| 欧美中文字幕在线播放| 宅男精品视频| 欧美sm重口味系列视频在线观看| 欧美亚洲网站| 欧美日精品一区视频| 欧美 日韩 国产精品免费观看| 欧美性片在线观看| 91久久精品国产91性色tv| 一区二区视频欧美| 午夜精品福利在线观看| 一本色道久久| 久久综合国产精品台湾中文娱乐网| 午夜精彩视频在线观看不卡| 欧美不卡高清| 欧美国产日韩一区| 精品69视频一区二区三区| 亚洲一级黄色av| 亚洲视频在线观看视频| 欧美精品日韩一本| 亚洲国产一区二区三区a毛片| 国产一区二区在线观看免费播放 | 久久久www成人免费毛片麻豆| 欧美日韩精品一区二区三区四区| 欧美韩日视频| 亚洲激情精品| 欧美国产乱视频| 欧美激情精品久久久久| 亚洲精品久久久久久一区二区| 久久久久久久精| 蜜臀99久久精品久久久久久软件| 韩国成人精品a∨在线观看| 久久精品首页| 欧美a级片网站| 亚洲精品国精品久久99热| 男人天堂欧美日韩| 91久久国产精品91久久性色| 日韩视频免费观看高清在线视频 | 亚洲午夜在线观看| 亚洲免费一在线| 国产欧美精品va在线观看| 亚洲综合三区| 久久午夜羞羞影院免费观看| 1769国产精品| 欧美日韩精品免费观看| 这里只有精品在线播放| 欧美影院成年免费版| 有码中文亚洲精品| 女女同性精品视频| 一本色道综合亚洲| 欧美一区二视频| 在线欧美日韩国产| 欧美大片国产精品| 亚洲午夜一级| 免费欧美日韩国产三级电影| 亚洲精品视频在线观看免费| 欧美午夜宅男影院在线观看| 欧美亚洲综合另类| 亚洲激情av| 亚洲欧美在线播放| 亚洲国产精品久久久久秋霞蜜臀 | 久久精品99久久香蕉国产色戒| 亚洲风情在线资源站| 亚洲天堂偷拍| 一区二区三区自拍| 欧美性大战久久久久久久蜜臀| 午夜久久黄色| 亚洲九九精品| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲三级影院| 国内自拍一区| 国产精品成人一区| 欧美大片免费看| 欧美一区午夜视频在线观看| 亚洲欧洲日产国码二区| 久久久久一区二区| 亚洲一区中文| 日韩视频免费观看高清完整版| 国产亚洲欧美另类一区二区三区| 欧美成人三级在线| 久久久xxx| 香蕉成人啪国产精品视频综合网| 亚洲精品一区二区网址 | 亚洲午夜视频| 91久久精品美女高潮| 国产婷婷色一区二区三区| 欧美日韩国产限制| 免费人成精品欧美精品| 欧美一区二区三区在线| 亚洲色图自拍| 亚洲伦理在线免费看| 亚洲国产精品99久久久久久久久| 欧美一区亚洲| 午夜一区在线| 亚洲欧美视频在线| 在线一区二区三区四区| 亚洲精品123区| 亚洲国产精品成人综合色在线婷婷 | 欧美专区在线观看| 亚洲视频欧洲视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 在线成人性视频| 国产一区二区三区黄视频| 国产精品自在线| 国产精品久久久久一区二区三区| 欧美伦理91| 欧美午夜精品电影| 国产精品剧情在线亚洲| 国产精品拍天天在线| 国产精品久久久久影院色老大| 欧美性色aⅴ视频一区日韩精品| 欧美日韩在线播放三区四区| 欧美四级在线| 国产精品视频yy9299一区| 国产精品尤物福利片在线观看| 国产裸体写真av一区二区| 国产美女精品视频免费观看| 国产亚洲精品v| 影音先锋一区| 亚洲毛片一区二区| 亚洲深夜影院| 久久国产99| 欧美成人免费网站| 亚洲激情在线播放| 在线视频欧美日韩精品| 亚洲欧美一级二级三级| 久久久久九九视频| 欧美成人a视频| 国产精品扒开腿爽爽爽视频| 国产精品一区二区久久国产| 国产日韩欧美在线播放| 影视先锋久久| 亚洲午夜久久久久久久久电影院| 性欧美video另类hd性玩具| 久久亚洲综合| 亚洲精品国产精品乱码不99| 亚洲在线1234| 美国十次成人| 国产精品亚洲美女av网站| 激情欧美一区二区三区| 99www免费人成精品| 欧美一区视频在线| 亚洲二区在线| 校园春色综合网| 欧美精品久久一区| 国产亚洲免费的视频看| 日韩午夜三级在线| 欧美在线视频免费播放| 亚洲国产精品va在线看黑人| 亚洲欧美日本国产专区一区| 欧美sm极限捆绑bd| 国产尤物精品| 亚洲免费在线观看| 欧美激情aⅴ一区二区三区| 亚洲一区二区综合| 欧美成人在线免费视频| 国内不卡一区二区三区| 亚洲视频中文| 欧美成人免费播放| 欧美一级片一区|