新書推薦3 1 Windows繪製文字

Mondo 科技 更新 2024-01-30

在本節中,我們將向您展示如何在視窗工作區中繪製文字。 如果要在工作區繪製文字,則需要將整個工作區或指定文字所在的矩形區域設定為無效區域,然後生成 WM panit 訊息並呼叫 GDI 函式繪製文字。 此外,如果要繪製文字,還需要使用裝置上下文控制代碼,這涉及繪製文字的字型、字元的大小和尺寸以及文字的格式。

本節中您需要了解的內容:

無效矩形與有效矩形

裝置環境

字型和字元

練習 19:獲取系統配置資訊 no1

視窗工作區

如圖 3-1 所示。

圖 3-1 視窗工作區。

視窗工作區是視窗標題欄下方的部分。 使用者可以通過拖動視窗來更改視窗的大小,也可以更改視窗工作區的大小。 Windows 程式可以在視窗工作區中繪製乙個區域並傳達視覺資訊。

WM Paint 訊息

大多數 Windows 程式在初始化 WinMain 函式期間進入訊息迴圈之前呼叫 UpDataWindow 函式。 Windows 利用此機會向視窗化程序傳送初始 WM Paint 訊息。 通知視窗程序繪製工作區。 之後,視窗程序需要能夠幾乎隨時處理新的 WM PAINT 訊息,並在必要時重新繪製整個工作區。 當發生以下任一事件時,視窗程序將收到 WM PAINT 訊息:

使用者移動視窗,導致視窗的先前遮罩部分暴露出來。

使用者調整視窗大小(當視窗類似地設定為 cs hreadram 和 cs vreadram 值時)。

程式呼叫 scrollwindow 或 scrolldc 函式來滾動工作區。

程式呼叫 invalidaterect 或 invalidatrgn 函式來顯示生成的 WM PAINT 訊息。

在某些情況下,當工作區的一部分被暫時覆蓋時,Windows 將嘗試儲存覆蓋的部分以供將來恢復。 它並不總是成功的。 在以下情況下,Windows 有時會傳送 WM Paint 訊息:

Windows 關閉覆蓋視窗部分的對話方塊或訊息框。

下拉選單被拉下,然後被收回。

將顯示提示訊息。

在少數情況下,Windows 將始終儲存顯示的覆蓋部分,然後恢復它。 這些情況如下:

滑鼠指標在工作區上移動。

在客戶區域中拖動 ** 標籤。

處理 WM PAINT 訊息需要我們更改輸出的概念。 該程式應收集並儲存用於繪製工作區的所有資訊,但僅在需要時才這樣做 - 當收到 WM PAINT 訊息時,如果程式需要在其他時間更新工作區,它可以強制 Windows 生成 WM PAINT 訊息。 這似乎是乙個彎路,但該計畫的結構將從中受益。

有效矩形

在 Windows 視窗中,視窗的有效矩形區域是可以實際繪製內容的視窗區域,即排除標題欄、邊框和其他非工作區的區域。 有效矩形區域通常由矩形的左上角和右下角坐標表示,可以通過 getclientrect 函式獲得:

getclientrect:此函式用於獲取視窗工作區矩形區域的坐標。 此函式採用視窗控制代碼引數和指向視窗工作區的矩形區域的指標,並將矩形區域的坐標儲存在結構中的視窗工作區中。

