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

隨筆-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>
            欧美成人激情在线| 国产精品稀缺呦系列在线| 欧美成年人网站| 国产精品一香蕉国产线看观看| 亚洲精品日韩在线观看| 欧美插天视频在线播放| 欧美中文在线观看国产| 国产亚洲精品aa| 久久国产视频网| 午夜亚洲福利| 国产在线不卡视频| 久久久精品视频成人| 性做久久久久久| 国模精品一区二区三区| 亚洲欧美综合网| 裸体丰满少妇做受久久99精品| 国产欧美日韩综合精品二区| 午夜精品视频网站| 亚洲尤物影院| 国产一区二区中文字幕免费看| 久久久最新网址| 久久亚洲一区二区| 亚洲精品黄网在线观看| 亚洲精品欧美精品| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 老司机一区二区三区| 欧美在线视屏 | 亚洲国产精品一区二区三区| 久久夜色精品国产| 91久久精品国产91性色| 91久久午夜| 国产精品二区影院| 久久精品99国产精品| 葵司免费一区二区三区四区五区| 亚洲精品乱码久久久久久日本蜜臀 | 翔田千里一区二区| 久久精品夜夜夜夜久久| 亚洲精品偷拍| 亚洲伊人久久综合| 亚洲国产精品99久久久久久久久| 亚洲精品自在久久| 国产精品一区二区久久久久| 可以看av的网站久久看| 欧美成人一区二区三区| 亚洲欧美综合精品久久成人| 老司机精品久久| 亚洲一二三区在线观看| 久久精品国产v日韩v亚洲| av成人黄色| 久久国产手机看片| 亚洲桃色在线一区| 久久久免费精品| 亚洲欧洲av一区二区三区久久| 久久偷窥视频| 欧美一二区视频| 欧美激情视频给我| 久久先锋影音| 国产精品男人爽免费视频1| 亚洲成色www8888| 国产一区二区你懂的| av成人老司机| 99re6热在线精品视频播放速度| 久久激情五月婷婷| 亚洲一区欧美二区| 美女国内精品自产拍在线播放| 欧美一级一区| 欧美日韩一区在线视频| 亚洲日本欧美| 久久综合久久综合九色| 欧美视频免费在线观看| 欧美电影在线观看| 好看不卡的中文字幕| 亚洲欧美成人| 亚洲摸下面视频| 欧美日韩一区二区在线| 最新国产拍偷乱拍精品| 亚洲高清久久久| 久久野战av| 欧美高清在线观看| 在线观看亚洲精品视频| 久久大逼视频| 午夜亚洲伦理| 国产精品乱码| 亚洲一区中文字幕在线观看| 午夜精彩国产免费不卡不顿大片| 欧美另类视频| 亚洲精品女人| 亚洲精品日韩在线观看| 欧美激情中文不卡| 亚洲欧洲精品一区二区三区| 日韩午夜在线| 欧美日韩综合一区| 亚洲图片你懂的| 欧美一区午夜视频在线观看| 国产精品影音先锋| 午夜一区在线| 欧美日韩亚洲一区二区三区在线观看 | 校园春色综合网| 亚洲国产一区二区三区a毛片 | 亚洲欧美日韩中文视频| 久久精品人人做人人综合| 艳女tv在线观看国产一区| 欧美一激情一区二区三区| 亚洲精品在线免费观看视频| 欧美一级片久久久久久久| 一区二区三区波多野结衣在线观看| 羞羞色国产精品| 亚洲作爱视频| 你懂的国产精品永久在线| 久久激情五月婷婷| 国产精品美女久久| 亚洲九九精品| 日韩视频免费| 免费欧美在线视频| 久久午夜电影| 国产日韩欧美日韩| 一区二区三区欧美| 一本高清dvd不卡在线观看| 噜噜噜91成人网| 久久只精品国产| 国产亚洲一区二区三区| 亚洲一区影音先锋| 亚洲免费影视| 国产精品久久久久久久久久免费| 欧美色欧美亚洲另类七区| 亚洲国产精品久久久久| 欧美jizz19性欧美| 亚洲伊人观看| 亚洲电影专区| 欧美在线播放高清精品| 91久久在线| 国产欧美日韩免费| 欧美成人精品| 久久国产精彩视频| 日韩亚洲欧美在线观看| 久久综合影视| 亚洲欧美日韩专区| 91久久国产精品91久久性色| 国产精品毛片大码女人| 欧美激情综合五月色丁香| 久久精品99| 亚洲免费综合| 日韩一区二区免费高清| 欧美区在线观看| 久久黄金**| 在线欧美一区| 欧美福利电影在线观看| 最新亚洲视频| 中国日韩欧美久久久久久久久| 国产精品播放| 欧美一区在线视频| 免费高清在线一区| 亚洲精品一区久久久久久| 欧美日韩一区三区四区| 亚洲在线日韩| 美国成人直播| 亚洲精品免费电影| 欧美性大战久久久久| 欧美一级大片在线免费观看| 久久综合中文字幕| 一区二区三区成人精品| 国产伦精品一区二区三区照片91 | 久久久久九九九九| 在线观看日韩专区| 欧美日韩一区二区三区高清| 先锋亚洲精品| 亚洲福利久久| 午夜在线精品偷拍| 亚洲欧洲另类国产综合| 国产精品美女诱惑| 久热精品视频在线| 亚洲视频中文| 亚洲第一黄色| 久久久亚洲人| 中日韩美女免费视频网站在线观看| 国产精品免费一区豆花| 欧美14一18处毛片| 午夜一区在线| 99re6这里只有精品视频在线观看| 久久精品视频在线看| 中文在线一区| 亚洲国产婷婷综合在线精品| 国产麻豆精品视频| 欧美日韩第一区日日骚| 看片网站欧美日韩| 久久国产视频网站| 亚洲欧美美女| 亚洲无限乱码一二三四麻| 亚洲精品123区| 欧美二区乱c少妇| 日韩特黄影片| 久久久一二三| 欧美成人精品高清在线播放| 欧美精品久久一区二区| 国产精品国产福利国产秒拍| 国产精品美女久久久久久免费| 国产亚洲一级| 亚洲日本久久| 欧美在线999| 亚洲第一视频|