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 文字沿著線的方向,需要通過矩陣變化來進行 假定點的方向為逆時針方向,可以簡單的進行分類 類 向左 線段方向...