bool getclientrect(

hwnd hwnd,視窗手柄。

指向 lprect lprect 矩形結構的指標。

示例:rect rcclient;

getclientrect(hwnd, &rcclient);

adjustwindowrect:該函式根據指定的視窗樣式和工作區的矩形區域,計算整個視窗(包括標題欄、邊框等)的坐標。

bool adjustwindowrect(

lprect lprect,指定的矩形區域。

DWORD DWSytage,視窗樣式。

Bool B選單。

示例:rect rcclient;

adjustwindowrect(&rcclient, dwstyle, false);

無效的矩形

在 Windows GUI 中,無效的矩形區域通常是指需要重繪的視窗部分。 當乙個視窗的內容發生變化,或被其他視窗遮擋然後顯示時,相關區域將被標記為“無效”,需要在下乙個繪製週期中重新繪製。

無效區域通過 Windows 的訊息傳遞系統進行處理。 當部分視窗失效時,系統會傳送WM繪製訊息,在下乙個繪製週期中,呼叫視窗對應的視窗過程函式,重新繪製無效區域。

如果需要在程式中手動設定無效區域,可以使用以下一些功能:

invalidaterect:該函式會將視窗的整個區域或指定區域標記為無效,函式原型如下:

bool invalidaterect(

hwnd hwnd,const rect *lprect,bool berase

HWND:視窗控制代碼,指定要進行區域中和的視窗。

lprect:指向矩形結構的矩形區域的指標,用於指定要中和的矩形區域。 如果此引數為 null,則整個視窗將被標記為無效。

berase:是否在下次處理繪製訊息時擦除背景。

InvalidAtergn:類似於 InvalidAterect,但用於設定無效區域。

當您收到 WM 繪製訊息時,您可以呼叫 BeginPaint 函式獲取無效區域並開始繪製過程,並在完成繪製時呼叫 EndPaint 完成。 Beginpaint 在處理訊息後自動驗證視窗(即清除無效區域標記)。

如果訊息佇列中已有 WM PAINT 訊息,則 Windows 將重新計算新的無效矩形。 否則,Windows 會將 WM PAINT 訊息放在訊息佇列中。 在本章的後面,我們將看到,當視窗程序收到 WM 繪製訊息時,它可以獲取無效矩形的坐標。 在任何其他時間,它都可以通過呼叫 getupdaterect 函式來獲取這些坐標。

需要注意的是,雖然系統會自動處理無效區域的重繪,但在某些情況下,如果您不需要立即更新視窗,或者如果您想在特定時間更新(例如,在進行一系列更改後),您可以使用 validaterect 或 validatrgn 函式來清除無效區域並避免立即觸發 WM PAINT 訊息。 然後,在適當的時候,使用 invalidaterect 或 invalidatern 函式來設定無效區域並觸發視窗重繪。

使用這些函式進行手動中和和驗證有助於提高軟體的效能和使用者體驗,並避免因重複失效和重繪而導致的閃爍和效能下降。

總的來說,處理無效的矩形區域是 Windows GUI 程式設計中的乙個重要概念,了解它是如何工作的,以便在編寫和維護時更好地控制視窗的更新和重繪是很重要的。

裝置環境

在 Windows 中,裝置上下文 (DC) 是用於描述裝置(如監視器、印表機等)的抽象概念。 裝置環境DC其實是GDI內部維護的乙個資料結構,它包含了圖紙的所有資訊,可以看作是圖紙的工作環境,比如線寬、顏色、字型等各種圖紙引數。 當我們需要對映乙個裝置時,我們需要獲取裝置對應的裝置環境。

裝置環境有三種基本型別:顯示 DC、印表機 DC 和記憶體 DC。 我們將在第 13 章中介紹列印裝置環境,在第 14 章中介紹儲存裝置環境。 在本章中,我們將只介紹顯示裝置環境。

在繪製之前,程式必須首先獲取裝置環境的控制代碼。 獲取控制代碼後,Windows 使用預設屬性值填充內部裝置環境結構。 在後面的章節中,我們將了解一些可以更改這些預設值的 GDI 函式。 某些 GDI 函式允許獲取當前屬性值。 還有一些 GDI 函式,允許您在當前工作區中實際繪製。

當程式繪製完工作區後,它必須釋放裝置環境控制代碼。 程式釋放控制代碼後,該控制代碼將不再有效,不能再使用。 程式必須在處理同一訊息的過程中獲取和釋放控制代碼。 我們不能在兩條訊息之間傳遞環境裝置控制代碼,唯一的例外是通過呼叫 createdc 函式建立的裝置環境,本章不討論。

顯示環境是與顯示器關聯的裝置環境,用於在螢幕上繪圖。 一般通過getdc、beginpaint等函式獲取。

獲取裝置環境控制代碼的方法

方法 1:在前面的示例中,當我們處理 WM PAINT 訊息時,視窗程序首先呼叫 Beginpaint 函式來擦除無效區域的背景以進行繪製。 同時,填充 PS 結構的字段。

paintstruct 結構定義如下:

typedef struct tagpaintstruct

hdc hdc ;

bool ferase ;

rect rcpaint ;

bool frestore ;

bool fincupdate ;

byte rgbreserved[32] ;

paintstruct ;

該程式只能使用前三個字段,其他欄位供 Windows 內部使用。 HDC 是裝置環境控制代碼,Beginpaint 函式的返回值是裝置環境控制代碼的值。 在大多數情況下,ferase 字段設定為 false(0)。 這意味著 Windows 已擦除上乙個 Beginpaint 函式中無效區域的背景。 (如果要自定義在視窗期間擦除背景的方式,則必須自己處理 WM erasebkgnd 訊息)。 在 WinMain 初始化時,用於註冊視窗類的 WNDSoct 結構中的 BHRbackground 字段指定 Windows 用於擦除背景的畫筆。 許多 Windows 程式指定白色背景畫筆。

wndclass.hbrbackground = (hbrush) getstockobject (white_brush) ;視窗背景顏色。

但是,當程式通過呼叫 invalidaterect 函式使工作區中的矩形失效時,該函式的最後乙個引數指定是否要擦除背景。 如果引數為 false(0) ,則 Windows 不會擦除背景,並且在呼叫 BeginPaint 函式後,PaintStruct 結構的 ferase 欄位的值將為 true (非零) 。

paintstruct 結構的 rcpaint 欄位是矩形結構。 我們知道 rect 結構定義了乙個具有 4 個字段的矩形:left、top、right 和 bottom。 paintstruct 結構中的 rcpaint 字段定義無效矩形的邊界。

paintstruct 結構中的 rcpaint 矩形不僅是無效矩形,而且還是“裁剪”矩形,如果無效區域不是矩形,則 Windows 會將繪製限制在此區域。

處理 WM Paint 訊息時,可以通過呼叫 BeginPaint 在更新矩形外部繪製以下函式:

invalidaterect(hwnd,null,true);

此呼叫將中和整個工作區,並導致稍後呼叫 beginpaint 以擦除原始背景。 如果最後乙個引數設定為 false,則 BeginPaint 函式的後續呼叫將不會擦除背景,並且將保留原始背景。

一般來說,對於 Windows 程式來說,最方便的事情是在收到 WM Paint 訊息後簡單地重新繪製工作區,而不管 RCPAINT 結構的值如何。 例如,如果工作區的顯示包括乙個圓圈,但只有其中一部分落在無效區域內,則僅繪製圓圈的一部分是不切實際的。 執行此操作的簡單方法是重新繪製整個圓圈。 使用 Beginpaint 返回的裝置環境控制代碼時,Windows 無論如何都不會在 RCPAINT 定義的矩形之外繪製。

beginpaint 函式的返回值是裝置環境控制代碼,通常儲存在名為 hdc 的變數中。

hdc hdc;

HDC 資料型別是乙個 32 位無符號整數。 之後,程式可以呼叫任何需要裝置環境控制代碼的 GDI 函式,例如 textout。 呼叫 endpaint 函式將釋放裝置環境控制代碼。

通常處理 WM PAINT 訊息的 ** 如下所示:

case wm_paint:

hdc = beginpaint(hwnd,&ps);

使用 gdi 函式]。

endpaint(hwnd,&ps);

return 0;

處理 WM Paint 訊息時,視窗過程必須成對呼叫 BeginPaint 和 EndPaint 函式。 如果視窗過程不處理 WM PAINT 訊息,則 WM PAINT 訊息將傳遞給 Windows 預設視窗過程 DeWindowProc。 **下面:

case wm_paint:

beginpaint(hwnd,&ps);

endpaint(hwnd,&ps);

return 0;

這不包含兩個函式之間的任何 **,但原始無效區域除外。

以下 ** 為 false:

case wm_paint:

return 0;//wrong!

由於某些工作區無效,因此 Windows 會將 WM PAINT 訊息放在訊息佇列中。 除非呼叫 Beginpaint 和 Endpaint 函式,否則 Windows 不會驗證該區域。 因此,Windows 將永遠繼續傳送 WM Paint 訊息。

方式二:呼叫getdc函式獲取裝置環境的控制代碼。 通常,繪圖是在處理 WM Paint 訊息時完成的。 但是,有時不一定,如果在處理其他訊息時需要呼叫 gdi drawing 函式進行繪製,則需要使用裝置環境控制代碼,而裝置環境控制代碼不能跨訊息使用,只能重新獲取。 Beginpaint 和 Endpaint 函式不能在其他訊息模組中使用,因此請使用 getdc 函式獲取裝置環境控制代碼,並使用 releasedc 函式釋放裝置環境控制代碼。 與 Beginpaint 和 Endpaint 類似,getdc 和 releasedc 必須成對使用。

與從 Beginpaint 函式返回的裝置環境控制代碼不同,從 getdc 返回的裝置環境控制代碼中的剪下矩形是整個工作區。 這意味著可以繪製工作區的任何部分,而不僅僅是在無效矩形中,這意味著沒有無效矩形並不重要。 與 Beginpaint 不同,GETDC 不驗證無效區域。 如果需要使整個客戶端區域有效,可以呼叫以下函式:

validaterect(hwnd,null);

通常,getdc 和 releasedc 函式用於處理鍵盤訊息(例如,在文字處理器中)或滑鼠訊息(例如,在繪圖程式中)。 使用這兩個函式,程式可以在接收到來自使用者鍵盤或滑鼠的輸入時及時繪製工作區,而不必為了生成 WM PAINT 訊息而故意使工作區的一部分失效。 但是,即使程式在處理非 WM PAINT 訊息時進行繪製,它仍然必須收集足夠的資訊才能在收到 WM PAINT 時更新顯示。

另乙個類似於 getdc 的函式是 getwindowdc。 GetDC 返回 Window 工作區中的裝置環境控制代碼,GetWindowDC 返回整個視窗的裝置環境控制代碼。 例如,程式設計師可以使用 GetWindowDC 返回的裝置環境控制代碼在視窗的標題欄中輸出,因此,程式還必須處理 WM NCPAINT(非工作區繪圖)訊息。

系統字型

裝置環境還定義了 Windows 在呼叫 Textout 時使用的字型。 在 Windows 上,您可以在應用程式中使用許多預安裝的字型。 這些字型通常儲存在 C: Windows Fonts 資料夾中。 字型有多種型別,預設字型稱為“系統字型”或系統字型(識別符號在 windi 中定義h 標頭檔案)。系統字型是 Windows 在標題欄、選單和對話方塊中使用的預設字型。

在 Windows 的早期,系統字型是寬字型,字型是非等寬字型。

1 等寬字型:每個字元占用相等的寬度。 無論是像“w”這樣的寬字元還是像“i”這樣的窄字元,每個字元在顯示時都具有相同的寬度。 這種字型在某些場景中非常有用,例如在程式設計中經常使用等寬字型。 因為在**中,對於空格和縮排的顯示,等寬字元可以使結構更清晰,對齊更準確。 常見的等寬字型包括 courier、monaco 和 consolas。

2 非等寬字型:也稱為比例字型,單個字元和標點符號可以占用不同的寬度。 這些字型在大多數文件、**和圖形使用者介面中使用得更廣泛,因為它們具有更好的閱讀體驗和視覺吸引力。 例如,在非等寬字型中,字元“i”的寬度比字元“w”的寬度小得多。 常見的非等寬字型包括 arial、times new roman 和 verdana。

這兩種字型的選擇取決於您的具體需求。 如果需要對齊或固定寬度等功能,可以選擇等寬字型。 對於大多數文件布局和網頁設計,等寬字型通常是更好的選擇,因為它們感覺更流暢、更自然。

系統字型是“位矩陣字型”:每個字元都由畫素組成。 在第 16 章中,我們將學習 TrueType 字型,它從輪廓中定義字元。 在某種程度上,系統字型中字元的大小取決於顯示器的大小:系統字型涉及能夠在顯示器上顯示至少 25 行和 80 列。

字元大小

為了使用 textout 函式顯示多行文字,您需要知道字型中字元的大小。 字元的高度可以決定一行文字的垂直位置,而字元的平均寬度可以確定下一列文字的水平位置。

系統字型中字元的平均寬度沒有固定值,具體取決於顯示器的解像度。 如果螢幕解像度低,字元會變大,如果解像度高,字元會變小。 該程式可以通過呼叫 getsystemmetrics 函式來獲取使用者介面的維度。 同樣,getsystemmetrics 函式允許程式獲取字型大小。 getSystemMetrics 函式需要裝置環境的控制代碼,因為它返回有關該裝置環境中當前所選字型的資訊。 Windows 會將字元大小的各種值複製到 TextMetric 型別的結構中,該結構位於 WingDi 中h 標頭檔案中定義了 20 個字段,但我們只需要關心其中的前 7 個:

typedef struct tagtextmetric

long tmheight;字元高度。

long tmascent;字元上部的高度(高於基線)。

long **escent;字元的較低高度(低於基線)。

long tminternalleading,由 tmheight 定義的字元高度的頂部空間量。

長 tmexternalleading,夾在兩行之間的空間量。

long tm**echarwidth,平均字元寬度。

long tmmaxcharwidth,最寬字元的寬度。

其他結構字段。

textmetric, *ptextmetric ;

這些欄位的值的單位取決於當前在裝置環境中選擇的對映模式。 預設對映模式(mm 文字)以畫素為單位。

在呼叫 GetSystemMetrics 函式之前,首先定義乙個結構變數,通常命名為 tm:

textmetric tm;

當需要獲取字型大小時,首先獲取裝置環境控制代碼,然後呼叫 getsystemmetrics 函式:

hdc = getdc (hwnd) ;

gettextmetrics (hdc, &tm) ;

releasedc (hwnd, hdc) ;

之後,您可以檢查文字大小結構中的值並儲存以後需要使用的部分。

文字大小

在 textmetrics 結構中,有關於裝置環境中當前字型的各種資訊。 但是,字型的垂直大小僅由其中的 5 個決定,圖 3-2 顯示了其中的 4 個。

圖3-2 字型大小

其中最重要的是 tmheight,它是 tmascent 和 ***esscent 的總和。 這兩個值分別是高於和低於基線的字元的最大高度。 行距是兩行文字之間的間距。 在 textmetrics 結構中,內部間距包含在 tmascent 中。 此間距通常用於希臘重音符號。 tminternalleading 的值可以設定為 0,在這種情況下,重音字元將稍短以包含重音。

tmExternalLeading 不包括在 tmChart 的值中。 此字段是字型設計者建議在兩行文字之間的空間量。 顯示多行文字時,您可以選擇接受或忽略建議。

tm**echarwidth 是小寫字元的加權平均寬度;

tmmaxcharwidth 是字型中最寬字元的寬度。 在等寬字型中,這兩個值是相同的。

在本章的示例程式中,還有另一種型別的字元寬度:大寫字元的平均寬度。 值大小通常可以按 15 倍計算。

需要注意的是,系統字型的大小取決於 Windows 執行時的顯示解像度,有時還取決於使用者選擇的系統字型大小。 Windows 提供與裝置無關的圖形介面。 但程式設計師也需要小心:不要猜測 Windows 應用程式中文字的大小,不要使用固定值,並通過呼叫 GetTextMtetricd 函式獲取此資訊。

文字格式

Windows系統執行時,系統字型不會改變。 因此,應用程式呼叫 gettextmetrics 函式的最佳時間是視窗化過程處理 WM CREATE 訊息時。 WM CREATE 訊息是視窗程序接收的第一條訊息。

假設您的 Windows 程式需要在工作區中顯示幾行文字,並且您需要獲取字元的寬度和高度。 在視窗化過程中,可以定義兩個變數來儲存:

static int cxchar,cychar;

變數名稱以 c 為字首,表示“cont”,這裡代表畫素。 結合 x,y,它表示寬度和高度。 這被定義為靜態變數或全域性變數。

下面**是獲取系統字型的高度和寬度:

case wm_create:

hdc = getdc (hwnd) ;

gettextmetrics (hdc, &tm) ;

cxchar = tm.tm**echarwidth ;

cychar = tm.tmheight + tm.tmexternalleading ;

releasedc (hwnd, hdc) ;

return 0 ;

在視窗中,每行文字都顯示在前一行文字下方的 cychar 畫素處。

通常顯示格式化的數字和字串。 如第 2 章所述,您不能使用傳統的工具 printf 函式,但可以使用 sprintf 函式或 Windows 版本的 sprintf、wsprintf。 這些函式類似於 printf,只是格式化字元儲存在字串中。 此字串可以通過 textout 函式輸出到視窗。 方便的是,sprintf 函式和 wsprintf 函式的返回值是字串的長度,可以作為 ilength 引數傳遞給 textout 函式。

以下 ** 顯示了 wsprintf 和 textout 的典型組合:

int ilength ;

tchar szbuffer [40] ;

其他程式行]。

ilength = wsprintf (szbuffer, text ("the sum of %i and %i is %i"), ia, ib, ia + ib) ;

textout (hdc, x, y, szbuffer, ilength) ;

對於這種簡單的情況,可以將 ilength 的定義放在和 textout 相同的語句中,這樣就不需要定義 ilength:

textout (hdc, x, y, szbuffer,wsprintf (szbuffer, text ("the sum of %i and %i is %i"), ia, ib, ia + ib))

雖然這樣寫看起來不太好看,但功能和前者是一樣的。

sysmets.h -- 系統配置資訊結構陣列(參見附錄 B)。

019 程式設計大師Win32 API日常練習。

第 19 個示例是 sysmets1c:文字輸出---獲取系統配置資訊 否1

textmetric 結構。

getdc 函式。

releasedc 函式。

getTextMetrics 函式。

setTextAlign 函式。

getSystemMetrics 函式。

注意:並非所有資訊都可以顯示在視窗工作區中。

c) www.bcdaren.com 編碼高手。

