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

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ⅴ| 欧美精品aa| 亚洲高清激情| 久久精品一区二区三区不卡牛牛| 欧美影院在线| 久久夜色精品国产噜噜av| 久久先锋影音| 亚洲韩国精品一区| 中文国产一区| 久久精品99无色码中文字幕| 久久综合成人精品亚洲另类欧美| 免费短视频成人日韩| 欧美区国产区| 国产日韩亚洲欧美| 亚洲国产精品久久精品怡红院 | 国产一区二区三区自拍| 国产一区二区三区直播精品电影| 一区久久精品| 亚洲尤物在线视频观看| 久久久久久尹人网香蕉| 亚洲人成小说网站色在线| 亚洲在线一区二区三区| 久久人人97超碰国产公开结果| 欧美日韩国产一级片| 国产又爽又黄的激情精品视频| 亚洲精品乱码久久久久久按摩观| 西瓜成人精品人成网站| 亚洲国产成人久久综合一区| 午夜视频一区在线观看| 欧美日韩不卡| 亚洲国产精品成人综合色在线婷婷| 亚洲一区二区精品在线| 欧美成人官网二区| 午夜久久影院| 国产精品xnxxcom| 亚洲欧洲日韩综合二区| 久久精品卡一| 亚洲一区二区在线| 欧美日韩在线一区二区| 亚洲欧洲在线免费| 亚洲第一精品在线| 欧美色视频一区| 国产亚洲精品美女| 亚洲曰本av电影| 亚洲国产精品女人久久久| 午夜欧美精品| 欧美特黄一级| 一区二区三区国产在线观看| 欧美成人日韩| 久久久久久自在自线| 国产日韩欧美一区在线| 亚洲自拍电影| 制服诱惑一区二区| 欧美日韩视频| 亚洲午夜激情免费视频| 亚洲精选一区| 欧美激情一区二区三区成人| 亚洲黄色大片| 欧美激情精品| 欧美国产日韩一区| 亚洲巨乳在线| 日韩视频不卡| 国产精品成人午夜| 午夜日韩在线| 香蕉久久国产| 精品成人国产| 亚洲国产91色在线| 欧美激情bt| 亚洲一本视频| 亚洲男人av电影| 国产亚洲一区二区在线观看| 久久久久久久网站| 狂野欧美激情性xxxx欧美| 最新亚洲电影| 99精品视频网| 国产精品视频男人的天堂| 欧美一级网站| 久久久久国产免费免费| 亚洲激情欧美激情| 日韩午夜在线电影| 国产精品综合不卡av| 久久精品在线| 欧美福利在线| 亚洲欧美中文日韩v在线观看| 亚久久调教视频| 1769国内精品视频在线播放| 亚洲另类春色国产| 国产美女一区| 亚洲国产精彩中文乱码av在线播放| 欧美黑人在线观看| 午夜在线成人av| 免费久久99精品国产自| 亚洲深夜福利网站| 欧美在线资源| 国产精品99久久久久久久久久久久 | 噜噜噜久久亚洲精品国产品小说| 亚洲国产欧美一区| 99国产精品自拍| 久久成人国产精品| 日韩视频在线播放| 亚洲图色在线| 亚洲三级视频| 香蕉久久久久久久av网站 | 夜夜爽av福利精品导航| 亚洲永久精品国产| 亚洲精品乱码久久久久久蜜桃麻豆| 在线视频亚洲欧美| 亚洲三级观看| 久久久777| 亚洲欧美伊人| 欧美激情综合色| 老司机精品视频网站| 国产精品女同互慰在线看| 亚洲国产女人aaa毛片在线| 国产午夜精品久久久久久免费视| 亚洲精品久久久久| 1769国产精品| 欧美在线在线| 亚洲欧美网站| 欧美日一区二区在线观看 | 久久久人人人| 国产欧美日韩视频一区二区三区| 亚洲精品一区二区三区99| 在线不卡亚洲| 久久精品人人做人人爽| 欧美在线看片| 国产精品卡一卡二| 一区二区三区视频观看| 在线中文字幕不卡| 欧美日韩国产一区二区三区地区| 欧美成人一区二区三区| 韩日精品中文字幕| 久久se精品一区精品二区| 久久国产精品99国产精| 国产精品私人影院| 亚洲自拍啪啪| 久久激情中文| 精品动漫3d一区二区三区免费版 | 一区二区三区精品久久久| 免费成人高清| 欧美国产先锋| 亚洲人成77777在线观看网| 美日韩在线观看| 亚洲国产精品传媒在线观看| 亚洲精品日本| 欧美三级网址| 亚洲午夜羞羞片| 久久久久综合| 亚洲国内精品| 欧美性感一类影片在线播放| 99热精品在线| 久久九九免费| 亚洲欧洲精品天堂一级| 欧美日本三级| 亚洲一区在线免费| 久热国产精品| 日韩小视频在线观看专区| 亚洲欧美一区二区三区极速播放 | 午夜精品网站| 国产精品久久亚洲7777| 午夜精品久久久久| 久久综合色88| 一本久道久久综合狠狠爱| 欧美性开放视频| 久久99伊人| 亚洲精品欧洲| 久久精品一区二区三区四区| 91久久线看在观草草青青| 欧美日韩亚洲91| 久久精品视频在线免费观看| 亚洲欧洲日本一区二区三区| 亚洲欧美日韩国产成人精品影院| 国产综合久久久久久鬼色| 欧美成人精品h版在线观看| 一区二区三区久久精品| 免费国产自线拍一欧美视频| 亚洲天堂网在线观看| 激情综合自拍| 国产精品日韩欧美| 欧美久久久久久久久久| 欧美在线视频观看| 亚洲最新在线视频| 欧美大片免费看| 欧美一区二区三区免费看| 91久久精品网| 国产欧美一区二区精品忘忧草| 免费看av成人| 欧美一区二区精品久久911| 日韩视频中文| 欧美激情麻豆| 久久亚洲精品欧美| 午夜国产一区| 亚洲一区二区黄| 日韩视频在线观看国产| 一区二区三区在线免费播放| 国产精品久久久一区麻豆最新章节 | 免费成人你懂的| 欧美在线视频免费| 亚洲砖区区免费| 宅男精品视频|