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

隨筆-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 閱讀(1652) 評論(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>
            欧美在线网站| 欧美成人按摩| 久久久精品一区| 91久久视频| 亚洲精选一区二区| 日韩视频精品在线| 亚洲日韩成人| 亚洲一区二区三区777| 夜夜精品视频| 久久www免费人成看片高清| 在线视频欧美一区| 欧美在线你懂的| 免费看亚洲片| 亚洲成人在线网| 亚洲国产专区校园欧美| 免费在线亚洲欧美| 亚洲精品一区久久久久久| 亚洲日本免费| 久久久久青草大香线综合精品| 久久久久国产精品www| 欧美女同视频| 黄色一区二区在线| 亚洲一区欧美激情| 欧美一区二区| 欧美一区二区三区精品电影| 亚洲一区日韩| 欧美激情va永久在线播放| 国产精品久久一卡二卡| 在线观看一区| 性欧美video另类hd性玩具| 狂野欧美一区| 亚洲综合日韩中文字幕v在线| 久久久噜噜噜久噜久久| 欧美天堂亚洲电影院在线观看| 国内精品久久久久久久果冻传媒| 亚洲欧洲日本在线| 欧美 亚欧 日韩视频在线| 亚洲自拍偷拍福利| 国产精品午夜国产小视频| 亚洲看片网站| 亚洲精品国产精品乱码不99 | 亚洲女同同性videoxma| 日韩视频免费观看高清完整版| 久久亚洲综合色| 亚洲国产岛国毛片在线| 久久在线免费观看| 久久亚裔精品欧美| 91久久精品视频| 欧美久久久久久久久| 亚洲剧情一区二区| 亚洲精品社区| 国产精品女同互慰在线看| 亚洲综合三区| 亚洲视频一区二区| 亚洲美女福利视频网站| 国产精品毛片va一区二区三区 | 欧美 日韩 国产在线| 亚洲国产精品t66y| 亚洲国产婷婷综合在线精品| 欧美日韩一区精品| 久久久久99| 欧美日韩国产不卡| 狂野欧美激情性xxxx| 欧美日韩国产色站一区二区三区| 亚洲女性裸体视频| 嫩模写真一区二区三区三州| 在线亚洲伦理| 免费成人高清在线视频| 久久精品一二三| 国产精品日韩久久久久| 99国内精品久久| av成人免费在线| 欧美精品国产一区二区| 欧美激情一区二区三区四区| 国产女人18毛片水18精品| 欧美大片免费观看| 9色porny自拍视频一区二区| 麻豆成人小视频| 亚洲毛片在线| 免费在线看一区| 亚洲免费观看视频| 久久永久免费| 午夜一区二区三区不卡视频| 亚洲精品美女在线观看播放| 在线观看亚洲精品| 久久精品一区二区三区不卡牛牛| 亚洲欧洲一区二区在线观看| 欧美伊人久久久久久午夜久久久久 | 亚洲精品看片| 久久久久这里只有精品| 久久久欧美一区二区| 国内偷自视频区视频综合| 一本色道久久综合狠狠躁篇怎么玩| 亚洲第一页在线| 欧美久久久久久| 亚洲午夜久久久| 另类图片国产| 欧美三级在线| 亚洲精品国产精品国自产在线| 亚洲一区二区三区四区五区午夜 | 欧美在线免费一级片| 久久久久久久综合色一本| 在线观看久久av| 欧美日韩另类国产亚洲欧美一级| 国产精品99久久久久久有的能看 | 日韩一级黄色av| 亚洲欧美综合v| 在线成人国产| 欧美一区二区三区另类| 国产日韩一区二区三区在线| 久久精品国产2020观看福利| 欧美福利在线观看| 欧美一区激情视频在线观看| 在线看不卡av| 国产精品久久久久久久app| 裸体丰满少妇做受久久99精品| 亚洲综合精品一区二区| 欧美国产激情| 免费一级欧美在线大片| 欧美亚洲日本国产| 一区二区三区不卡视频在线观看| 国产亚洲精品aa午夜观看| 欧美精品在线播放| 欧美成人激情视频| 久久亚洲精品网站| 欧美成人午夜视频| 欧美成年人视频网站| 欧美mv日韩mv国产网站| 欧美电影在线播放| 欧美gay视频激情| 国产精品国产亚洲精品看不卡15| 欧美性生交xxxxx久久久| 国产精品免费看| 国产欧美日韩综合一区在线播放 | 亚洲乱码国产乱码精品精可以看| 国产欧美日韩精品专区| 国产欧美日韩专区发布| 狠狠色丁香婷婷综合影院| 精品av久久久久电影| 91久久精品美女| 欧美一区二区三区免费观看视频| 亚洲欧美一区二区三区在线| 久久国产主播精品| 欧美另类一区| 国外成人在线视频网站| 亚洲美女精品一区| 久久久久久色| 亚洲天堂成人| 欧美sm极限捆绑bd| 国产一区二区久久久| 亚洲天堂男人| 亚洲欧洲日产国产综合网| 9久草视频在线视频精品| 久久婷婷蜜乳一本欲蜜臀| 国产精品乱码久久久久久| 美女国内精品自产拍在线播放| 美女网站久久| 亚洲免费观看在线观看| 欧美国产日韩一区二区在线观看| 亚洲成色777777在线观看影院 | 欧美成人免费大片| 洋洋av久久久久久久一区| 日韩亚洲欧美综合| 国产麻豆午夜三级精品| 久久久精品国产免大香伊| 久久精品1区| 99国产成+人+综合+亚洲欧美| 亚洲区一区二| 国精品一区二区| 亚洲乱码一区二区| 国产自产在线视频一区| 亚洲国产经典视频| 国产午夜精品一区二区三区视频 | 国产一区二区中文| 欧美激情精品久久久久久变态| 亚洲一区二区网站| 欧美一区二区性| 欧美日韩在线三级| 亚洲经典在线| 亚洲国产精品va在线观看黑人| 国产精品久久久久一区| 免费不卡视频| 国产日韩欧美一区| 亚洲大片精品永久免费| 亚洲承认在线| 亚洲精品国产无天堂网2021| 91久久香蕉国产日韩欧美9色| 国产精品久久久久久久久免费桃花 | 国产日韩精品电影| 亚洲日韩欧美视频一区| 免费日韩视频| 中日韩高清电影网| 欧美激情第3页| 午夜视频久久久| 欧美大片在线看| 你懂的一区二区| 亚洲国产精品日韩| 久久国产精品毛片| 久久精品女人天堂| 国产一区视频在线观看免费|