#include

#include

#include "sysmets.h"定義系統資訊結構和數字線(要顯示的行數)的陣列。

lresult callback wndproc(hwnd, uint, wparam, lparam);

int winapi winmain(hinstance hinstance, hinstance hprevinstance,pstr szcmdline, int icmdshow)

static tchar szappname = text("sysmets1");

省略)返回訊息wparam;

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

static int cxchar;字元的平均寬度。

static int cxcaps;字元間距。

static int cychar;性格領先。

hdc hdc;

int i;

paintstruct ps;

tchar szbuffer[10];

textmetric tm;有關物理字型的基本資訊。

switch (message)

case wm_create:

hdc = getdc(hwnd);獲取裝置環境控制代碼。

從裝置環境中獲取當前預設字型資訊,並將其儲存在 textmetric 結構變數中。

gettextmetrics(hdc, &tm);

cxchar = tm.tm**echarwidth;字元的平均寬度。

tm.tmpitchandfamily 字型間距,tmpitchandfamily 欄位的低位置決定了字型是否為。

它是一種等寬字型:1 表示可變寬度字型,0 表示等寬字型。

字型間距 cxcaps 設定為 15次。 1 表示加寬的字型。

cxcaps = (tm.tmpitchandfamily & 1 ? 3 : 2) *cxchar / 2;

