青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sunshine Alike

半完美主義

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用鏈接

留言簿(15)

積分與排名

  • 積分 - 51074
  • 排名 - 451

最新隨筆

最新評論

Windows 系統中經常使用 GDI 進行文本輸出,從某種意義上來說,圖形和文本并沒有本質上的界限,很多時候 windows 把文本也當作圖形對待。在 windows 編程中,文本操作首先要獲得文本句柄,此外,還要設置字體,字符大小,字符顏色等有關屬性,并將它們選入設備環境。

??????????? 設置文本的設備環境

1.???????? 自定義字體
可以使用函數 CreateFont 自定義字體

HFONT hFont = HFONT CreateFont(

? int nHeight,? int nWidth,???????????????? // 字體高,寬

? int nEscapement,?????????? // 文字相對于頁底的角度

? int nOrientation,??????? // 每個文字相對于頁底的角度

? int fnWeight,???????? // 字體粗細,范圍 0~1000 400 為正常字體, 700 為黑體

? DWORD fdwItalic,?????????? // 取非零值則為斜體

? DWORD fdwUnderline,??????? // 取非零值則下劃線

? DWORD fdwStrikeOut,??????? // 取非零值則中劃線

? DWORD fdwCharSet,????????? // 字體所屬字符集

? DWORD fdwOutputPrecision,? // 輸出精度(一般取默認值)

? DWORD fdwClipPrecision,??? // 剪裁精度(一般取默認值)

? DWORD fdwQuality,????????? // 輸出質量(一般取默認值)

? DWORD fdwPitchAndFamily,?? // 字體間距及字體系列(一般取默認值)

? LPCTSTR lpszFace?????????? // 字體名

);
這個這個......以后這樣建字體還不累死才怪咧!而且貌似 API 里帶這么多惡心參數的方法還不少,了解一下就行了。一般情況下使用系統默認提供的字體就可以了。

2.???????? 字體句柄
windows
系統提供了七種基本字體:
ANSI_FIXED_FONT
DEFAULT_GUI_FONT ANSI_VAR_FONT
DEVICE_DEFAULT_FONT
SYSTEM_FIXED_FONT
SYSTEM_FONT
(系統默認字體)
調用函數 GetStockObject ()即可獲得系統默認字體
獲得字體之后,有時候還需要設置字體顏色和背景色,可以使用下面兩個函數:
SetTextColor????????? //
設置字體顏色
SetBkColor??????????? //
設置背景顏色

?

??????????? 文本輸出過程
設置了字體句柄,字體及字體顏色之后就可以把設置字體輸入到相應的設備上。 Windows 系統在文本輸出上有點小小的偷懶,把很多事情都丟給了程序員來做,應用程序必須自己管理換行,后續字符的位置等輸出格式。雖提供了編程的自由,但是程序員的工作量也變的非常大。

文本輸出過程包括獲取字體信息,格式化文本,調用函數輸出文本等過程。

1.???????? 獲取字體信息
應用程序在輸出字體之前必須先獲取當前字體的有關信息,在 windows 程序中通過調用 GetTextMetrics 函數來獲取當前字體的信息。其形式為:
GetTextMetrics(hdc, &tm);????????? //tm
TEXTMETRIC 結構
TEXTMETRIC
結構也非常復雜,其結構定義如下:

typedef struct tagTEXTMETRIC {

? LONG tmHeight;

? LONG tmAscent;

? LONG tmDescent;

? LONG tmInternalLeading;

? LONG tmExternalLeading;

? LONG tmAveCharWidth;

? LONG tmMaxCharWidth;

? LONG tmWeight;

? LONG tmOverhang;

? LONG tmDigitizedAspectX;

? LONG tmDigitizedAspectY;

? TCHAR tmFirstChar;

? TCHAR tmLastChar;

? TCHAR tmDefaultChar;

? TCHAR tmBreakChar;

? BYTE tmItalic;

? BYTE tmUnderlined;

? BYTE tmStruckOut;

? BYTE tmPitchAndFamily;

? BYTE tmCharSet;

} TEXTMETRIC, *PTEXTMETRIC;

具體各屬性不解釋,需要時可以查詢 MSDN

2.???????? 格式化文本
格式化處理一般針對兩種情況,一是文本行中確定后續文本的坐標,二是在換行時確定下一行的坐標。

