作用:
讀取DC的一些打印區(qū)域信息,主要是像素和英寸方面的數(shù)據(jù).
聲明:
GetDeviceCaps(int )
使用例子:
//所有像素?cái)?shù)
int pagecx=dc.GetDeviceCaps(HORZRES);
int pagecy=dc.GetDeviceCaps(VERTRES);
//即每英寸點(diǎn)數(shù)
short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
short cyInch = dc.GetDeviceCaps(LOGPIXELSY);
// 計(jì)算一個(gè)設(shè)備單位等于多少0.1mm
double scaleX = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC,LOGPIXELSX);
double scaleY = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC, LOGPIXELSY);
說明:
主要用到的參數(shù)見例子中的:HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY.總的來說是為了方便控制打印或重畫時(shí)的控制,如為了定制打印時(shí),一般依據(jù)的是物理的長(zhǎng)度,而不是像素,而DC一般是用像素的映射模式,所以需要一下轉(zhuǎn)換,上面這個(gè)函數(shù)就為這種轉(zhuǎn)換設(shè)計(jì)的.
GDI中有一個(gè)函數(shù)是GetDeviceCaps(),可以獲取一些關(guān)于設(shè)備的一些屬性,如HORZSIZE/HORZRES/LOGPIXELSX等。
以上三者的關(guān)系通常滿足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
HORZSIZE為屏幕水平尺寸(定為度量尺寸,以mm計(jì)),HORZRES為水平的像素總數(shù)(定為像素大小,平時(shí)所說的屏幕分辨率,但在這不這么稱呼。這里,分辨率定為“每英寸的像素?cái)?shù)”),LOGPIXELSX為邏輯像素(假設(shè)的每英寸的像素?cái)?shù),并不是剛才所說的實(shí)際的“分辨率”)。因此HORZSIZE也稱為邏輯寬度。
當(dāng)我們選擇“顯示”屬性里的大字體時(shí),LOGPIXELSX(通常分為96dpi與120dpi)變大了,這樣假設(shè)原來的字體為10磅,則原來的字體橫向所占像素(實(shí)際所占的像素?cái)?shù))為10*(1/72)*LOGPIXELSX,現(xiàn)在LOGPIXELSX變大了,則字體所占像素也大了,因此看起來字體大了。如果HORZRES不變的話,則HORZSIZE應(yīng)該變小。然后這是和Windows有關(guān)的,在16位OS中,HORZSIZE值是固定的。
在XP系統(tǒng)上驗(yàn)證了一下,發(fā)現(xiàn)HORZSIZE值與LOGPIXELSX的值也是不變的,如果改變HORZRES的話,則HORZSIZE會(huì)發(fā)生相應(yīng)變化,但LOGPIXELSX不變,一直是96。
驗(yàn)證數(shù)值是:當(dāng)HORZRES/VERTRES分別為800/600、1280/1024、1360/768時(shí),LOGPIXELSX/LOGPIXELSY一直為96,但HORZSIZE/VERTSIZE分別為320/240、375/300、400/320。于是個(gè)人斷定:LOGPIXELSX/LOGPIXELSY與所選的字體(如TrueType)有關(guān),windows默認(rèn)的字體LOGPIXELSX/LOGPIXELSY值是定的,選大字體或小字體取它們的值都是一樣的,而一些字體是不同的。而HORZSIZE/VERTSIZE與系統(tǒng)版本有關(guān),在有的系統(tǒng)中,這兩個(gè)值是適合此分辨率的標(biāo)準(zhǔn)顯示器的尺寸(定值,長(zhǎng)寬比與分辨率的比一樣),不是通過公式計(jì)算的,也不等于公式計(jì)算的值;而有的系統(tǒng)版本這兩個(gè)值為公式所得的值。
下邊是petzold那本書上的兩句(沒摘英文的):“
然而,在Windows NT中,用老的方法定義HORZSIZE和VERTSIZE值。這種方法與Windows的16位版本一致。HORZRES和VERTRES值仍然表示水平和垂直圖素的數(shù)值,LOGPIXELSX和LOGPIXELSY仍然與在「控制臺(tái)」的「顯示器」程序中選擇的字體有關(guān)。在Windows 98中,LOGPIXELSX和LOGPIXELSY的典型值是96和120 dpi,這取決于您選擇的是小字體還是大字體。
在Windows NT中的區(qū)別是HORZSIZE和VERTSIZE值固定表示標(biāo)準(zhǔn)顯示器大小。對(duì)于普通的顯示卡,取得的HORZSIZE和VERTSIZE值分別是320和240毫米。這些值是相同的,與選擇的圖素大小無關(guān)。因此,這些值與用HORZRES、VERTRES、LOGPIXELSX和LOGPIXELSY索引從GetDeviceCaps中得到的值不同。然而,可以用前面的公式計(jì)算在Windows 98下的HORZSIZE和VERTSIZE值。
”
HFONT CreateFont(
int nHeight, //字體的高度
int nWidth, //字體的寬度
int nEscapement, //字體顯示的角度
int nOrientation, //字體的角度
int nWeight, //字體的磅數(shù)
BYTE bItalic, //斜體字體
BYTE bUnderline, //帶下劃線的字體
BYTE cStrikeOut, //帶刪除線的字體
BYTE nCharSet, //所需的字符集
BYTE nOutPrecision, //輸出的精度
BYTE nClipPrecision, //裁減的精度
BYTE nQuality, //邏輯字體與輸出設(shè)備的實(shí)際
//字體之間的精度
BYTE nPitchAndFamily, //字體間距和字體集
LPCTSTR lpszFacename //字體名稱
);
示例:
/************************************************************************/
HFONT hFont;
HDC hDC;
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,"宋體");
SelectObject(hDC,hFont);
/************************************************************************/