字元行距 = 字元高度 + 字元頂部空間數。

cychar = tm.tmheight + tm.tmexternalleading;

releasedc(hwnd, hdc);鬆開裝置環境控制代碼。

return 0;

case wm_paint:

hdc = beginpaint(hwnd, &ps);

for (i = 0; i < numlines; i++)

使用當前選定的字型、背景色和正文色將字串寫入指定位置。

輸出系統資訊。

textout(hdc, 0, cychar * i,sysmetrics[i].szlabel,lstrlen(sysmetrics[i].szlabel));

輸出描述性資訊。

textout(hdc, 22 * cxcaps, cychar * i,sysmetrics[i].szdesc,lstrlen(sysmetrics[i].szdesc));

設定文字對齊標誌,向右和向上對齊。

settextalign(hdc, ta_right + ta_top);

獲取“系統資訊”引數的值。

textout(hdc, 22 * cxcaps + 40 * cxchar, cychar * i, szbuffer, 標頭檔案泛型函式替換 wsprintf 函式。

stprintf_s(szbuffer, 10,text("%5d"),它根據索引檢索其相應的系統資訊。

getsystemmetrics(sysmetrics[i].iindex)))

恢復預設對齊方式---左對齊和上對齊。

settextalign(hdc, ta_left | ta_top);