(1)????? 確定后續文本坐標

應先獲取當前字符的寬度,通過計算字符串起始坐標與字符串寬度之和即可得到后續文本的起始坐標。
這里要使用到函數:
BOOL GetTextExtentPoint32

(

?????? HDC hdc,

?????? LPCTSTR lpsxString,??? // 指定的字符串

?????? int nLength,????????????????? // 字符串中字符數

?????? LPSIZE lpSize??????? // 字符串寬度及高度的 SIZE 數據結構

)

(2)????? 確定換行時文本坐標
通過計算當前文本行字符的高度與行間隔之和,即可得到換行時文本的起始坐標,而上述兩個數值均可通過獲取當前字體信息得到。

3.???????? 文本輸出

最常用的文本輸出函數就是 TextOut ,其原型如下:
BOOL TextOut

(

?????? HDC hdc,

?????? int x, int y,

?????? LPCTSTR lpString,

?????? int nCount

?????? )


??????????? 文本操作實例

因為代碼太長,全部貼出來頁面不好看。故只給出WndProc函數的實現,程序其它部分可以參考以前的筆記。

LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?iMsg,?
?????????????????????????UINT?wParam,?
?????????????????????????LONG?lParam)
{
????HDC?hdc;
????HFONT?hFont;????
//字體句柄
????PAINTSTRUCT?ps;
????TEXTMETRIC?tm;

????
char?lpszTx1[]?=?"紅色的SYSTEM字體:好好學習,天天向上!";
????
char?lpszTx2[]?=?"綠色自定義字體:保護眼睛,注意休息!";
????
char?lpszTx3[]?=?"藍色大號斜體并帶有下劃線!";
????
char?lpszTx4[]?=?"兩行文本輸出到同一行里!";
????
char?lpszTx5[]?=?"今天的學習就到這里,祝你成功!";

????
int?x?=?0,?y?=?0;
????SIZE?size;
????
switch(iMsg)
????{

????
case?WM_PAINT:
????????????hdc?
=?BeginPaint(hWnd,?&ps);

????????????SetTextColor(hdc,?RGB(
255,?0,?0));//文本為紅色
????????????TextOut(hdc,?x,?y,?lpszTx1,?strlen(lpszTx1));//字體輸出

????????????GetTextMetrics(hdc,?
&tm);????//獲取系統當前字體
????????????y?=?y?+?tm.tmHeight?+?tm.tmExternalLeading;//計算下一行坐標
????????????hFont?=?CreateFont
????????????????????????(
????????????????????????????
20,0,????//高度20,?寬取0表示由系統選擇最佳值
????????????????????????????0,?0,????//文本傾斜,與字體傾斜都為0
????????????????????????????FW_HEAVY,????//粗體
????????????????????????????0,0,0,????????//非斜體,無下劃線,無中劃線
????????????????????????????GB2312_CHARSET,????//字符集
????????????????????????????OUT_DEFAULT_PRECIS,????????
????????????????????????????CLIP_DEFAULT_PRECIS,????????
????????????????????????????DEFAULT_QUALITY,????????
//一系列的默認值
????????????????????????????DEFAULT_PITCH?|?FF_DONTCARE,????
????????????????????????????
"自定義字體"????//字體名稱
????????????????????????);
????????????SetTextColor(hdc,?RGB(
0,?255,?0));
????????????SelectObject(hdc,?hFont);
????????????TextOut(hdc,?x,?y,?lpszTx2,?strlen(lpszTx2));

????????????GetTextMetrics(hdc,?
&tm);????//將當前字體信息選入tm結構中
????????????y?=?y?+?tm.tmHeight?+?15?*?tm.tmExternalLeading;//5倍行間距
????????????hFont?=?CreateFont
????????????????????????(
????????????????????????????
40,0,????//高度40,?寬取0表示由系統選擇最佳值
????????????????????????????0,?0,????//文本傾斜,與字體傾斜都為0
????????????????????????????FW_NORMAL,????
????????????????????????????
1,1,0,????????//斜體,下劃線,無中劃線
????????????????????????????GB2312_CHARSET,????//字符集
????????????????????????????OUT_DEFAULT_PRECIS,????
????????????????????????????CLIP_DEFAULT_PRECIS,????
????????????????????????????DEFAULT_QUALITY,????????
//一系列的默認值
????????????????????????????DEFAULT_PITCH?|?FF_DONTCARE,????
????????????????????????????
"大號字體"????//字體名稱
????????????????????????);
????????????SetTextColor(hdc,?RGB(
0,?0,?255));
????????????SetBkColor(hdc,?RGB(
160,?160,?160));//設置背景顏色
????????????SelectObject(hdc,?hFont);
????????????TextOut(hdc,?x,?y,?lpszTx3,?strlen(lpszTx3));
????????????
//獲取系統提供的字體
????????????hFont?=?(HFONT)GetStockObject(SYSTEM_FIXED_FONT);
????????????y?
=?y?+?tm.tmHeight?+?25?*?tm.tmExternalLeading;
????????????SetTextColor(hdc,?RGB(
0,?0,?0));
????????????SetBkColor(hdc,?RGB(
255,?255,?255));
????????????SelectObject(hdc,?hFont);
????????????TextOut(hdc,?x,?y,?lpszTx4,?strlen(lpszTx4));
????????????GetTextExtentPoint32(hdc,?lpszTx4,?strlen(lpszTx4),?
&size);//計算高寬
????????????x?=?x?+?size.cx;
????????????TextOut(hdc,?x?,?y?,lpszTx5,?strlen(lpszTx5));

????????????EndPaint(hWnd,?
&ps);
????????????DeleteObject(hFont);
????????????
break;
????
case?WM_DESTROY:
????????PostQuitMessage(
0);
????????
break;
????
default:
????????
return?DefWindowProc(hWnd,?iMsg,?wParam,?lParam);
????}
????
return?0;
}


