<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MFC和Win32技術(shù)應(yīng)用分析

          MFC和Win32技術(shù)應(yīng)用分析

          作者: 時間:2018-09-05 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201809/388505.htm

          Drawing modeR2_COPYPEN

          FontSYSTEM_FONT (SYSTEM_FIXED_FONT for applications written to run with Windows versions 3.0 and earlier)

          Intercharacter spacing0

          Mapping modeMM_TEXT

          PenBLACK_PEN

          Polygon-fill modeALTERNATE

          Stretch modeBLACKONWHITE

          Text colorText color setting from Control Panel (typically, black)

          Viewport extent(1,1)

          Viewport origin(0,0)

          Window extent(1,1)

          Window origin(0,0)

          表2-3 設(shè)備描述表的分類

          Display顯示設(shè)備描述表,提供對視頻顯示設(shè)備上的繪制操作的支持

          Printer打印設(shè)備描述表,提供對打印機、繪圖儀設(shè)備上的繪制操作的支持

          Memory內(nèi)存設(shè)備描述表,提供對位圖操作的支持

          Information信息設(shè)備描述表,提供對操作設(shè)備信息獲取的支持

          表2-3中的顯示設(shè)備描述表又分三種類型,如表2-4所示。

          表2-4 顯示設(shè)備描述表的分類

          名稱特點功能

          Class Device

          Contexts提供對Win16的向后兼容

          Common

          Device

          Contexts在Windows系統(tǒng)的高速緩沖區(qū),數(shù)量有限Applicaion獲取設(shè)備描述表時,Windows用缺省值初始化該設(shè)備描述表,Application使用它完成繪制操作,然后釋放

          Private

          Device

          Contexts沒有數(shù)量限制,用完不需釋放一次獲取,多次使用多次使用過程中,每次設(shè)備描述表屬性的任何修改或變化都會被保存,以支持快速繪制

          (1)使用設(shè)備描述表的步驟

          要使用設(shè)備描述表,一般有如下步驟:

          獲取或者創(chuàng)建設(shè)備描述表;

          必要的話,改變設(shè)備描述表的屬性;

          使用設(shè)備描述表完成繪制操作;

          釋放或刪除設(shè)備描述表。

          Common設(shè)備描述表通過::GetDC,::GetDCEx,::BeginPaint來獲得一個設(shè)備描述表,用畢,用::ReleaseDC或::EndPaint釋放設(shè)備描述表;

          Printer設(shè)備描述表通過::CreateDC創(chuàng)建設(shè)備描述表,用::DeleteDC刪除設(shè)備描述表。

          Memory設(shè)備描述表通過::CreateCompatibleDC創(chuàng)建設(shè)備描述表,用::DeleteDC刪除。

          Information設(shè)備描述表通過::CreateIC創(chuàng)建設(shè)備描述表,用::DeleteDC刪除。

          (2)改變設(shè)備描述表屬性的途徑

          要改變設(shè)備描述表的屬性,可通過以下途徑:

          用::SelectObject選入新的除調(diào)色板以外的GDI Object到設(shè)備描述表中;

          對于調(diào)色板,使用::SelectPalette函數(shù)選入邏輯調(diào)色板,并使用::RealizePalette把邏輯調(diào)色板的入口映射到物理調(diào)色板中。

          用其他API函數(shù)改變其他屬性,如::SetMapMode改變映射模式。

          設(shè)備描述表在MFC中的實現(xiàn)

          MFC提供了CDC類作為設(shè)備描述表類的基類,它封裝了Windows的HDC設(shè)備描述表對象和相關(guān)函數(shù)。

          CDC類

          CDC類包含了各種類型的Windows設(shè)備描述表的全部功能,封裝了所有的Win32 GDI 函數(shù)和設(shè)備描述表相關(guān)的SDK函數(shù)。在MFC下,使用CDC的成員函數(shù)來完成所有的窗口繪制工作。

          CDC 類的結(jié)構(gòu)示意圖2-2所示。

          CDC類有兩個成員變量:m_hDC,m_hAttribDC,它們都是Windows設(shè)備描述表句柄。CDC的成員函數(shù)作輸出操作時,使用m_Hdc;要獲取設(shè)備描述表的屬性時,使用m_hAttribDC。

          在創(chuàng)建一個CDC類實例時,缺省的m_hDC等于m_hAttribDC。如果需要的話,程序員可以分別指定它們。例如,MFC框架實現(xiàn)CMetaFileDC類時,就是如此:CMetaFileDC從物理設(shè)備上讀取設(shè)備信息,輸出則送到元文件(metafile)上,所以m_hDC和m_hAttribDC是不同的,各司其責(zé)。還有一個類似的例子:打印預(yù)覽的實現(xiàn),一個代表打印機模擬輸出,一個代表屏幕顯示。

          CDC封裝::SelectObject(HDC hdc,HGDIOBJECT hgdiobject)函數(shù)時,采用了重載技術(shù),即它針對不同的GDI對象,提供了名同而參數(shù)不同的成員函數(shù):

          SelectObject(CPen *pen)用于選入筆;

          SelectObject(CBitmap* pBitmap)用于選入位圖;

          SelectObject(CRgn *pRgn)用于選入剪裁區(qū)域;

          SelectObject(CBrush *pBrush)用于選入刷子;

          SelectObject(CFont *pFont)用于選入字體;

          至于調(diào)色板,使用SelectPalette(CPalette *pPalette,BOOL bForceBackground )選入調(diào)色板到設(shè)備描述表,使用RealizePalletter()實現(xiàn)邏輯調(diào)色板到物理調(diào)色板的映射。

          從CDC派生出功能更具體的設(shè)備描述表

          從CDC 派生出四個功能更具體的設(shè)備描述表類。層次如圖2-3所示。

          下面,分別討論派生出的四種設(shè)備描述表。

          CCientDC

          代表窗口客戶區(qū)的設(shè)備描述表。其構(gòu)造函數(shù)CClientDC(CWnd *pWin)通過::GetDC獲取指定窗口的客戶區(qū)的設(shè)備描述表HDC,并且使用成員函數(shù)Attach把它和CClientDC對象捆綁在一起;其析構(gòu)函數(shù)使用成員函數(shù)Detach把設(shè)備描述表句柄HDC分離出來,并調(diào)用::ReleaseDC釋放設(shè)備描述表HDC。

          CPaintDC

          僅僅用于響應(yīng)WM_PAINT消息時繪制窗口,因為它的構(gòu)造函數(shù)調(diào)用了::BeginPaint獲取設(shè)備描述表HDC,并且使用成員函數(shù)Attach把它和CPaintDC對象捆綁在一起;析構(gòu)函數(shù)使用成員函數(shù)Detach把設(shè)備描述表句柄HDC分離出來,并調(diào)用::EndPaint釋放設(shè)備描述表HDC,而::BeginPaint和::EndPaint僅僅在響應(yīng)WM_PAINT時使用。

          CMetaFileDC

          用于生成元文件。

          CWindowDC

          代表整個窗口區(qū)(包括非客戶區(qū))的設(shè)備描述表。其構(gòu)造函數(shù)CWindowDC(CWnd *pWin)通過::GetWindowDC獲取指定窗口的客戶區(qū)的設(shè)備描述表HDC,并使用Attach把它和CWindowDC對象捆綁在一起;其析構(gòu)函數(shù)使用Detach把設(shè)備描述表HDC分離出來,調(diào)用::ReleaseDC釋放設(shè)備描述表HDC。

          MFC設(shè)備描述表類的使用

          使用CPaintDC、CClientDC、CWindowDC的方法

          首先,定義一個這些類的實例變量,通常在棧中定義。然后,使用它。

          例如,MFC中CView對WM_PAINT消息的實現(xiàn)方法如下:

          void CView::OnPaint()

          {

          // standard paint routine

          CPaintDC dc(this);

          OnPrepareDC(dc);



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();