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

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

2009-9-8

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

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

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

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

 

 

 

posted on 2010-03-15 23:26 Euan 閱讀(1645) 評論(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>
            99av国产精品欲麻豆| 欧美日韩视频在线第一区| 久久露脸国产精品| 国产精品视频成人| 亚洲一区二区在线播放| 91久久国产综合久久蜜月精品| 中文日韩在线视频| 欧美日韩亚洲精品内裤| 99精品国产99久久久久久福利| 亚洲高清一区二| 免费日韩成人| 亚洲蜜桃精久久久久久久| 欧美激情一区二区三区| 欧美不卡福利| 99国产精品一区| 亚洲精品人人| 亚洲国产精品黑人久久久| 欧美jizzhd精品欧美巨大免费| 亚洲片国产一区一级在线观看| 欧美大秀在线观看| 欧美成人免费在线视频| 一区二区三区久久网| 99成人免费视频| 国产精品美女xx| 久久精品久久综合| 久久米奇亚洲| 99精品视频一区二区三区| 国产精品99久久久久久久vr| 国产午夜精品久久久久久久| 久久香蕉国产线看观看网| 美女露胸一区二区三区| 亚洲社区在线观看| 欧美亚洲综合久久| 亚洲精品激情| 亚洲一区二区三区午夜| 黑丝一区二区| 亚洲美女区一区| 欧美中文在线观看| 国产精品女主播一区二区三区| 亚洲欧美日韩国产另类专区| 欧美一区二区三区在线看| 亚洲激情社区| 亚洲一级影院| 亚洲风情在线资源站| 99热这里只有成人精品国产| 国产亚洲一区二区精品| 亚洲国产美女久久久久| 欧美视频一区二区三区四区| 久久久国产亚洲精品| 欧美国产精品久久| 久久精品夜夜夜夜久久| 欧美日韩国产首页| 久久一区欧美| 国产精品―色哟哟| 欧美激情一级片一区二区| 国产精品久久久久久久久借妻| 六十路精品视频| 国产精品久久久久免费a∨大胸| 蜜桃av综合| 国产日韩欧美一二三区| 日韩亚洲欧美成人一区| 亚洲大片在线观看| 欧美一级大片在线观看| 中文亚洲欧美| 欧美福利视频在线观看| 久热这里只精品99re8久| 国产精品看片资源| 亚洲美女中文字幕| 亚洲人成毛片在线播放| 久久精品二区三区| 欧美在线国产| 欧美视频在线播放| 亚洲三级视频| 亚洲精品免费看| 久久久久久久精| 久久久国产精品一区二区中文| 欧美色图天堂网| 一区二区动漫| 免费日韩精品中文字幕视频在线| 久久精品国产成人| 国产精品一卡二| 一区二区三区四区五区精品视频 | 米奇777在线欧美播放| 欧美在线视频二区| 国产精品久久久久免费a∨大胸| 最新精品在线| 日韩视频三区| 欧美精品一区二区三区久久久竹菊| 欧美成人性生活| 亚洲电影第三页| 老色鬼精品视频在线观看播放| 男女精品网站| 亚洲高清久久网| 欧美成人第一页| 亚洲精品美女在线| 一区二区三区四区国产| 欧美日韩免费在线视频| 一本色道久久综合亚洲二区三区| 亚洲午夜在线| 国产精品一区二区久久精品| 亚洲欧美精品在线观看| 久久狠狠亚洲综合| 一区在线电影| 欧美精品尤物在线| 亚洲无限av看| 久久亚洲视频| 亚洲精品久久久久久久久| 欧美理论片在线观看| 一区二区三区福利| 欧美在线视频一区二区| 激情综合亚洲| 欧美另类69精品久久久久9999| 一区二区不卡在线视频 午夜欧美不卡在 | 美国三级日本三级久久99| 亚洲第一二三四五区| 99热在这里有精品免费| 国产精品久久久久久超碰| 久久精品国产999大香线蕉| 欧美电影免费观看高清| 亚洲天堂av图片| 国内精品**久久毛片app| 免费成人在线观看视频| 亚洲色图综合久久| 乱中年女人伦av一区二区| 亚洲最新视频在线| 国产一区二区三区无遮挡| 欧美va亚洲va香蕉在线| 亚洲一区免费| 亚洲国产精品ⅴa在线观看| 午夜视频在线观看一区| 亚洲国产清纯| 国产区二精品视| 欧美精品一区二区在线观看| 欧美一区二区三区在线播放| 91久久国产综合久久蜜月精品| 久久精品国产精品亚洲综合| 久久久久综合一区二区三区| 亚洲精品国产精品国产自| 久久国产黑丝| 亚洲视频一区二区| 在线国产欧美| 国产欧美日韩精品丝袜高跟鞋| 欧美国产精品人人做人人爱| 欧美在线观看一二区| 一本色道久久88精品综合| 能在线观看的日韩av| 午夜视黄欧洲亚洲| 亚洲系列中文字幕| 亚洲精品麻豆| 亚洲国产欧美不卡在线观看| 国产欧美精品在线观看| 欧美日韩视频专区在线播放 | 欧美电影免费观看大全| 欧美伊人久久久久久午夜久久久久 | 1769国产精品| 国产乱肥老妇国产一区二 | 亚洲日本久久| 黄色一区二区三区四区| 国产精品一区二区三区四区五区| 欧美日韩1080p| 欧美成人精品高清在线播放| 久久精品一本久久99精品| 午夜精品久久一牛影视| 一区二区三区精品在线| 亚洲精品免费网站| 亚洲激情视频网| 亚洲国产天堂网精品网站| 牛牛影视久久网| 欧美不卡一卡二卡免费版| 久热精品视频| 欧美1区2区| 欧美成人一区二区三区片免费| 久久综合给合久久狠狠色| 久久久久久尹人网香蕉| 久久精品视频99| 久久久久久一区| 香蕉免费一区二区三区在线观看| 亚洲欧美国内爽妇网| 先锋影音久久| 久久成人精品电影| 久久久久久日产精品| 久久人人97超碰人人澡爱香蕉| 久久九九免费| 欧美va亚洲va日韩∨a综合色| 美日韩免费视频| 亚洲国产精品t66y| 亚洲免费电影在线| 亚洲一区二区视频| 欧美中文字幕久久| 麻豆精品视频在线观看视频| 欧美激情aaaa| 国产精品久久久久77777| 国产女主播一区| 在线免费日韩片| 一本色道久久综合狠狠躁篇的优点| 夜夜爽99久久国产综合精品女不卡| 亚洲天堂av在线免费观看| 久久国产精品99国产精| 欧美jizz19性欧美| 亚洲黄一区二区|