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

隨筆-19  評論-2  文章-0  trackbacks-0

2009-9-8

========================================================
《深入解析MFC》筆記 9.MFC的增強型用戶界面類
========================================================

----------------------------
CSplitterWnd: MFC分割窗口         《深入解析MFC》P249

    使用 CSplitterWnd
        創建動態分割窗口
        ① 在子框架的派生類中加上一個 CSplitterWnd 數據成員。
        ② 在CMyChildFrame::OnCreateClient() 處理程序,添加對 CSplitterWnd::Create() 的調用。
            Create() 的第一個參數指向父框架的指針,第二個和第三個分別指定了最大行數和最大列數。
                            第四個參數指定了所允許的最小窗格大小,第五個參數指向 CCreateContext 的指針。
        ③ 將框架窗口的 RUNTIME_CLASS 消息傳遞給 CDocTemplate 構造函數:
            CMultiDocTemplate* pDocTemplate =
                new CMultiDocTemplate( IDR_MYAPPTYPE, RUNTIME_CLASS(CMyDocClass ), RUNTIME_CLASS( CMyChildFrameClass ),
                                  RUNTIME_CLASS(CMyViewClass));
            AddDocTemplate(pDocTemplate);

        創建靜態分割窗口,用 CreateStatic() 代替 Create()。調用CSplitterWnd::CreateView() 來創建新的窗格。
       
 *************************      
    CSplitterWnd 內部實現
   
    封裝的數據類型
        · ESplitType —— 定義要畫出的分割器的類型,屬于枚舉類型。類型有 分割框、分割條、分割焦點以及分割邊界。
        · CRowColInfo —— 記錄行或列的最小尺寸、理想尺寸和當前尺寸。
    創建/布局數據成員
        · m_pDynamicViewClass —— 指向由 CSplitterWnd 動態創建的視圖(窗格)的CRuntimeClass 信息的指針。Create() 或CreateView()中定義
        · m_nMaxRows / m_nMaxCols —— 調用 Create() 和 CreateStatic() 時制定的最大行數和列數。
        · m_nRows / m_nCols —— 當前在 CSplitterWnd 里顯示的行數和列數。
        · m_bHasHScroll / m_bHasVScroll —— 表明行滾動條或列滾動條 是否已經創建的標記。
        · m_pColInfo —— 是CRowInfo的數組,每個元素對應 CSplitterWnd 的一列。靜態分割中,這個值固定。
        · m_pRowInfo —— 是 CRowColInfo 的數組,每個元素對應CSplitterWnd 的一行。
    修飾的數據成員
        在構造函數中初始化,
        · m_cxSplitte / m_cySplitter —— 分割框和分割器的寬度和高度。
        · m_cxBorderShare / m_cyBorderShare —— 如果分割窗口正在畫分割窗口的邊界,值為1.
        · m_cxSplitterGap / m_cySplitterGap —— 分割框/分割條和滾動條/邊界之間的距離。值為6.
        · m_cxBorder / m_cyBorder —— 分割邊界的邊界寬度。值為0.
    跟蹤數據成員
        用于點擊測試和跟蹤
        · m_bTracking —— 如果為真,則用戶正在拖動一個分割條。
        · m_bTracking2 —— 如果為真,用戶正在拖動兩個分割條。
        · m_ptTrackOffset —— 點擊測試中的“選取”尺寸。允許用戶有所偏差。
        · m_rectLimit —— 跟蹤時窗格的大小,用來確定被跟蹤的分割條的高度。
        · m_rectTracker —— 跟蹤時用來畫分割條的矩形。
        · m_rectTracker2 —— 跟蹤時用來畫第二個分割條的矩形
        · m_htTrack —— 被 CSplitterWnd 的點擊跟蹤機制設置成一個枚舉值,用來描述分割窗口的哪個部分被點擊了。
    通用成員函數
        · CreateCommon() —— 當Create() 和 CreateStatic() 初始化完 CSplitterWnd 的動態成員或靜態成員時會調用這個函數。
        · CreateScrollBarCtrl() —— 創建帶有指定風格和標示符的滾動條。
        · DoScroll() —— 對滾動條消息作出反應。 DoScroll() 能夠同步適當的窗格。
        · DoScrollBy() —— 以制定的數量滾動相應的窗格。
        · DoKeyboardSplit() —— 在程序里調用該函數會使得窗口被分割。
        · CanActivateNext() —— 用來確定下一個窗格是否能被激活。即是否能得到焦點,被CView類調用
        · ActivateNext() —— 激活下一個窗格。通常在一個窗格被刪除時調用
    布局成員函數
        · RecalcLayout() —— 維護所有分割窗口的位置,當一個窗格被創建/刪除時,被調用。
        · TrackRowSize() —— 更新指定行的 m_pRowInfo 數組信息。同時確定是否有足夠的空間來存儲該行。
        · TrackColumnSize() ——
        · GetSizingParent() —— 搜索大小可變的父窗口
    繪畫成員函數
        · DrawAllSplitBars() —— “驅動”分割窗口的繪畫進程,為每個需要繪畫的組件調用 OnDrawSplitter.
        · OnDrawSplitter() —— 為分割窗口的每個組件進行繪畫,為虛函數。
        · OnPaint() —— 對WM_PAINT消息作出響應
    點擊測試成員函數
        · HitTest() —— 選取某個點,返回這個點的點擊測試值。
        · GetInsideRect() —— 類同GetClientRect(),考慮了共享的滾動條。
        · GetHitRect() —— 為某一指定的分割窗口組件檢索點擊矩形。
        · SetSplitCursor() —— 使用點擊測試來確定要顯示哪一種光標。
    跟蹤成員函數
        · OnNcCreate() —— CSplitterWnd 處理WM_NCCREATE 消息,所以它可以移走 WS_EX_CLIENTEDGE 的擴展風格位。
        · OnPaint() —— 畫分割窗口的各個組件。
        · OnDisplayChange() —— 當用戶改變顯示器的分辨率時背調用,調用RecalcLayout() 來更新分割窗口。
        · OnSize() —— 當用戶改變窗口大小時 調用 RecalcLayout()。
        · OnMouseMove() —— 在分割窗口組件上執行點擊測試。