posted on 2009-03-11 16:41 Sunshine Alike 閱讀(7228) 評論(1)  編輯 收藏 引用 所屬分類: WinAPI應用程序

Feedback

# re: WindowsAPI學習筆記三 — 字體設置與輸出 2009-03-12 08:53 擇日而亡
繼續。。。
  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品乱码一区二三区小蝌蚪| 国产亚洲aⅴaaaaaa毛片| 亚洲电影下载| 国产精品久久久久aaaa| 久久久久久网| 香蕉尹人综合在线观看| 亚洲免费av网站| 亚洲激情小视频| 久久本道综合色狠狠五月| 亚洲深夜福利网站| 国外成人在线| 好吊色欧美一区二区三区四区| 欧美午夜精彩| 国产精品高潮呻吟久久av黑人| 欧美日韩大片一区二区三区| 欧美jizz19hd性欧美| 免费成人高清| 欧美国产日产韩国视频| 欧美激情中文字幕一区二区| 欧美激情精品久久久久久黑人| 欧美高清不卡| 欧美午夜在线| 国产人成精品一区二区三| 国产亚洲一区二区在线观看| 激情久久五月| 亚洲激情图片小说视频| 99亚洲视频| 欧美一级欧美一级在线播放| 老司机aⅴ在线精品导航| 亚洲一区二区三区四区中文 | 久久综合影音| 欧美成人免费一级人片100| 欧美大成色www永久网站婷| 亚洲第一区在线观看| 欧美v国产在线一区二区三区| 校园激情久久| 欧美粗暴jizz性欧美20| 99国产精品一区| 欧美专区一区二区三区| 久久久久久久97| 欧美屁股在线| 国产午夜精品理论片a级大结局 | 国产精品九色蝌蚪自拍| 国内成人精品2018免费看| 亚洲人成网站在线观看播放| 亚洲欧美综合v| 欧美成年人视频| 中文一区二区在线观看| 麻豆国产精品777777在线| 欧美日韩视频第一区| 精品白丝av| 亚洲欧美激情一区| 另类春色校园亚洲| 99re热这里只有精品视频| 久久精品成人欧美大片古装| 欧美日韩免费观看一区| 一区二区视频欧美| 午夜精品福利一区二区蜜股av| 欧美成人一区二区在线| 午夜精品久久久久久久99水蜜桃 | 日韩亚洲一区在线播放| 久久午夜影视| 亚洲尤物视频在线| 欧美另类专区| 伊人久久综合| 欧美一区免费视频| 一区二区三区 在线观看视频| 老司机午夜精品视频在线观看| 欧美激情国产精品| 国产在线精品成人一区二区三区 | 久久漫画官网| 亚洲欧美日本另类| 欧美久久精品午夜青青大伊人| 尤妮丝一区二区裸体视频| 欧美一区二区三区四区视频| 麻豆视频一区二区| 亚洲毛片网站| 久久综合中文字幕| 国产日韩精品久久| 午夜久久久久| 亚洲欧美激情视频在线观看一区二区三区| 欧美日韩成人免费| 亚洲国产欧美一区二区三区久久 | 午夜在线成人av| 欧美视频在线看| 亚洲无亚洲人成网站77777| 亚洲欧洲一区二区三区| 美女露胸一区二区三区| 亚洲国产日韩一级| 亚洲高清激情| 欧美日本一道本| 亚洲一区日本| 亚洲国产另类久久精品| 欧美日韩国产精品一卡| 亚洲一品av免费观看| 一区二区三区国产精品| 国产精品多人| 久久久av网站| 久久久久久久波多野高潮日日| 一区二区视频免费完整版观看| 欧美激情a∨在线视频播放| 欧美国产另类| 亚洲欧美综合v| 欧美一级网站| 亚洲欧洲日本一区二区三区| 亚洲人成高清| 国产精品视频999| 久久亚洲色图| 欧美精品少妇一区二区三区| 亚洲欧美视频在线| 久久免费视频这里只有精品| 亚洲精品一区二区三区不| av不卡在线看| 精品二区久久| 欧美成人午夜激情在线| 欧美理论视频| 久久国产精彩视频| 麻豆视频一区二区| 亚洲自拍啪啪| 久久久久五月天| 一区二区久久久久| 欧美伊人久久久久久久久影院| 亚洲成人直播| 亚洲日本成人网| 激情成人在线视频| 亚洲午夜av| 亚洲人成网站999久久久综合| 亚洲视频一二| 国产欧美日韩在线播放| 欧美国产精品久久| 午夜视频一区在线观看| 妖精成人www高清在线观看| 亚洲欧美成人一区二区在线电影| 有码中文亚洲精品| 91久久久久久| 欧美成人午夜剧场免费观看| 国产精品爽爽爽| 亚洲香蕉成视频在线观看| 亚洲少妇最新在线视频| 欧美丝袜一区二区三区| av成人福利| 欧美一区二区日韩| 国产日韩在线视频| 久久成人av少妇免费| 久久全球大尺度高清视频| 狠狠网亚洲精品| 蜜臀久久99精品久久久久久9| 欧美电影免费观看高清| 亚洲精品一区在线观看香蕉| 欧美日本久久| 亚洲一区二区视频在线观看| 欧美综合77777色婷婷| 悠悠资源网亚洲青| 欧美韩国一区| 亚洲一区在线免费| 久久久之久亚州精品露出| 亚洲电影激情视频网站| 欧美日韩成人| 久久精品国产91精品亚洲| 亚洲国产精品99久久久久久久久| 中文久久精品| 精品99一区二区| 欧美精品在线观看| 亚洲欧美一区二区在线观看| 老司机一区二区| 亚洲香蕉在线观看| 国语自产精品视频在线看一大j8| 欧美freesex交免费视频| 在线亚洲欧美视频| 蜜臀av国产精品久久久久| 一本色道久久综合亚洲精品不卡 | 久久精品成人一区二区三区蜜臀| 欧美va天堂| 亚洲免费在线播放| 亚洲国产另类 国产精品国产免费| 欧美人与性动交cc0o| 午夜一区二区三区在线观看| 欧美激情一区二区在线 | 欧美电影免费观看高清完整版| 99国产精品久久| 免费高清在线视频一区·| 亚洲一区二区三区视频| 一区在线播放| 国产九色精品成人porny| 欧美成人亚洲| 久久精品免视看| 亚洲一级二级在线| 亚洲欧洲精品一区二区三区不卡 | 99国产精品视频免费观看| 国产午夜精品全部视频播放| 欧美激情性爽国产精品17p| 先锋影音久久久| 一区二区高清视频| 欧美色123| 午夜精品一区二区三区四区| 亚洲国产成人久久综合一区| 久久国内精品视频| 亚洲男女毛片无遮挡| 一本色道精品久久一区二区三区| 在线观看日韩av|