一、引言
在Delphi開發(fā)環(huán)境中,文字的輸出效果一般都是頭上腳下的"正統(tǒng)"字符,如何輸出帶有一定傾斜角度的文字以達到特殊的顯示效果呢?筆者在制作公章輔助設計軟件過程中,通過Windows圖形設備接口函數(shù)實現(xiàn)了文字呈輻射狀分布的功能。
Windows圖形設備接口(Graphics Device Interface)是Windows系統(tǒng)中的圖形核心模塊,以GDI.EXE形式提供給開發(fā)者使用。Windows中的圖形基本上是由GDI.EXE中的函數(shù)來處理的,它的主要特點是在輸出設備上支持與設備無關的圖形。在GDI函數(shù)中,文本亦被視為一種圖形對象,但并非簡單的幾何方式繪制,因為文本的輸出涉及到字體。
根據Windows中字體所用的技術可以分為3類字體:光柵字體,矢量字體和TrueType字體。其中,True Type字體的主要優(yōu)點之一是可被任意放大或旋轉,在任何尺寸上,都可以達到較為滿意的顯示效果,尤其,其允許在顯示器和打印機上使用相同的字體。Windows為應用程序之所以能夠提供設備無關性是通過采用讓應用程序創(chuàng)建邏輯對象從而使用物理對象的方法實現(xiàn)的,同樣,對于字體的使用也是一樣的:應用程序在使用字體時,首先創(chuàng)建邏輯字體,以便Windows從設備中選擇一種與之匹配的物理字體,從而達到較為準確的輸出效果。
二、內容
使用Windows GDI函數(shù)實現(xiàn)文字的傾斜效果的基本步驟如下:
1.取得設備描述表或圖形設備的句柄: HDC GetDc(Thandle AWinHandle);
2.創(chuàng)建邏輯字體并設置文字的傾斜度: HFont CreateFontIndirect(LogFont Far *Iplf),
其中,Iplf為tagLogFont結構體,通過設置其lfEscapement可設置文字的傾斜度(為實際度數(shù)的10倍),例如:0度-正常字體,450度-左上45度傾斜,900度-正向左,等。
3.將邏輯字體選入設備列表,從而,Windows選擇與之匹配的物理字體,并且新的字體取代舊的字體:
HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);
注:在此之前現(xiàn)
4.使用當前設備的字體進行文字輸出: BOOL TextOut(HDC hdc, int PosX, int PosY, LPCTSTR OutStr, int StrLength);
5.釋放不再使用的圖形對象(這里為邏輯字體): BOOL DeleteObject(HGDIOBJ hObject);
在Delphi開發(fā)環(huán)境中,文字的輸出效果一般都是頭上腳下的"正統(tǒng)"字符,如何輸出帶有一定傾斜角度的文字以達到特殊的顯示效果呢?筆者在制作公章輔助設計軟件過程中,通過Windows圖形設備接口函數(shù)實現(xiàn)了文字呈輻射狀分布的功能。
Windows圖形設備接口(Graphics Device Interface)是Windows系統(tǒng)中的圖形核心模塊,以GDI.EXE形式提供給開發(fā)者使用。Windows中的圖形基本上是由GDI.EXE中的函數(shù)來處理的,它的主要特點是在輸出設備上支持與設備無關的圖形。在GDI函數(shù)中,文本亦被視為一種圖形對象,但并非簡單的幾何方式繪制,因為文本的輸出涉及到字體。
根據Windows中字體所用的技術可以分為3類字體:光柵字體,矢量字體和TrueType字體。其中,True Type字體的主要優(yōu)點之一是可被任意放大或旋轉,在任何尺寸上,都可以達到較為滿意的顯示效果,尤其,其允許在顯示器和打印機上使用相同的字體。Windows為應用程序之所以能夠提供設備無關性是通過采用讓應用程序創(chuàng)建邏輯對象從而使用物理對象的方法實現(xiàn)的,同樣,對于字體的使用也是一樣的:應用程序在使用字體時,首先創(chuàng)建邏輯字體,以便Windows從設備中選擇一種與之匹配的物理字體,從而達到較為準確的輸出效果。
二、內容
使用Windows GDI函數(shù)實現(xiàn)文字的傾斜效果的基本步驟如下:
1.取得設備描述表或圖形設備的句柄: HDC GetDc(Thandle AWinHandle);
2.創(chuàng)建邏輯字體并設置文字的傾斜度: HFont CreateFontIndirect(LogFont Far *Iplf),
其中,Iplf為tagLogFont結構體,通過設置其lfEscapement可設置文字的傾斜度(為實際度數(shù)的10倍),例如:0度-正常字體,450度-左上45度傾斜,900度-正向左,等。
3.將邏輯字體選入設備列表,從而,Windows選擇與之匹配的物理字體,并且新的字體取代舊的字體:
HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);
注:在此之前現(xiàn)
4.使用當前設備的字體進行文字輸出: BOOL TextOut(HDC hdc, int PosX, int PosY, LPCTSTR OutStr, int StrLength);
5.釋放不再使用的圖形對象(這里為邏輯字體): BOOL DeleteObject(HGDIOBJ hObject);