**************************
    CSplitteWnd 的初始化
        CSPlitterWnd::CreateCommon()
            ① 調整好風格標記。
            ② 調用 AfxDeferRegisterClass(),CWnd::CreateEx()。
            ③ 為 m_pColInfo 和 m_pRowInfo 數組分配空間,并進行初始化,將 m_nMaxCols/Rows 作為數組的大小。
                CreateCommon() 在循環里一次訪問CRowColInfo數組,做如下操作
                    1. nMinSize 和 nIdealSize 都被設置成參數 sizeMin的值。
                    2. nCurSize 被初始化為 -1,說明當窗格的尺寸被初始化(RecalcLayout)時,該值應該被設置。
            ④ 初始化完CrowColInfo 的行列數組后,調用 SetScrollStyle() 將 m_bHasH/VScroll 進行初始化,然后返回TRUE
     
        CSplitterWnd::CreateView()
            ① 將sizeInit參數存儲在 CRowColInfo相應的數組下標里,設置一個局部標記 bSendInitialUpdate 值為FALSE。
            ② 創建一個局部的CCreateContext(),盡量將每個元素初始化為比較完整的值。調用 GetActivePane() 來確定 m_pLastViewCView指針
                一旦CreateView() 有了m_pLastView,就可以通過調用 GetDocument() 來確定 CCreateContext 其他域的值,
                然后調用 CDocument::GetDocTemplate()。在找到所有這些元素后,pContext指向她們,將bSendInitialUpadte設為 TRUE。
            ③ 調用 CreateObject() 為 CRuntimeClass 信息創建一個窗格對象。設置要傳遞到 Create() 的參數 風格和定位矩形。
           

 

 

 

