【正文】
1 第 5講 Windows的圖形設(shè)備接口及繪圖 要點(diǎn): 圖形設(shè)備接口 繪圖工具、顏色 繪圖函數(shù)應(yīng)用 繪圖 一、圖形設(shè)備接口 (GDI) GDI負(fù)責(zé)系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在 輸出設(shè)備 上 顯示圖形 或 文字 , 是 Windows系統(tǒng)的重要組成部分 Windows 繪圖 (GDI設(shè)備無關(guān)性 ) Windows提供應(yīng)用程序與具體設(shè)備分離的功能 指開發(fā)人員只要建立與輸出設(shè)備的關(guān)聯(lián),讓系統(tǒng)加載相應(yīng)的設(shè)備驅(qū)動(dòng)程序即可 顯示器,打印機(jī),繪圖儀等 1. GDI的一些基本概念 GDI負(fù)責(zé)系統(tǒng)與用戶 (繪圖程序 )之間的信息交換,并控制在外設(shè)上顯示圖形和文字。 設(shè)備描述表 (DC)即為 設(shè)備環(huán)境的屬性的集合 應(yīng)用程序 與輸出設(shè)備 之間的橋梁 Win系統(tǒng) 外設(shè) 直接訪問 不允許 統(tǒng)一的設(shè)備環(huán)境 (DC) 提供 使應(yīng)用程序與設(shè)備相連 用戶 為確保圖形輸出 的設(shè)備無關(guān)性 應(yīng)用程序 設(shè)備描述表及其屬性 應(yīng)用程序每一次圖形操作均參照 設(shè)備描述表 中的屬性執(zhí)行 DC可看成圖形的輸出模板 設(shè)備描述表 (DC) ? 設(shè)備描述表的分類: 顯示 、打印、存儲(chǔ)、消息 屬性:背景色,背景模式,畫刷,調(diào)色板,繪圖方式等 字體屬性:字體,文本顏色,畫筆,字符間距等 屏幕上繪制圖形的步驟: 設(shè)置設(shè)備描述表( DC) 設(shè)置畫筆或畫刷、顏色、外觀式樣等相關(guān)屬性 調(diào)用圖形函數(shù)繪制圖形 圖形刷新 是繪圖過程中必須考慮的重要問題 刷新請(qǐng)求 對(duì)刷新請(qǐng)求的響應(yīng) 刷新方法 包括 (1) 刷新請(qǐng)求 應(yīng)用程序在窗口中 繪制了一個(gè)橢圓, 調(diào)色板覆蓋了 橢圓的一部分 關(guān)閉顏色選框后, 應(yīng)用程序需要恢 復(fù)被覆蓋部分的顏色和形狀 窗口大小的調(diào)整 窗口移動(dòng) 被覆蓋后的恢復(fù) (2) 系統(tǒng)對(duì)刷新請(qǐng)求的響應(yīng) 當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消息隊(duì)列發(fā)送 WM_PAINT消息,系統(tǒng)在應(yīng)用程序的消息隊(duì)列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理 三種 刷新 窗口移動(dòng)后的刷新 被覆蓋區(qū)域的刷新 對(duì)象穿越后的刷新 用戶區(qū)移動(dòng)或顯示 用戶窗口大小改變 程序通過滾動(dòng)條滾動(dòng)窗口 窗口被另一個(gè)窗口覆蓋的 恢復(fù) 光標(biāo)穿過用戶區(qū) 圖標(biāo)拖過用戶區(qū) 常用的 Windows應(yīng)用程序刷新窗口的方法 保存副本。刷新時(shí)將副本拷貝到相應(yīng)的窗口中 記錄事件。刷新時(shí)重新執(zhí)行這個(gè)曾經(jīng)發(fā)生的事件 重新繪制。將圖形繪制處理程序放在消息WM_PAINT響應(yīng)模塊中,刷新時(shí)重繪圖形 (3) 有效的刷新方法 3. 獲取設(shè)備環(huán)境的方法 獲取設(shè)備環(huán)境是應(yīng)用程序輸出圖形的先決條件,常用的兩種方法是調(diào)用函數(shù) BeginPaint或 GetDC, 由 BeginPaint函數(shù)獲取的設(shè)備環(huán)境要用EndPaint函數(shù)釋放 MFC的 CDC類封裝了這些函數(shù), CObject 是 CDC的父類, CDC的子類 如下: P171 CDC 設(shè)備描述表類 CClientDC:窗口客戶的設(shè)備描述表類 CWindowDC:整個(gè)窗口的設(shè)備描述表類 CMetaFileDC:源文件的設(shè)備描述表類 CPaintDC:只能響應(yīng) WM_PAINT 消息 4. 映像模式 窗口:對(duì)應(yīng)邏輯坐標(biāo)系上程序員設(shè)定的區(qū)域 視口:對(duì)應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域 窗口和視口 如何映射? 映像模式定義了將 邏輯單位 轉(zhuǎn)化為 設(shè)備的度量單位 以及設(shè)備的 x方向和y方向,程序員可在一個(gè)統(tǒng)一的邏輯坐標(biāo)系中操作而不必考慮輸出設(shè)備的坐標(biāo)系情況 映像模式將一個(gè)邏輯單位映射為坐標(biāo)系設(shè)定M M _ A N I S O T R O P I C 系統(tǒng)確定 O p ti o n a lM M _ H I E N G L I S H 0 . 0 0 1 英寸 Y 上, X 右M M _ H I M E T R I C 0 . 0 1 毫米 Y 上, X 右M M _ I S O T R O P I C 系統(tǒng)確定O p ti o n a l ,但 x軸和 y 軸的單位此例為 1 : 1M M _ L O E N G L I S H 0 . 0 1 英寸 Y 上, X 右M M _ L O M E T R I C 0 . 1 毫米 Y 上, X 右M M _ T E X T 一個(gè)像素 Y 下, X 右M M _ T W I P S 1 / 1 4 4 0 英寸 Y 上, X 右缺省的映射模式 坐標(biāo)系統(tǒng) 邏輯坐標(biāo)系統(tǒng) 設(shè)備坐標(biāo)系統(tǒng) 屏幕坐標(biāo)系統(tǒng)