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

鐵觀音

C++編程寶典

   ::  ::  ::  ::  :: 管理 ::
  1 隨筆 :: 19 文章 :: 0 評論 :: 0 Trackbacks

摘要 本文以MFC(Microsoft Foundation Class Library)的CsplitterWnd類別為基礎,通過對單文檔視窗的靜態分裂原理進行分析,介紹混合靜態分裂視窗的實現方法,并深入闡述子視窗的視圖動態切換技術。

關鍵詞 靜態分裂視窗 動態切換視圖 混合分裂視窗

前言

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

二分裂視窗的類型

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

混合靜態分裂視窗的實現

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

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

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

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

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

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

Create Static函數的參數含義為:

·pParentWnd是準備建立靜態分裂視窗的視窗框架控件的指針;

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

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

Create View函數的參數含義為:

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

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

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

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

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

UpdateAllViews函數的參數含義為:

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

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

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

子視圖的動態切換

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

其數據成員如下:

·m_pNewViewClass是指向創建上下文的視圖的CRuntimeClass結構的指針;

·m_pNewDocTemplate是指向與視窗框架的創建相聯系的文檔模板的指針;

·m_pCurrentDoc是指向文檔對象的指針,以和新視圖聯系起來;

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

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

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

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

結束語

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

?

posted on 2006-09-01 09:54 鐵觀音 閱讀(273) 評論(0)  編輯 收藏 引用 所屬分類: VC界面控件類
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美14一18处毛片| av成人动漫| 亚洲欧洲日产国产综合网| 国产精品久在线观看| 欧美日韩亚洲在线| 欧美日韩免费高清| 欧美深夜影院| 国产综合视频| 亚洲精品婷婷| 性色一区二区三区| 亚洲国产精品电影在线观看| 久久先锋影音av| 欧美成人一区二区三区片免费| 亚洲欧洲偷拍精品| 欧美国产精品久久| 亚洲性感激情| 欧美福利影院| 国语自产在线不卡| 欧美在线中文字幕| 一区二区三欧美| 久久久久久伊人| 国产精品一区毛片| 亚洲毛片在线观看| 欧美成人嫩草网站| 国产精品高潮粉嫩av| 亚洲午夜av在线| 欧美日韩综合一区| 一本色道久久综合亚洲精品婷婷 | 看片网站欧美日韩| 欧美大学生性色视频| 欧美成人亚洲| 亚洲欧美在线看| 久久国产免费| 老色鬼精品视频在线观看播放 | 欧美理论在线| 国产精品夜夜夜一区二区三区尤| 亚洲欧美日韩在线| 在线看片第一页欧美| 国产欧美一区二区三区在线看蜜臀 | 欧美一级专区免费大片| 亚洲国产精品久久久久| 亚洲乱码国产乱码精品精可以看| 亚洲国产另类精品专区| 亚洲制服av| 国产视频一区在线观看一区免费| 欧美成人免费全部| 国产精品久久九九| 亚洲激情在线观看视频免费| 亚洲综合不卡| 亚洲国产欧美在线| 久久久精品免费视频| 国产精品毛片大码女人| 久久精品久久综合| 欧美二区乱c少妇| 一区福利视频| 久久精品一区四区| 亚洲婷婷免费| 欧美午夜寂寞影院| 亚洲人精品午夜| 久久综合久久久久88| 亚洲欧美高清| 国产精品夫妻自拍| 宅男噜噜噜66一区二区| 久久先锋影音| 99亚洲伊人久久精品影院红桃| 在线视频欧美日韩| 欧美激情第1页| 亚洲国产天堂久久国产91| 欧美一区在线看| 亚洲特黄一级片| 欧美日韩视频专区在线播放| 亚洲日韩中文字幕在线播放| 牛人盗摄一区二区三区视频| 久久精品成人欧美大片古装| 国产午夜精品久久| 久久成年人视频| 欧美一区二区三区免费观看| 国产精品无码专区在线观看| 亚洲欧美视频在线| 亚洲天堂网在线观看| 欧美日韩一区在线播放| 一本大道久久a久久精二百| 麻豆freexxxx性91精品| 亚洲国产精品一区二区www在线| 亚洲免费一级电影| 夜夜嗨av一区二区三区四区| 欧美多人爱爱视频网站| 亚洲欧洲日本一区二区三区| 亚洲国产精品国自产拍av秋霞| 亚洲欧美一级二级三级| 国产亚洲欧美激情| 久久久久久久久久久一区| 久久精品欧美日韩精品| 亚洲伦理在线观看| 在线亚洲激情| 国产日韩精品在线观看| 欧美成人免费在线| 亚洲欧美激情视频在线观看一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲综合视频一区| 亚洲欧美激情四射在线日 | 欧美黄色aa电影| 亚洲午夜久久久| 欧美在线看片| 一本久久综合| 欧美有码视频| 在线一区二区三区四区| 欧美一级视频一区二区| 99视频精品在线| 午夜在线a亚洲v天堂网2018| 国产精品夜色7777狼人 | 亚洲精品色婷婷福利天堂| 精品福利电影| 91久久午夜| 国产精品三区www17con| 欧美大片国产精品| 国产精品捆绑调教| 亚洲激情网址| 狠狠做深爱婷婷久久综合一区 | 欧美国产先锋| 国产精品亚发布| 亚洲精品影视在线观看| 精品va天堂亚洲国产| 亚洲视频在线一区观看| 日韩午夜剧场| 欧美成人69| 欧美黄网免费在线观看| 国产在线播精品第三| 中国亚洲黄色| 国产精品99久久99久久久二8| 先锋a资源在线看亚洲| 亚洲社区在线观看| 欧美激情视频在线播放| 欧美日韩在线视频一区| 欧美成人免费在线| 雨宫琴音一区二区在线| 免费成人高清| 午夜精品久久久久久久久| 狂野欧美激情性xxxx| 久久精品国产成人| 国产精品xxxav免费视频| 亚洲国产精品欧美一二99| 国产亚洲精品v| 欧美一区二区视频在线观看| 欧美资源在线观看| 国产伦精品一区二区三区视频黑人 | 午夜亚洲性色福利视频| 一区二区三区精品国产| 欧美久久久久久久久| 欧美激情在线观看| 亚洲欧洲一区二区天堂久久| 麻豆精品在线视频| 欧美国产在线视频| 亚洲美女av电影| 欧美日韩喷水| 亚洲午夜激情网站| 久久久999成人| 亚洲国产欧美久久| 欧美另类专区| 亚洲一区三区电影在线观看| 久久精品女人天堂| 亚洲三级视频在线观看| 欧美日韩在线观看一区二区| 在线视频欧美日韩| 久久国产精品久久久久久电车| 国产欧美亚洲日本| 久久午夜影视| 中文日韩欧美| 美女图片一区二区| 一区二区激情小说| 国产日本精品| 欧美黄免费看| 久久aⅴ乱码一区二区三区| 亚洲福利视频一区| 亚洲在线黄色| 亚洲国产99| 国产精品一二| 欧美精品福利| 久久精品久久99精品久久| 亚洲美女免费精品视频在线观看| 亚洲免费网站| 亚洲人体1000| 亚洲欧美日韩国产另类专区| 亚洲乱码精品一二三四区日韩在线| 亚洲私人影院在线观看| 狠狠色综合网| 欧美视频免费在线| 免费看成人av| 欧美在线不卡| 亚洲视频在线一区| 亚洲国产一区二区视频| 欧美亚洲成人精品| 欧美成人午夜剧场免费观看| 亚洲精品偷拍| 欧美高清视频一二三区| 亚洲婷婷在线| 日韩视频在线你懂得| 激情五月婷婷综合| 国产精品日日摸夜夜摸av| 欧美精品啪啪|