endpaint(hwnd, &ps);

return 0;

case wm_destroy:

postquitmessage(0);

return 0;

return defwindowproc(hwnd, message, wparam, lparam);

TextMetric結構:包含物理字型的基本資訊。 所有大小均以邏輯單位指定;也就是說,它們取決於顯示上下文的當前對映模式。

typedef struct tagtextmetric { // tm

long tmheight;字元高度。

long tmascent;字元上部的高度(高於基線)。

long **escent;字元的較低高度(低於基線)。

long tminternalleading,由 tmheight 定義的字元高度的頂部空間量。

長 tmexternalleading,夾在兩行之間的空間量。

long tm**echarwidth,平均字元寬度。

long tmmaxcharwidth,最寬字元的寬度。

long tmweight;字型的粗細。

長 tmoverhang,這增加了一些拼接字型的額外高度。

長 **igitizedaspectx,設計字型的裝置的水平方向。

long **igitizedaspecty,字型設計所針對的裝置的垂直方向。

bchar tmfirstchar;為字型定義的第乙個字元。

bchar tmlastchar;為字型定義的最後乙個字元。

bchar **efaultchar;字型中不存在的字元的替代字元。

bchar tmbreakchar;用於分詞的字元。

位元組 tmitalic,當字型為斜體時為非零。

byte tmunderlined,當字型帶有下劃線時,該值為非零。

位元組 tmstruckout,刪除字型時不為零。

位元組 tmpitchandfamily、字型間距(低 4 位)和 family(高 4 位)。

byte tmcharset;字型的字符集。

textmetrica, *ptextmetrica, *nptextmetrica, *lptextmetrica;

getdc 函式:檢索控制代碼用於指定視窗的工作區或整個螢幕的裝置上下文 (DC) 。 可以在後續 GDI 函式中使用返回的控制代碼來繪製 DC。

裝置上下文是一種不透明的資料結構,其值由 GDI 在內部使用。

hdc getdc(

hwnd hwnd 獲取要獲取其 DC 的視窗的控制代碼。

如果此值為 null,則 getdc 檢索整個螢幕的 DC。

返回值。 如果函式成功,則返回值是指定視窗的工作區 DC 的控制代碼。

如果函式失敗,則返回值為 null。

ReleasedC 函式:釋放裝置上下文 (DC) 並將其釋放以供其他應用程式使用。

ReleasedC 功能的效果取決於 DC 的型別。 它只釋放公共 DC 和視窗 DC。 它不適用於班級或私人 DC。

int releasedc(

hwnd hwnd,要釋放其 DC 的視窗的控制代碼。

HDC HDC 處理要釋放的 DC。

返回值。 返回值指示 DC 是否已釋放。 如果釋放 DC,則返回值為 1。

如果未釋放 DC,則返回值為零。

getTextMetrics 函式:填充和測量當前所選字型指定的緩衝區。

bool gettextmetrics(

HDC HDC,裝置上下文的控制代碼。

LPemTextMetric LPTM 指向接收的文字指標的 textmetric 結構的指標。

返回值。 如果函式成功,則返回值為非零。

如果函式失敗,則返回值為零。

setTextAlign 函式:設定指定裝置環境的文字對齊標誌。

uint settextalign(

HDC HDC,裝置上下文的控制代碼。

uint 使用以下列表中的值掩碼對齊文字對齊方式。

返回值。 如果函式成功,則返回值為前面的文字對齊設定。

如果函式失敗,則返回值為 gdi 錯誤

getSystemMetrics 函式:檢索指定的系統指標或系統配置設定。

int getsystemmetrics(

int nindex 要檢索的系統指標或配置設定。

返回值。 型別:int

如果函式成功,則返回值是請求的系統指標或配置設定。

如果函式失敗,則返回值為 0。 GetLastError 不提供擴充套件的錯誤資訊。

注意]很明顯,視窗工作區中只顯示部分內容。

系統配置如圖3-3所示。

本文摘自程式設計大師系列教科書《Windows API Daily Practice》 - Windows Programming Basics。

相關問題答案

    先讀的好書!每週推薦新書和新作品

    每週都有新書和新作品。定期更新令人興奮。本週新書 年 北京社會發展報告 藍皮書 主辦單位 北京市發展和改革政策研究中心。北京出版社.北京社會發展藍皮書報告 是反映北京民生產業發展成果 分析社會政策導向 記錄社會公共服務發展情況的年度綜合性報告。該報告由北京市發展和改革政策研究中心組織編制,在向北京市...

    新書推薦1 2 計算機體系結構

    本節內容 計算機硬體系統的元件。計算機的核心元件 CPU 記憶體 主機板 硬碟 顯示卡 顯示器和鍵盤。計算機的結構演進馮 諾依曼,以儲存為中心的計算機體系結構,現代計算機體系結構。計算機系統的五個層次 第 層微指令 第 層機器語言指令集 第 層作業系統 第 層組合語言 第 層高階語言。在本節中,我們...

    九卦新書推薦:李愛軍、王毅《資料出境法原理與實踐》。

    作者 李愛軍,王毅.九瓜金融圈。資料出境法原理與實務 於年月正式出版,是第一本將資料出境法理論與實踐相結合的著作,也是年教育部哲學社會科學研究重大研究專案 資料法的內容與體系研究 立項號JZD 的成果。本書作者李愛軍 王毅探討了資料出境的法律原則和評估備案的實踐,對於資料處理者深刻理解資料出境監管初...

    新書推薦 長安街讀書社20231205幹部學習習新書單

    長安街讀書會 幹部習新書單 問題 。凝聚兩國人民力量,促進中美友好事業 在美國友好團體聯合歡迎宴會上的講話 出版社 人民出版社。作者 推薦部門 黨建組。當地時間月日晚,出席了美國友好團體在美國三藩市聯合舉行的歡迎晚宴,並發表了重要講話。凝聚兩國人民的力量,促進中美友好事業 在美國友好組織聯合歡迎宴會...

    新書推薦 長安街讀書社20231206幹部學習習新書單

    長安街讀書會 幹部習新書單 問題 。學會思考與對待 名學者談中華民族近代文明 出版社 人民出版社。作者 王萌 朱永新 謝春濤 王偉光 葉曉文 張豆瑋等 推薦部門 黨建組。由王萌 朱永新 謝春濤 王偉光 葉曉文 劉斌傑 李君如 李申明 顧海亮 林毅夫 江 盧新寧 黃一兵 孟滿等撰寫,長安街讀書會 張豆...