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

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

2009-9-7

========================================================
《深入解析MFC》筆記 8.MFC的文檔/視圖結構 拓展
========================================================

----------------------------
CMirrorFile              《深入解析MFC》 P221

    CMirrorFile::Open()    (DOCCORE.CPP)
            第一部分:先檢查 modeCreate,看調用者是想創建一個新文件還是想連接在已有文件后面。
                    然后調用CFile::GetStatus(),若文件非空,返回一個非零的數;
                    若文件存在,Open()接著會調用GetDiskFreeSpace(),確定驅動器有多少字節可以用。將結果和已有文件大小的兩倍進行比較。   
                    若大于后者,創建一個臨時文件,文件名存儲在 m_strMirrorName 中。
            第二部分當 m_strMirrorName 非空時執行。
                    調用 CFile::Open() 打開鏡像文件,然后將文件的時間和文件權限從源文件拷貝給鏡像文件。
                    若執行了第二部分,Open() 返回TRUE,若沒有被執行,會調用 CFile::Open(), 返回調用結果。
            (若有寫操作正在執行或者有文件被覆蓋,CMirrorFile::Open() 就打開一個和指定文件不同的文件。
           
    CMirrorFile::Close()   
            先在 m_strName 存儲文件的名字,在調用CFile::Close() 之后,檢查是否使用了鏡像文件,若使用了,Open()會刪除指定        文件,將文件拷貝為指定文件。
                   
         即CMirrorFile 通過保存原有文件和對臨時文件進行寫操作來保護你的文檔。
         這樣,若寫操作出現問題,源文件也是安全的  。
         CMirrorFile 還會確保源文件的安全性以    及文件創建信息是否能被正確地拷貝
        
        
---------------------------
CView 打印                      《深入解析MFC》 P223 - 235


---------------------------
CView的派生類: CScrollView
   
    調用SetScrollSizes() 讓 CScrollView 知道你的“邏輯視圖”的大小,獲得大小信息后,操縱傳遞給 OnDraw() 的DC,從而支持滾動
   
    CScrollView 如何運作:
        CScrollView ( VIEWSCRL.CPP )
       
        · m_nMapMode —— 在 SetScrollSizes() 中,可以為應用程序指定一個映射模式。默認為MM_NONE,CScrollView定義為(MM_SCALETOFIT)。
        · m_totalLog —— 邏輯坐標中視圖的大小,這個值通過 SetScrollSizes() 成員函數傳遞給 CScrollView。
        · m_totalDev —— 設備坐標中視圖的大小。
        · m_pageDev —— 設備坐標中一個頁的大小。
        · m_lineDev —— 設備中一條線的大小。
        · m_bCenter —— CPreviewView 使用這個數據成員進入窗口中的視圖。
       
        · CenterOnPoint() —— 將視圖集中于一點,由 CPreviewView 調用
        · ScrollToDevicePosition() —— 負責滾動視圖。通過調用::SetScrollPos() 和 ::CSrollWindow() 更新滾動條,來完成視圖的滾動條。
        · UpdateBars() —— CScrollView 在初始化的時候和窗口大小發生變化的時候調用。責任是根據 GetScrollBarState() 的返回信息隱藏、顯示、初始化滾動條。
        · GetTrueClientSize() —— 用來確定用戶視圖是否足夠大(是否需要滾動條),只有 UpdateBars 才會調用這個函數。
        · GetScrollBarSizes() —— 確定滾動條的寬度和高度,考慮了窗口的風格和邊框的寬度。
        · GetScrollBarState() —— 獲取 CScrollView 所需要的關于視圖的狀態。
        · CalcWindowRect() —— 計算窗口矩形的大小,考慮滾動條和其他窗口飾物的大小。
        · OnPrepareDC() —— CScrollView 和 ONVScroll() 交互的關鍵。
        · OnScroll() —— OnHScroll() 和 OnVScroll兩個消息處理函數都調用了這個函數。根據頁面大小和行大小確定要滾動的量。再調用 OnScrollBy()
        · OnScrollBy() —— 檢查需要滾動的量是否超出了滾動條的范圍和視圖的邏輯大小。若沒有,調用 ::SetScrollPos() 移動滾動條,在調用 ::ScrollWindow().
        · OnSize() —— 若 CScrollView 不是處于“scale-to-fit”模式下,OnSize() 調用 UpdateBars();否則,調用 SetScaleToFitSize()。
        · OnHScroll() —— 調用 OnScroll() 的消息處理函數。
        · OnVScroll() —— 調用 OnScroll() 的消息處理函數。
       
        CScrollView::SetScrollSizes()                 (VIEWSCRL.cpp)   《深入解析MFC》P239
            ①. 將 m_nMapMode 初始化為提供的新映射模式,  m_totalLog 的初始化值是sizeTotal 參數。
            ②. 在棧上創建一個 CWindowDC,并且在設置了映射模式之后,使用DC 來計算視圖大小、頁面大小和行大小的設備坐標。
            ③. 將邏輯坐標轉化為設備坐標后,檢查確保用戶提供了一個非默認的值,若為默認值0,頁面大小設為視圖大小的1/10,行為頁的1/10或視圖的1/100。
            ④. 若需要,調用 UpdateBars() 和 Invalidate()。設置滾動條,若修改了映射模式,重畫。
       
        CScrollView::OnPrepareDC()                    在調用 OnDraw()之前調用
            ①. 設置映射模式,若在“scale-to-fit”模式下,模式設置為 ANISOTROPIC,然后對窗口和視圖端口操作,知道視圖的大小和客戶窗口匹配。
                    若不是,調用 SetMapMode(), 參數是用戶通過 SetScrollSizes() 指定的映射模式。
            ②. 在棧上創建一個 CPoint ptVpOrg(assume  no shift for printing),初始化為 0,0。 若視圖不在打印, ptVpOrg = -GetDeviceScrollPosition()
            ③. 調用 CDC::SetViewportOrg( ptVpOrg )。然后調用 CView::OnPrepareDC()。
           
-------------------------------------
CFormView
   
    先用資源編輯器創建一個對話框模板,然后創建一個CFormView 的派生類,然后將它和對話框模板綁定(通過將模板的資源ID 傳遞給 CFormView 構造函數)
   
        (VIEWFORM.CPP)         《深入解析MFC》  P242
        · m_lpszTemplateName —— 對話框模板資源的名字
        · m_pCreateContext —— 指向 CCreateContext 的指針。CFormView不直接使用,會再 OnCreate() 函數中將它傳送給框架。
        · m_hWndFocus —— 在 OnSetFocus() 中,CFormView將焦點設置為窗口句柄, OnActivateView(),OnActivateFrame()。
        · OnDraw() —— 什么都不做,Windows控件都會重畫自己。
        · PreTranslateMessage() ——  完成一些路由的任務,將控件、視圖和窗口的消息送往正確的目的地
        · SaveFocusControl() —— 將 m_hWndFocus 設置為 ::GetFocus() 的返回結果,即當前處于焦點的控件。
        · OnActivateFrame() —— 當視圖被禁用時,調用 SaveFocusControl() 確保當焦點回來是,焦點的控件仍有控制。
        · OnActivateView —— 設置 m_hWndFocus 變量
        · OnCreate() —— 將m_pCreateContext 傳遞給 LPCREATESTRUCT 結構指針的 lpCreateParams 域。
        · OnSetFocus() —— 若 m_hWndFocus 指向一個合法窗口,OnSetFocus()會將焦點設為這個控件。否則將焦點設為源窗口。
       
        CFormView::Create()
            ①. 在m_pCreateContext 中存儲 CCreateContext 參數,這樣就可以再調用 OnCreate() 時傳入。然后確保 Windows通用控件都是注冊過的。
            ②. 調用PreCreateWindow 來確定用戶指定的擴展風格,在調用 CWnd::CreateDlg()。這個函數從應用程序的資源中裝載對話框模板,
                并調用CWnd::CreateDlgIndirect()。CreateDlg() 創建一個非模態的對話框。
            ③. 將m_pCreateContext 設置為 NULL,再修改窗口的標準風格和擴展風格。將窗口控件的標示符設置為 nID 參數。
                再調用 SetScrollSizes() 來初始化 ScrollView,采用的映射模式為 MM_TEXT。就創建了一個和對話框模板一樣大的邏輯視圖。
            ④. 將視圖的大小和 rect 參數的值匹配,再在 PreCreateWindow() 中調用指定了 WS_VISIBLE,就調用 ShowWindow()。
                CFormView::OnInitialUpdate()調用了 UpdateData(FALSE) 來初始化窗體中的控件。 DDX/DDV就認為CFormView是一個對話框。
   
--------------------------------
CCtrlView                                 《深入解析MFC》 P244

    CCtrlView 派生以下類: CEditView、CListView、CTreeView、CRichEditView
   
        · m_strClass —— 包含了控件的窗口類的名字,通常是“viewized”。在構造函數中設置。
        · m_dwDefaultStyle —— 視圖類的默認風格。通過構造函數傳入。
        · OnDraw() —— 從不被調用,調用了 ASSERT(FALSE)來確保不被調用。
        · PreCreateWindow() —— 設置CREATESTRUCT 的 lpszClass 域,設置成 m_strClass 成員數據,這樣就創建了控件。
                                            還對 CREATESTRUCT 的風格域操作,以反映存儲在 m_dwDefaultStyle 中的值。
        · OnPaint() —— 調用 Default()。Default() 會將前一個消息(WM_PAINT)發送給DefWindowProc()。
       
    CTreeView                             (VIEWCMN.CPP,AFXCVIEW.INL)
        · GetTreeCtrl() —— 返回一個 CTreeCtrl 引用,類的使用者可以用這個引用直接調用 CTreeCtrl,對樹控件操作。
        · RemoveImageList() —— 一個內部輔助函數,將控件的圖像鏈表清空。這個輔助函數會再 OnDestroy() 中被調用
        · OnDestroy() —— 清空 LSVIL_NORMAL 和 LVSIL_STATE 兩個圖像鏈表,調用 RemoveImageList()。
       

 

 

posted on 2010-03-15 23:25 Euan 閱讀(2272) 評論(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| 国产啪精品视频| 亚洲精选国产| 久久精品水蜜桃av综合天堂| 欧美成人资源| 亚洲一区二区久久| 久久久一区二区三区| 国产精品v欧美精品∨日韩| 激情综合色综合久久| 亚洲一区二区3| 欧美激情在线观看| 欧美一区二区三区在线免费观看| 欧美高清视频| 狠狠色综合色区| 亚洲综合日韩中文字幕v在线| 久久综合久久综合九色| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美福利在线| 欧美一级午夜免费电影| 欧美日韩天堂| 亚洲人午夜精品| 久久综合精品国产一区二区三区| 宅男精品导航| 欧美片网站免费| 亚洲国产裸拍裸体视频在线观看乱了| 性高湖久久久久久久久| 一区二区91| 欧美日韩国产免费| 亚洲激情一区| 欧美国产日韩二区| 欧美www在线| 亚洲精品国产精品久久清纯直播| 鲁大师成人一区二区三区| 羞羞漫画18久久大片| 国产精品入口| 欧美一区二区三区四区夜夜大片| 一本久道久久综合狠狠爱| 欧美日韩精品免费观看| 在线亚洲观看| 在线中文字幕一区| 国产精品乱码久久久久久| 亚洲欧美精品中文字幕在线| 正在播放欧美一区| 国产欧美va欧美va香蕉在| 欧美在线影院在线视频| 午夜影视日本亚洲欧洲精品| 国产精品资源| 久久婷婷国产综合国色天香 | 欧美一区二区精品在线| 国产精品日韩高清| 欧美一区二区在线播放| 亚洲欧美高清| 国产视频在线一区二区| 久久亚洲国产精品一区二区 | 国产欧美va欧美va香蕉在| 久久国产一区二区| 久久久91精品| 91久久精品国产91性色tv| 亚洲国产一二三| 国产精品久99| 久久综合久久久久88| 欧美激情精品| 午夜精品久久久久久久99热浪潮 | 欧美一区二区三区免费视频| 国产在线视频欧美| 亚洲国产精品久久久久| 欧美伦理影院| 久久国产精品99久久久久久老狼| 久久久噜噜噜久久狠狠50岁| 一本到12不卡视频在线dvd| 中文成人激情娱乐网| 精东粉嫩av免费一区二区三区| 欧美成人免费小视频| 欧美日本国产视频| 久久久蜜桃一区二区人| 欧美国产在线电影| 久久成人av少妇免费| 男女激情久久| 久久精品91久久久久久再现| 麻豆成人在线播放| 亚洲欧美日本另类| 美女啪啪无遮挡免费久久网站| 亚洲综合导航| 欧美成人在线免费视频| 久久久久国产精品午夜一区| 欧美日韩在线一区二区| 欧美成年人视频| 国产精品区免费视频| 最新亚洲一区| **性色生活片久久毛片| 亚洲在线视频免费观看| 99re在线精品| 老司机午夜精品视频| 久久精品日产第一区二区| 欧美日韩免费精品| 亚洲高清视频的网址| 国内成+人亚洲+欧美+综合在线| 99综合视频| 99精品欧美一区| 欧美aa在线视频| 欧美 日韩 国产在线 | 亚洲女人av| 欧美女同视频| 亚洲国产精品一区制服丝袜| 激情久久五月天| 午夜日韩电影| 亚洲欧洲日本国产| 一区二区三区在线免费视频| 亚洲一区二区三区四区在线观看 | 亚洲一区二区三区中文字幕在线| 亚洲美女在线国产| 牛牛精品成人免费视频| 美日韩免费视频| 精品电影一区| 久久久精品tv| 男人的天堂亚洲| 精品av久久久久电影| 久久精品国产清高在天天线| 久久国产一区二区| 国产综合香蕉五月婷在线| 欧美一区午夜精品| 欧美午夜精品久久久久久人妖 | 精品动漫一区| 久久中文欧美| 最新国产乱人伦偷精品免费网站| 91久久国产综合久久| 你懂的成人av| 99视频精品免费观看| 亚洲午夜久久久久久久久电影院| 欧美日韩在线观看视频| 亚洲天堂成人在线观看| 欧美一区二区成人6969| 国产女人18毛片水18精品| 午夜精品在线看| 久久综合电影| 日韩一级精品视频在线观看| 欧美午夜大胆人体| 性欧美大战久久久久久久久| 米奇777在线欧美播放| 亚洲日韩视频| 国产精品日韩精品欧美精品| 久久精品视频在线免费观看| 亚洲国产福利在线| 午夜精彩视频在线观看不卡 | 欧美精品福利视频| 亚洲婷婷综合色高清在线| 久久精品欧美日韩| 一本久道久久综合狠狠爱| 国产精品区一区二区三区| 久久久国产精品亚洲一区| 亚洲美女中出| 久久综合九色99| 亚洲综合视频一区| 亚洲高清二区| 国产精品欧美日韩一区二区| 久久久水蜜桃| 一区二区三区国产在线| 久久久国产成人精品| 亚洲精一区二区三区| 国产视频不卡| 欧美区视频在线观看| 久久福利资源站| 99re成人精品视频| 欧美成人精精品一区二区频| 性久久久久久久久| 亚洲精品少妇| 亚洲国产aⅴ天堂久久| 国产欧美精品一区| 欧美激情一区二区三区在线视频 | 99精品欧美一区| 久久影视三级福利片| 亚洲伊人网站| 亚洲乱码国产乱码精品精98午夜| 国产日韩欧美在线看| 欧美日韩播放| 欧美丰满高潮xxxx喷水动漫| 欧美一级视频精品观看|