• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            CDC::GetDeviceCaps()物理長度與屏幕像素間的轉換

            作用:
            讀取DC的一些打印區域信息,主要是像素和英寸方面的數據.

            聲明:
            GetDeviceCaps(int )

            使用例子:
            //所有像素數
            int pagecx=dc.GetDeviceCaps(HORZRES);
            int pagecy=dc.GetDeviceCaps(VERTRES);

            //即每英寸點數
            short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
            short cyInch = dc.GetDeviceCaps(LOGPIXELSY);

            // 計算一個設備單位等于多少0.1mm
            double scaleX = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC,LOGPIXELSX);
            double scaleY = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC, LOGPIXELSY);


            說明:
            主要用到的參數見例子中的:HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY.總的來說是為了方便控制打印或重畫時的控制,如為了定制打印時,一般依據的是物理的長度,而不是像素,而DC一般是用像素的映射模式,所以需要一下轉換,上面這個函數就為這種轉換設計的.

             

             

            GDI中有一個函數是GetDeviceCaps(),可以獲取一些關于設備的一些屬性,如HORZSIZE/HORZRES/LOGPIXELSX等。
                以上三者的關系通常滿足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
                HORZSIZE為屏幕水平尺寸(定為度量尺寸,以mm計),HORZRES為水平的像素總數(定為像素大小,平時所說的屏幕分辨率,但在這不這么稱呼。這里,分辨率定為“每英寸的像素數”),LOGPIXELSX為邏輯像素(假設的每英寸的像素數,并不是剛才所說的實際的“分辨率”)。因此HORZSIZE也稱為邏輯寬度。
                當我們選擇“顯示”屬性里的大字體時,LOGPIXELSX(通常分為96dpi與120dpi)變大了,這樣假設原來的字體為10磅,則原來的字體橫向所占像素(實際所占的像素數)為10*(1/72)*LOGPIXELSX,現在LOGPIXELSX變大了,則字體所占像素也大了,因此看起來字體大了。如果HORZRES不變的話,則HORZSIZE應該變小。然后這是和Windows有關的,在16位OS中,HORZSIZE值是固定的。
                在XP系統上驗證了一下,發現HORZSIZE值與LOGPIXELSX的值也是不變的,如果改變HORZRES的話,則HORZSIZE會發生相應變化,但LOGPIXELSX不變,一直是96。
                驗證數值是:當HORZRES/VERTRES分別為800/600、1280/1024、1360/768時,LOGPIXELSX/LOGPIXELSY一直為96,但HORZSIZE/VERTSIZE分別為320/240、375/300、400/320。于是個人斷定:LOGPIXELSX/LOGPIXELSY與所選的字體(如TrueType)有關,windows默認的字體LOGPIXELSX/LOGPIXELSY值是定的,選大字體或小字體取它們的值都是一樣的,而一些字體是不同的。而HORZSIZE/VERTSIZE與系統版本有關,在有的系統中,這兩個值是適合此分辨率的標準顯示器的尺寸(定值,長寬比與分辨率的比一樣),不是通過公式計算的,也不等于公式計算的值;而有的系統版本這兩個值為公式所得的值。
                下邊是petzold那本書上的兩句(沒摘英文的):“

            然而,在Windows NT中,用老的方法定義HORZSIZE和VERTSIZE值。這種方法與Windows的16位版本一致。HORZRES和VERTRES值仍然表示水平和垂直圖素的數值,LOGPIXELSX和LOGPIXELSY仍然與在「控制臺」的「顯示器」程序中選擇的字體有關。在Windows 98中,LOGPIXELSX和LOGPIXELSY的典型值是96和120 dpi,這取決于您選擇的是小字體還是大字體。

            在Windows NT中的區別是HORZSIZE和VERTSIZE值固定表示標準顯示器大小。對于普通的顯示卡,取得的HORZSIZE和VERTSIZE值分別是320和240毫米。這些值是相同的,與選擇的圖素大小無關。因此,這些值與用HORZRES、VERTRES、LOGPIXELSX和LOGPIXELSY索引從GetDeviceCaps中得到的值不同。然而,可以用前面的公式計算在Windows 98下的HORZSIZE和VERTSIZE值。

             

             

            HFONT CreateFont(
                             int nHeight,           //字體的高度
                            
            int nWidth,            //字體的寬度
                             int nEscapement,       //字體顯示的角度
                             int nOrientation,      //字體的角度
                             int nWeight,           //字體的磅數
                             BYTE bItalic,          //斜體字體
                             BYTE bUnderline,       //帶下劃線的字體
                             BYTE cStrikeOut,       //帶刪除線的字體
                             BYTE nCharSet,         //所需的字符集
                             BYTE nOutPrecision,    //輸出的精度
                             BYTE nClipPrecision,   //裁減的精度
                             BYTE nQuality,         //邏輯字體與輸出設備的實際
                                                    //字體之間的精度
                             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);
            /************************************************************************/

            posted on 2011-08-26 14:46 wrh 閱讀(1612) 評論(0)  編輯 收藏 引用

            導航

            <2009年2月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            1234567

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            午夜精品久久久久成人| 国内精品久久久久影院日本| 狠狠色丁香婷婷综合久久来| 久久久中文字幕| 久久强奷乱码老熟女网站| 成人免费网站久久久| 久久精品国产99久久香蕉| 久久精品国产亚洲AV香蕉| 亚洲AV无码成人网站久久精品大| 久久99精品国产99久久6| 久久se精品一区二区| 日韩电影久久久被窝网| 精品久久久久久无码中文字幕一区 | 久久久久亚洲av毛片大| 久久99精品久久久久婷婷| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲精品无码久久久久sm| 伊人丁香狠狠色综合久久| 久久精品国产精品亚洲毛片| 伊人久久大香线蕉av一区| 伊人久久大香线蕉综合热线| 99久久精品免费观看国产| 亚洲色欲久久久综合网| 亚洲欧美精品一区久久中文字幕| 亚洲国产一成久久精品国产成人综合 | 国产精品成人久久久| 国产成人精品三上悠亚久久| 国产成人综合久久久久久| 国产精品久久久久久福利漫画 | 国产91色综合久久免费| 无码AV波多野结衣久久| 99久久香蕉国产线看观香| 久久本道久久综合伊人| 亚洲国产精品久久久久婷婷软件| 久久国产欧美日韩精品| 浪潮AV色综合久久天堂| 国产激情久久久久影院| 日本久久久精品中文字幕| 狠狠色丁香婷婷综合久久来 | 色婷婷久久综合中文久久蜜桃av | 91久久九九无码成人网站|