posted on 2010-03-15 23:26 Euan 閱讀(1653) 評論(0)  編輯 收藏 引用 所屬分類: windows
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合九色综合欧美就去吻 | 久久精品欧美日韩精品| 亚洲国产成人久久综合| 毛片精品免费在线观看| 欧美亚洲免费高清在线观看| 欧美在线免费观看| 亚洲四色影视在线观看| 亚洲一区二区三区涩| 亚洲欧美日韩精品久久| 欧美中文字幕不卡| 米奇777超碰欧美日韩亚洲| 欧美黑人多人双交| 欧美激情四色 | 免费成人av在线看| 欧美xart系列高清| 久久综合色天天久久综合图片| 欧美护士18xxxxhd| 欧美日韩免费观看一区| 国产精品一级| 国产在线观看一区| 亚洲福利专区| 欧美一区二区三区的| 欧美大胆a视频| 在线综合亚洲| 久久综合久久久| 久久久精品一品道一区| 欧美日本一区二区高清播放视频| 欧美午夜久久久| 一区二区三区在线视频观看| 亚洲第一在线| 久久精品国产v日韩v亚洲| 欧美激情视频网站| 午夜视频一区在线观看| 欧美日韩大片| 亚洲国产精品99久久久久久久久| 欧美亚洲视频| 亚洲精品一区二区三区av| 久久久久国色av免费看影院 | 亚洲欧洲精品一区二区三区| 欧美在线亚洲综合一区| 亚洲日本成人| 每日更新成人在线视频| 国产精品婷婷午夜在线观看| 日韩视频精品| 欧美福利影院| 久久久久一区二区| 国产一区二区三区久久精品| 亚洲激情图片小说视频| 亚洲精品日本| 亚洲国产欧美日韩另类综合| 亚洲天堂网在线观看| 欧美视频中文字幕在线| 在线观看亚洲精品| 久久久99免费视频| 香蕉久久一区二区不卡无毒影院| 久久综合久久久久88| 亚洲国产精品v| 久久婷婷一区| 美女黄毛**国产精品啪啪| 国产欧美亚洲日本| 亚洲欧美日韩另类| 久久久精品动漫| 久久综合999| 国产精品日韩一区| 久久精品人人做人人综合| 午夜在线观看欧美| 欧美午夜精品一区| 亚洲黄色成人网| 久久亚洲国产精品日日av夜夜| 久久久不卡网国产精品一区| 国产午夜精品久久久| 欧美中文字幕在线观看| 欧美一级一区| 亚洲国产精品福利| 亚洲美女视频网| 国产精品久久久一区二区| 午夜精品成人在线视频| 午夜一区二区三区在线观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美精品一区二区三区在线播放| 亚洲日本成人| 欧美一区在线视频| 国产一区视频网站| 免费视频久久| 蜜臀a∨国产成人精品| 亚洲人成网站色ww在线| 国产精品v片在线观看不卡| 欧美bbbxxxxx| 国产一区二区精品丝袜| 亚洲一区中文字幕在线观看| 99re6热只有精品免费观看| 久久精品视频免费| 久久一区中文字幕| 在线观看一区欧美| 蜜臀99久久精品久久久久久软件 | 亚洲视频免费在线| 欧美 日韩 国产一区二区在线视频| 久久久噜噜噜久久人人看| 国产精品视频免费一区| 亚洲自拍都市欧美小说| 欧美一区二区精品在线| 国产一区二区三区在线观看免费视频 | 亚洲日本成人| 欧美日韩国产二区| 一本色道久久综合亚洲91| 亚洲欧美日韩区| 国产日韩精品一区二区浪潮av| 亚洲欧美日韩国产成人精品影院| 欧美在线播放视频| 国产专区欧美精品| 欧美成人综合在线| 欧美一区二区三区免费观看视频 | 国产精品色网| 国产日本欧洲亚洲| 伊大人香蕉综合8在线视| 精品69视频一区二区三区| 亚洲精品国产精品国产自| 欧美专区在线| 久久中文在线| 欧美精品在线观看一区二区| 99国产一区二区三精品乱码| 欧美日韩另类字幕中文| 亚洲视频在线一区观看| 久久精品人人做人人爽| 亚洲人成免费| 国产精品一区二区黑丝| 久热精品视频在线观看一区| 亚洲美女少妇无套啪啪呻吟| 久久久久久久波多野高潮日日| 亚洲日本免费| 国产视频一区欧美| 欧美国产亚洲精品久久久8v| 亚洲欧美日本日韩| 亚洲精品久久7777| 久久精品国产欧美激情| 91久久精品国产91久久| 国产精品私拍pans大尺度在线| 久久综合狠狠综合久久综青草| 一区二区三区精品在线| 男人的天堂亚洲| 校园春色国产精品| 日韩一级裸体免费视频| 好看的日韩av电影| 国产精品久久久久久久电影| 久久综合色8888| 午夜影视日本亚洲欧洲精品| 亚洲欧洲精品一区| 久久夜色精品国产欧美乱| 在线综合欧美| 亚洲经典一区| 狠狠色狠狠色综合日日五| 欧美日韩国产综合一区二区| 久久综合九色综合欧美就去吻| 亚洲欧美日韩综合| 一本色道久久综合亚洲91| 欧美国产三区| 乱码第一页成人| 久久国产婷婷国产香蕉| 亚洲新中文字幕| 99日韩精品| 日韩视频专区| 亚洲人成亚洲人成在线观看| 韩日在线一区| 国内伊人久久久久久网站视频| 国产精品成人一区| 欧美视频免费在线| 欧美日韩激情小视频| 欧美激情久久久久| 欧美成人在线免费视频| 久热这里只精品99re8久| 久久久久久欧美| 欧美制服丝袜第一页| 欧美在线视频免费| 午夜精品福利一区二区蜜股av| 一区二区欧美日韩视频| 99xxxx成人网| 亚洲午夜未删减在线观看| 一本色道久久加勒比88综合| 一区二区三区导航| 一区二区三区久久精品| 一区二区三区欧美成人| 中文在线资源观看网站视频免费不卡 | 在线不卡欧美| 亚洲国产成人av在线| 亚洲人成网站在线播| 日韩视频在线观看| 亚洲系列中文字幕| 亚洲一区自拍| 欧美中文在线免费| 另类酷文…触手系列精品集v1小说| 久久综合九色99| 亚洲激情六月丁香| 欧美一二三视频| 亚洲一区二区三区午夜| 亚洲精品久久久久久一区二区| 亚洲最黄网站| 一区二区三区四区五区精品视频 | 麻豆av一区二区三区久久| 欧美国产一区二区三区激情无套| 欧美超级免费视 在线|