程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Windows編程基礎- 設備對象屬性

Windows編程基礎- 設備對象屬性

編輯:關於C語言

設備對象屬性決定著繪圖方式,當使用GDI函數繪圖時,所繪制的圖形和文本的顏色、大小和位置等由設備對象的當前屬性決定,應用程序可以使用GDI函數改變設備對象的當前屬性。本章介紹設備對象的一些主要屬性和用於改變這些屬性的有關函數,其它的設備對象屬性在後面的章節中陸續介紹。

3.1、圖形設備接口
  在第二章,我們一直在使用圖形設備接口(GDI),GDI的主要目標之一是支持在輸出設備(例如顯示器、打印機)上建立與設備無關的圖形輸出。Windows的圖形大部分是由GDI.EXE(Windows系統的一個模塊,稱GDI模塊)中的函數處理的。GDI模塊通過調用在不同設備驅動程序模塊中的例程來控制輸出設備。例如,顯示設備驅動程序用於訪問與視頻顯示器有關的硬件。通過GDI,Windows可以確定驅動程序能夠進行什麼工作,並且由於應用程序只與GDI打交道。這樣,GDI通過將應用程序與不同的輸出設備隔離,使應用程序可以在支持Windows的任何圖形輸出設備上工作。
  圖形輸出設備可以分為兩組:光柵設備和矢量設備。光柵設備將圖象表示為點(象素)的圖案。這類輸出設備包括顯示設備、點陣打印機和激光打印機。向量設備用線段來繪制圖象,例如繪圖儀。Windows的GDI是一種隔離了硬件具體特性的圖形語言。雖然輸出設備用象素來表示圖形,但GDI卻可以被用作一個高級的向量繪圖系統,也可以被用來進行較低級的象素操作。
  在編寫Windows應用程序時,程序員不必為顏色過分擔心,如果在應用程序中使用的一種顏色不能被該顯示器所表示,Windows或為應用程序選擇一種最直接的純顏色(顯示設備可以表示的顏色),或通過將幾種純顏色相混合來表示這種顏色。當在彩色顯示器上開發的程序運行在單色顯示器上時,Windows將使用灰度來表示顏色。應用程序也可以在程序中確定輸出設備的有關特性,例如,可表示的顏色數目、設備的顯示區的尺寸等,以便最大限度地發揮硬件的能力。

3.2、設備對象屬性
  設備對象具有許多決定GDI函數在設備對象上如何工作的當前屬性。例如,在使用函數TextOut()時,只需要在函數中說明設備對象的句柄、繪制字符的起始坐標、文本和文本長度,而不用說明字體、文本顏色、背景顏色和字符間距等,因為這些特征由設備對象的屬性決定。每種設備對象都賦有缺省的屬性,可以使用GDI函數改變這些屬性中的某一個。表3-1給出了顯示設備各個屬性的缺省值,當使用GetDC()和BeginPaint()等函數初次得到一個顯示設備對象時,該對象的屬性具有缺省值。

屬性 缺省值 視區原點 (0, 0) 視區范圍 (1, 1) 窗口原點 (0, 0) 窗口范圍 (1, 1) 背景顏色 白色 背景方式 OPAQUE 位圖 任意值 刷子 WHITE_BRUSH 刷子原點 (0, 0) 裁剪區 用戶區/無效矩形區/子窗口區 調色板 DEFAULT_PALETTE   屬性 缺省值 筆的當前位置 (0, 0) 筆的顏色 BLACK_PEN 文本顏色 黑 設備的原點 用戶區的左上角 繪圖方式 R2_COPYPEN 字體 SYSTEM_FONT 字符間距 0 映射方式 MM_TEXT 多邊形填充方式 ALTERNATE 相對一絕坐標 ABSOLUTE 縮放方式 BLACKONWHITE
  在本章以後的各節中將介紹其中一些設備屬性,其它屬性在以後章節中介紹。

3.3、設備坐標系
  為在輸出設備上定位和繪制圖形對象,必須引入一種坐標系。Windows的各種不同類型設備所使用的坐標稱為設備坐標。它們使用笛卡爾坐標系,在這些設備坐標系中,單位都以象素的個數表示(稱為設備單位)。x軸上的值自左向右增加,y軸上的值自頂向下增加,見圖3-1。

圖3-1 Windows的設備坐標系
  本節以視頻顯示設備為例介紹Windows的設備坐標系,其中的許多內容也適合用於象打印機等硬拷貝輸出設備。
  在Windows環境中,視頻顯示設備是一個共享設備,即在同一時刻,顯示設備上可以同時顯示多個應用程序的輸出信息。為了保護一個程序顯示的信息不被其他程序破壞,Windows通過將顯示區看作不同的設備對象來限制應用程序輸出信息的范圍。
  一個應用程序可獲取三種不同的顯示設備對象句柄,每種句柄所標識的設備對象代表屏幕上的不同區域。我們可以將這三個句柄所標識的對象視作三個不同的抽象顯示設備,都帶有如圖3-1所示的設備坐標系,但對不同的抽象設備,坐標原點不一樣的。這樣,當使用相同的起始坐標而使用不同的設備對象句柄調用GetDC函數(例如TextOut())進行繪圖時,信息顯示的位置不一樣。
  第一抽象設備是用戶區對象,它的坐標原點在用戶區的左上角。定位該區域的設備坐標系稱為用戶區坐標系。使用函數GetDC()或BeginPaint()得到的句柄是標識用戶區的句柄。當使用該句柄標識該區域的句柄作為GDI函數的參數時,GDI函數所使用的坐標值是相對於用戶區坐標系。
  第二個抽象設備是全窗口對象。它包括標題欄、選單、滾動桿和窗口框架等。定位這個區域的坐標系稱為全窗口坐標系,它的原點的左上角。使用函數GetWindowsDC()可以獲得該設備對象的句柄,然後通過該句柄使用全窗口坐標系在該區域中繪圖。應用程序一般不在這個區域中繪圖。
  第三個抽象設備是整個屏幕對象,其坐標原點在屏幕的左上角,定位該區域的設備坐標系稱為屏幕坐標系。使用語句:

  HDC hDC = CreateDC("DISPLAY", NULL, NULL, NULL);

可以獲得該設備對象的句柄,使用該句柄的GDI函數所使用的坐標是相對於屏幕坐標系。
  這三種坐標系方便了程序在不同的區域繪制圖形的需要。例如,由於使用用戶區坐標系,即使窗口在屏幕上被移動到其他位置,但用戶區中顯示的信息相對於用戶坐標系而言其坐標值不變。
  使用坐標系,解決了顯示對象的定位的問題的。但以象素單位所建立的坐標系不符合用戶(或程序員)的習慣,而且在不同分

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved