TextOut顯示文字的GDI函式

2021-08-29 17:13:11 字數 3341 閱讀 5615

textout是用於顯示文字的最常用的gdi函式。語法是:

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

以下將詳細地討論這個函式。

第乙個引數是裝置內容代號,它既可以是getdc的傳回值,也可以是在處理wm_paint訊息時beginpaint的傳回值。

裝置內容的屬性控制了被顯示的字串的特徵。例如,裝置內容中有乙個屬性指定文字顏色,內定顏色為黑色;內定裝置內容還定義了白色的背景。在程式向顯示器輸出文字時,windows使用這個背景色來填入字元周圍的矩形空間(稱為「字元框」)。

該 文字背景色與定義視窗類別時設定的背景並不相同。視窗類別中的背景是乙個畫刷,它是一種純色或者非純色組成的畫刷,windows用它來擦除顯示區域,它 不是裝置內容結構的一部分。在定義視窗類別結構時,大多數windows應用程式使用white_brush,以便內定裝置內容中的內定文字背景顏色與 windows用以擦除顯示區域背景的畫刷顏色相同。

pstext引數是指向字串的指標,ilength是字串中字元的個數。如果 pstext指向unicode字串,則字串中的位元組數就是ilength值的兩倍。字串中不能包含任何ascii控制字元(如回車、換行、製表或退 格),windows會將這些控制字元顯示為實心塊。text0ut不識別作為字串結束標誌的內容為零的位元組(對於unicode,是乙個短整數型態的 0),而需要由nlength引數指明長度。

textout中的x和y定義顯示區域內字串的開始位置,x是水平位置,y是垂直位置。 字串中第乙個字元的左上角位於座標點(x,y)。在內定的裝置內容中,原點(x和y均為0的點)是顯示區域的左上角。如果在textout中將x和y設為 0,則將從顯示區域左上角開始輸出字串。

當您閱讀gdi繪圖函式(例如textout)的檔案時,就會發現傳遞給函式的座標常常被稱 為「邏輯座標」。在第五章會詳細地解釋這種情況。現在請注意,windows有許多「座標對映方式」,它們用來控制gdi函式指定的邏輯座標轉換為顯示器 的實際圖素座標的方式。對映方式在裝置內容中定義,內定對映方式是mm_text(使用wingdi.h中定義的識別字)。在mm_text對映方式下, 邏輯單位與實際單位相同,都是圖素;x的值從左向右遞增,y的值從上向下遞增(參看圖4-2)。mm_text座標系與windows在 paintstruct結構中定義無效矩形時使用的座標系相同,這為我們帶來了很多方便(但是,其他對映方式並非如此)。

裝置內容也 定義了乙個剪裁區域。您已經看到,對於從getdc取得的裝置內容代號,內定剪裁區域是整個顯示區域;而對於從beginpaint取得的裝置內容代號, 則為無效區域。windows不會在剪裁區域之外的任何位置顯示字串。如果乙個字元有一部分在剪裁區域外,則windows將只顯示此區域內的那部分。要 想將輸出寫到視窗的顯示區域之外不是那麼容易的,所以不用擔心會無意間出現這種事情。

lresultcallback

wndproc

(hwnd

hwnd

,uint

message

,wparam

wparam

,lparam

lparam

)

break

;

case

wm_paint

:

hdc

=beginpaint

(hwnd,&

ps);

// todo: add any drawing code here...

rectrt;

getclientrect

(hwnd,&

rt);

drawtext

(hdc

,szhello

,strlen

(szhello),&

rt,dt_left

);

//textout wingdi.h

//wingdiapi bool winapi textouta(hdc, int, int, lpcstr, int);

//wingdiapi bool winapi textoutw(hdc, int, int, lpcwstr, int);

textout

(hdc,0

,15,szhello

,strlen

(szhello

));

endpaint

(hwnd,&

ps);

break

;

case

wm_destroy

:

postquitmessage(0

);

break

;

default

:

return

defwindowproc

(hwnd

,message

,wparam

,lparam

);

}

return0;

}

TextOut顯示多行文字的方法

發信人 enjoysoft enjoy 享受生活 信區 vc 標 題 re 請教setdlgitemtext與textout的用法區別 發信站 飲水思源 2006年10月12日21 55 43 星期四 這個做法比較妥當,因為一旦視窗被重畫,你用cclientdc畫的字串就不見了。響應wm paint...

GDI 入門(三 GDI 中文字操作)

三 gdi 中文字操作 using system.drawing using system.drawing.drawing2d using system.drawing.text private void button1 click object sender,eventargs e private...

GDI 線段 文字 定位的問題

遇到乙個看起來很簡單的問題 進一步的抽象是 1 根據文字的長度和高度,以及兩個點,來獲得文字的定位點 左上角點 的 2 讓文字沿著線的方向 關鍵點分析 1 點的位置通過向量平移的方式來獲得 2 文字沿著線的方向,需要通過矩陣變化來進行 假定點的方向為逆時針方向,可以簡單的進行分類 類 向左 線段方向...