




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第第5講講 文本與字體文本與字體 使用定義好的與設(shè)備無關(guān)的使用定義好的與設(shè)備無關(guān)的字體字體集,集, windows就能維就能維護(hù)它的設(shè)備無關(guān)性,提供護(hù)它的設(shè)備無關(guān)性,提供“所見即所得所見即所得”的好處,即屏幕的好處,即屏幕所見與設(shè)備輸出的文本是一樣的所見與設(shè)備輸出的文本是一樣的 windows經(jīng)常使用經(jīng)常使用gdi進(jìn)行文本輸出。在進(jìn)行文本輸出。在一定意義上,任何內(nèi)容一定意義上,任何內(nèi)容都可以看成都可以看成圖形實(shí)體圖形實(shí)體圖形和文本并圖形和文本并沒有明顯的界限沒有明顯的界限文本文本操作操作先要獲得文本句柄先要獲得文本句柄設(shè)置字體、字符大小、字符顏色等有關(guān)屬性設(shè)置字體、字符大小、字符顏色等有關(guān)屬
2、性將這些屬性選入設(shè)備環(huán)境將這些屬性選入設(shè)備環(huán)境25.1 設(shè)置文本的設(shè)備環(huán)境設(shè)置文本的設(shè)備環(huán)境字體字體邏輯字體邏輯字體定義的字符集是定義的字符集是設(shè)備無關(guān)設(shè)備無關(guān)的,它可以精確標(biāo)度,因的,它可以精確標(biāo)度,因此得到廣泛應(yīng)用此得到廣泛應(yīng)用描述所要顯示描述所要顯示的文本的大小、的文本的大小、類型和外形類型和外形物理字體物理字體是為特殊設(shè)備設(shè)計(jì)的,因而是是為特殊設(shè)備設(shè)計(jì)的,因而是設(shè)備相關(guān)設(shè)備相關(guān)的的win 系統(tǒng)系統(tǒng)提供了七種提供了七種基本字體基本字體字體字體 說明說明ansi_fixed ansi標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的固定固定寬度的字體寬度的字體ansi_var ansi標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的可變可變寬度的字體寬度的字體d
3、efault_gui當(dāng)前當(dāng)前gui的缺省字體的缺省字體oem_fixed 由標(biāo)準(zhǔn)原設(shè)備制造商由標(biāo)準(zhǔn)原設(shè)備制造商(oem)提供提供device_default當(dāng)前圖形設(shè)備的字體當(dāng)前圖形設(shè)備的字體system_fixedwindows的標(biāo)準(zhǔn)的標(biāo)準(zhǔn)固定固定寬度的字體寬度的字體system windows提供的提供的可變可變寬度的字體寬度的字體常作為缺省字體常作為缺省字體 winwin用它作為用它作為系統(tǒng)界面字體系統(tǒng)界面字體3(1) (1) 定義字體句柄變量:定義字體句柄變量: hfont hf; /hfhfont hf; /hf為字體的句柄為字體的句柄(2) (2) 調(diào)函數(shù)調(diào)函數(shù)getstockob
4、jectgetstockobject獲得系統(tǒng)字體句柄獲得系統(tǒng)字體句柄 它返回的是系統(tǒng)的缺省字體它返回的是系統(tǒng)的缺省字體 hf= getstockobject( )hf= getstockobject( ):(3) (3) 調(diào)用函數(shù)調(diào)用函數(shù)selectobjectselectobject將字體選入設(shè)備環(huán)將字體選入設(shè)備環(huán)境境 selectobject(hdc,hf)selectobject(hdc,hf);選選擇擇系系統(tǒng)統(tǒng)字字體體的的步步驟驟45.1.2 創(chuàng)建自定義字體創(chuàng)建自定義字體 若需要定義系統(tǒng)以外的字體,可以調(diào)用函數(shù)若需要定義系統(tǒng)以外的字體,可以調(diào)用函數(shù)greatefont自行創(chuàng)建自行創(chuàng)建
5、hfont=createfont hfont=createfont ( (int nheight, int nheight, /字體高度,字體高度,0 0采用系統(tǒng)缺省值,使用邏輯單位采用系統(tǒng)缺省值,使用邏輯單位 int nwidth,int nwidth, /字體寬度,取字體寬度,取0 0則由系統(tǒng)根據(jù)高寬比取最佳值則由系統(tǒng)根據(jù)高寬比取最佳值 int nescapement, int nescapement, /每每行行文字相對于頁底的角度,單位為文字相對于頁底的角度,單位為0.10.1度度 int norienation, int norienation, /每每個(gè)個(gè)文字相對于頁底的角度,單位
6、為文字相對于頁底的角度,單位為0.10.1度度 dword nweight, dword nweight, /字體粗細(xì)度,范圍為字體粗細(xì)度,范圍為0 010001000 dword dwltalic, dword dwltalic, /如果要求字體傾斜,則取非零如果要求字體傾斜,則取非零 dword dwunderline,dword dwunderline, /如果要求下劃線,則取非零如果要求下劃線,則取非零 dword dwstrikeout,dword dwstrikeout, /如果要求中劃線,則取非零如果要求中劃線,則取非零 dword dwcharset, dword dwchar
7、set, /字體所屬字符集字體所屬字符集 dword dwoutputprecision,/dword dwoutputprecision,/輸出精度,一般取缺省值輸出精度,一般取缺省值out_default_precisout_default_precis dword dwclipprecision, / dword dwclipprecision, /剪裁精度,常取缺省值剪裁精度,常取缺省值clip_default_precisclip_default_precis dword dwquality, dword dwquality, /輸出質(zhì)量,一般取缺省值輸出質(zhì)量,一般取缺省值defau
8、lt_qualitydefault_quality dword dwpitchandfamily, / dword dwpitchandfamily, /字體名字體名) ) 可選的系統(tǒng)字符集:可選的系統(tǒng)字符集:ansi_charsetansi_charsetoem_charsetoem_charsetsymbol_charsetsymbol_charsetdefault_charsetdefault_charsetshiftjis_charsetshiftjis_charset55.1.3 設(shè)置字體和背景顏色設(shè)置字體和背景顏色設(shè)置字體顏色:設(shè)置字體顏色:settextcolor(hdc,crc
9、olor)settextcolor(hdc,crcolor);設(shè)置背景顏色設(shè)置背景顏色:setbkcolor(hdc,crcolor)setbkcolor(hdc,crcolor);crcolorcrcolor為設(shè)置的顏色為設(shè)置的顏色字體字體及背景顏色背景顏色的設(shè)置在開發(fā)過的設(shè)置在開發(fā)過程中非常重要程中非常重要65.2 文本的輸出過程文本的輸出過程確定后續(xù)文本坐標(biāo)確定后續(xù)文本坐標(biāo)確定換行時(shí)文本坐標(biāo)確定換行時(shí)文本坐標(biāo)文本輸文本輸出過程出過程獲取字體信息獲取字體信息格式化文本格式化文本調(diào)用函數(shù)輸出文本調(diào)用函數(shù)輸出文本7獲取字體信息獲取字體信息輸出文本之前要獲取字體的信息,如字符高度輸出文本之前要獲
10、取字體的信息,如字符高度等,以確定輸出格式和下一行字符的位置等,以確定輸出格式和下一行字符的位置 gettextmetrics (hdc,&tm)gettextmetrics (hdc,&tm);/tmtm為為textmetricstextmetrics結(jié)構(gòu)結(jié)構(gòu)獲取當(dāng)前使獲取當(dāng)前使用字體信息用字體信息調(diào)用該函數(shù)時(shí),系統(tǒng)將當(dāng)前調(diào)用該函數(shù)時(shí),系統(tǒng)將當(dāng)前字體的信息拷貝到字體的信息拷貝到tm標(biāo)識標(biāo)識的的textmetricstextmetrics結(jié)構(gòu)中結(jié)構(gòu)中8系統(tǒng)定義的系統(tǒng)定義的textmetrics的結(jié)構(gòu)如下:的結(jié)構(gòu)如下:typedef struct tagtextmetric ty
11、pedef struct tagtextmetric /tm/tmlong tmheight; long tmheight; /字符高度字符高度long tmascent;long tmascent; /字符基線以上高度字符基線以上高度long tmdescent; long tmdescent; /字符基線以下高度字符基線以下高度long tminternalleading;long tminternalleading;/tmheight/tmheight制訂的字符高度頂部的控件制訂的字符高度頂部的控件long tmexternalleading;long tmexternalleading
12、;/行與行之間的間隔行與行之間的間隔long tmavecharwidth;long tmavecharwidth;/平均字符寬度平均字符寬度long tmmaxcharwidth;long tmmaxcharwidth;/最大字符寬度最大字符寬度long tmweight; long tmweight; /字符的粗細(xì)度字符的粗細(xì)度long tmoverhang;long tmoverhang;/合成字體間附加的寬度合成字體間附加的寬度long tmdigitizedaspectx; long tmdigitizedaspectx; /為輸出設(shè)備設(shè)計(jì)的為輸出設(shè)備設(shè)計(jì)的x x軸尺寸軸尺寸long
13、 tmdigitizedaspecty; long tmdigitizedaspecty; /為輸出設(shè)備設(shè)計(jì)的為輸出設(shè)備設(shè)計(jì)的y y軸尺寸軸尺寸bchar tmfirstchar;bchar tmfirstchar;/字體中第一個(gè)字符值字體中第一個(gè)字符值bchar tmlastchar; bchar tmlastchar; /字體中最后一個(gè)字符值字體中最后一個(gè)字符值bchar tmdefaultchar; bchar tmdefaultchar; /代替不在字體中字符的字符代替不在字體中字符的字符bchar tmbreakchar;bchar tmbreakchar;/作為分割符的字符作為分割
14、符的字符byte tmitalic; byte tmitalic; /非非0 0則表示字體為斜體則表示字體為斜體byte tmunderlined; byte tmunderlined; /非非0 0則表示字體有下劃線則表示字體有下劃線byte tmstruckout; byte tmstruckout; /非非0 0則表示字符為刪除字體則表示字符為刪除字體byte tmpitchandfamily; byte tmpitchandfamily; /字體間距和字體族字體間距和字體族byte tmcharset; byte tmcharset; /字符集字符集textmetrictextmetr
15、ic9格式化文本格式化文本(1) 確定后續(xù)文本坐標(biāo)確定后續(xù)文本坐標(biāo)換行時(shí)確定下一行文本的坐標(biāo)換行時(shí)確定下一行文本的坐標(biāo)需要格式化需要格式化處理的情況處理的情況在文本行中確定后續(xù)文本的坐標(biāo)在文本行中確定后續(xù)文本的坐標(biāo)確定后續(xù)文本的坐標(biāo)確定后續(xù)文本的坐標(biāo),應(yīng)先獲取當(dāng)前的字符串的寬度應(yīng)先獲取當(dāng)前的字符串的寬度, 該工作由該工作由gettextextentpoint32函數(shù)函數(shù)完成,并把它存儲于一個(gè)完成,并把它存儲于一個(gè)size結(jié)構(gòu)結(jié)構(gòu)中。中。bool gettextextentpoint32bool gettextextentpoint32( ( hdc hdc,hdc hdc, lpctstr l
16、pszstringlpctstr lpszstring,/,/指定的字符串指定的字符串 int nlength, int nlength, /字符串中的字符數(shù)字符串中的字符數(shù) lpsize lpsizelpsize lpsize/返回字符串寬度及高度的返回字符串寬度及高度的sizesize數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的地址的地址) )size數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的定義的定義typedef struct tagsize long cx; long cy; size;例如,例如,x軸起始坐標(biāo)為軸起始坐標(biāo)為cx0,后續(xù)文本起始坐標(biāo),后續(xù)文本起始坐標(biāo)cx1為:為: cx1=cx0+size.cx;10(2)(2)確定
17、換行時(shí)文本坐標(biāo)確定換行時(shí)文本坐標(biāo)字符的高度字符的高度與與行間隔行間隔均存儲在均存儲在tm指向的指向的textmetrics結(jié)結(jié)構(gòu)中,換行時(shí)構(gòu)中,換行時(shí)y軸上文本的起始坐標(biāo)軸上文本的起始坐標(biāo)cy為:為: cy=tm.tmheight+tm.tmexternalleading; 通過計(jì)算當(dāng)前行文本通過計(jì)算當(dāng)前行文本字符的高度字符的高度與與行間隔行間隔之和,即可之和,即可得到換行時(shí)文本的起始坐標(biāo)得到換行時(shí)文本的起始坐標(biāo)11文本輸出文本輸出 常用的文本輸出函數(shù)常用的文本輸出函數(shù)textout原型如下:原型如下:bool textoutbool textout( ( hdc hdc, hdc hdc,
18、int x, int y,int x, int y, /x, y /x, y為用戶區(qū)中字符串的起始坐標(biāo)為用戶區(qū)中字符串的起始坐標(biāo) lpctstr lpstring, /lpstringlpctstr lpstring, /lpstring為顯示的字符串為顯示的字符串 int ncountint ncount /ncount /ncount為字符串中的字節(jié)數(shù)為字符串中的字節(jié)數(shù)) );textout 以坐標(biāo)以坐標(biāo)x,y為起點(diǎn),為起點(diǎn),輸出字節(jié)數(shù)為輸出字節(jié)數(shù)為 ncount、名為名為lpstring中的字符串中的字符串125.3 5.3 文本操作實(shí)例文本操作實(shí)例【例【例5-1】在用戶窗口上輸出幾行字
19、符串,當(dāng)窗口接收到】在用戶窗口上輸出幾行字符串,當(dāng)窗口接收到wm_paint消息后,顯示的文本每次都被重新刷新。消息后,顯示的文本每次都被重新刷新。#include#include#include#include#include#includelong winapi wndproc(long winapi wndproc(hwnd hwnd,hwnd hwnd,uint imessage,uint imessage,uint wparam,uint wparam,long lparamlong lparam););bool initwindowsclass(hinstance hinstanc
20、e);bool initwindowsclass(hinstance hinstance);bool initwindows(hinstance hinstance,int ncmdshow);bool initwindows(hinstance hinstance,int ncmdshow);13/主函數(shù)主函數(shù)int winapi winmain(int winapi winmain(hinstance hinstance,hinstance hinstance,hinstance hprevinstance,hinstance hprevinstance,lpstr lpcmdline,l
21、pstr lpcmdline,int ncmdshowint ncmdshow) ) msg message;msg message;if(!initwindowsclass(hinstance)if(!initwindowsclass(hinstance)return false;return false;if(!initwindows(hinstance,ncmdshow)return false;if(!initwindows(hinstance,ncmdshow)return false;while(getmessage(&message,0,0,0)/while(getmes
22、sage(&message,0,0,0)/消息循環(huán)消息循環(huán) translatemessage(&message);translatemessage(&message);dispatchmessage(&message);dispatchmessage(&message); return message.wparam;return message.wparam; 14/消息處理函數(shù)消息處理函數(shù)long winapi wndproc(hwnd hwnd,uint imessage,uint wparam,long lparam)long winapi wnd
23、proc(hwnd hwnd,uint imessage,uint wparam,long lparam) static long nxchar, nychar;static long nxchar, nychar;hdc hdc; /hdc hdc; /定義指向設(shè)備上下文的句柄定義指向設(shè)備上下文的句柄short x;short x; textmetric tm;textmetric tm;short lncount=6;short lncount=6;paintstruct ptstr; paintstruct ptstr; /定義指向包含繪圖信息的結(jié)構(gòu)體變量定義指向包含繪圖信息的結(jié)構(gòu)體變量
24、static char static char * *textbuf=textbuf= this is the first line,this is the first line,this is the second line,this is the second line,this is the third line,this is the third line,this is the fourth line,this is the fourth line,this is the fifth line,this is the fifth line,this is the sixth line
25、this is the sixth line;輸出的文輸出的文本內(nèi)容本內(nèi)容15switch(imessage) /switch(imessage) /處理消息處理消息 case wm_create:case wm_create:/處理窗口創(chuàng)建消息處理窗口創(chuàng)建消息hdc=getdc(hwnd) ; hdc=getdc(hwnd) ; /獲取當(dāng)前設(shè)備表句柄獲取當(dāng)前設(shè)備表句柄 gettextmetrics(hdc,&tm); gettextmetrics(hdc,&tm); /獲取字體信息獲取字體信息 nxchar=tm.tmavecharwidth; nxchar=tm.tmave
26、charwidth; /獲取字符寬度獲取字符寬度 nychar=tm.tmheight+tm.tmexternalleading;nychar=tm.tmheight+tm.tmexternalleading; releasedc(hwnd,hdc); releasedc(hwnd,hdc); /釋放當(dāng)前設(shè)備句柄釋放當(dāng)前設(shè)備句柄 return 0;return 0; case wm_paint: case wm_paint: /處理重畫消息處理重畫消息 hdc=beginpaint(hwnd,&ptstr); hdc=beginpaint(hwnd,&ptstr); /開始繪畫
27、開始繪畫 for(x=0;xlncount;x=x+1) for(x=0;xlncount;x=x+1) /輸出文本輸出文本 textout(hdc,nxchar,nychartextout(hdc,nxchar,nychar* *(1+x),textbufx,lstrlen(textbufx); (1+x),textbufx,lstrlen(textbufx); endpaint(hwnd,&ptstr);endpaint(hwnd,&ptstr); return 0;return 0; case wm_destroy: case wm_destroy: /結(jié)束應(yīng)用程序結(jié)束應(yīng)
28、用程序 postquitmessage(0);postquitmessage(0); return 0;return 0; default: default:/其他消息處理程序其他消息處理程序 return(defwindowproc(hwnd,imessage,wparam,lparam) ;return(defwindowproc(hwnd,imessage,wparam,lparam) ; 16bool initwindowsclass(hinstance hinstance)bool initwindowsclass(hinstance hinstance)/初始化窗口類初始化窗口類
29、wndclass wndclass;wndclass wndclass;wndclass.style=cs_hredraw|cs_vredraw;wndclass.style=cs_hredraw|cs_vredraw;return registerclass(&wndclass);return registerclass(&wndclass); bool initwindows(hinstance hinstance,int ncmdshow)bool initwindows(hinstance hinstance,int ncmdshow) / /初始化窗口初始化窗口 hw
30、nd hwnd;hwnd hwnd;hwnd=createwindow(wintext, /hwnd=createwindow(wintext, /生成窗口生成窗口 文本顯示示例程序文本顯示示例程序,ws_overlappedwindow,ws_overlappedwindow,.;.;null);null);if(!hwnd)if(!hwnd)return false;return false;showwindow(hwnd,ncmdshow);showwindow(hwnd,ncmdshow);/顯示窗口顯示窗口updatewindow(hwnd);updatewindow(hwnd);r
31、eturn true;return true; 17【例【例5-25-2】本程序通過在窗口中分五行分別顯示五行】本程序通過在窗口中分五行分別顯示五行文本,以說明在窗口的用戶區(qū)中輸出文本的方法。文本,以說明在窗口的用戶區(qū)中輸出文本的方法。18本例題的源代碼如下:#include #include #include #include #include #include #include #include lresult callback wndproc(hwnd,uint,wparam,lparam);lresult callback wndproc(hwnd,uint,wparam,lparam
32、);int winapi winmain(int winapi winmain(hinstance hinstance,hinstance hinstance, hinstance hprevinst,hinstance hprevinst,lpstr lpszcmdline,lpstr lpszcmdline,int ncmdshowint ncmdshow) ) hwnd hwnd;hwnd hwnd; msg msg;msg msg; wndclass wndclass;wndclass wndclass; char lpszclassname = char lpszclassname
33、= 文本輸出文本輸出; ; char lpsztitle= example for the text output;char lpsztitle= example for the text output; wndclass.style = 0;wndclass.style = 0; ; ; wndclass.lpszclassname = lpszclassname;wndclass.lpszclassname = lpszclassname;19if( !registerclass( &wndclass)if( !registerclass( &wndclass) messa
34、gebeep(0);return false; messagebeep(0);return false; hwnd = createwindowhwnd = createwindow( ( lpszclassname,lpszclassname,lpsztitle,lpsztitle,ws_overlappedwindow,ws_overlappedwindow,cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,null,
35、null, null,null, hinstance,hinstance,null);null);showwindow( hwnd, ncmdshow);showwindow( hwnd, ncmdshow);updatewindow(hwnd);updatewindow(hwnd);while( getmessage(&msg,null,0,0)while( getmessage(&msg,null,0,0) translatemessage(&msg);translatemessage(&msg); dispatchmessage(&msg);dis
36、patchmessage(&msg); return msg.wparam;return msg.wparam; 20lresult callback wndproc(hwnd hwnd,uint message,lresult callback wndproc(hwnd hwnd,uint message,wparam wparam,lparam lparam)wparam wparam,lparam lparam) hdc hdc;hdc hdc;hfont hf_black,hf_big;hfont hf_black,hf_big;/定義兩種字體句柄定義兩種字體句柄paintst
37、ruct ps;paintstruct ps;textmetric tm;textmetric tm;/定義一個(gè)定義一個(gè)textmetrictextmetric結(jié)構(gòu),用以記錄字體信息結(jié)構(gòu),用以記錄字體信息char lpsz_1=char lpsz_1=這是一行紅色的、字體為這是一行紅色的、字體為system_fontsystem_font的文字,紅色代表未來。的文字,紅色代表未來。;char lpsz_2=char lpsz_2=現(xiàn)在顯示的是自定義字體,顏色為綠色,綠色代表生機(jī)勃勃?,F(xiàn)在顯示的是自定義字體,顏色為綠色,綠色代表生機(jī)勃勃。;char lpsz_3=char lpsz_3=現(xiàn)在展現(xiàn)
38、在您面前的是藍(lán)色的粗體字,藍(lán)色代表廣闊的海洋和天空?,F(xiàn)在展現(xiàn)在您面前的是藍(lán)色的粗體字,藍(lán)色代表廣闊的海洋和天空。;char lpsz_4=char lpsz_4=當(dāng)前字體為大號、斜體并帶有下劃線的文字。當(dāng)前字體為大號、斜體并帶有下劃線的文字。;char lpsz_5=char lpsz_5=現(xiàn)在您掌握了字體的操作了嗎現(xiàn)在您掌握了字體的操作了嗎?;?;char lpsz_6=char lpsz_6=祝您成功祝您成功!;!;int x=0,y=0;int x=0,y=0;size size;size size;/定義一個(gè)定義一個(gè)sizesize類型的結(jié)構(gòu)類型的結(jié)構(gòu)21switch(message)
39、switch(message) case wm_paint:case wm_paint:hdc=beginpaint(hwnd,&ps);hdc=beginpaint(hwnd,&ps);settextcolor(hdc,rgb(255,0,0);settextcolor(hdc,rgb(255,0,0);/設(shè)置文本顏色為紅色設(shè)置文本顏色為紅色gettextmetrics(hdc,&tm); /gettextmetrics(hdc,&tm); /獲取缺省字體,寫入獲取缺省字體,寫入tmtm結(jié)構(gòu)中結(jié)構(gòu)中textout(hdc,x,y,lpsz_1,strlen(l
40、psz_1);/textout(hdc,x,y,lpsz_1,strlen(lpsz_1);/用當(dāng)前字體輸出文本用當(dāng)前字體輸出文本y=y+tm.tmheight+100y=y+tm.tmheight+100* *tm.tmexternalleading;tm.tmexternalleading;/計(jì)算換行時(shí)下一行文本的輸出坐標(biāo)計(jì)算換行時(shí)下一行文本的輸出坐標(biāo)hf_blackhf_black= =createfontcreatefont( ( /創(chuàng)建自定義字體創(chuàng)建自定義字體 20,20,/字體的高度字體的高度 0,0,/由系統(tǒng)根據(jù)高寬比選取字體最佳寬度值由系統(tǒng)根據(jù)高寬比選取字體最佳寬度值 0,0,
41、/文本的傾斜度為文本的傾斜度為0 0,表示水平,表示水平 0,0,/字體的傾斜度為字體的傾斜度為0 0 fw_heavy, fw_heavy,/字體的粗度,字體的粗度,fw_heavyfw_heavy為最粗為最粗 0,0,/非斜體字非斜體字 0,0,/無下劃線無下劃線 0,0,/無刪除線無刪除線 ansi_charset,ansi_charset,/表示所用的字符集為表示所用的字符集為ansi_charsetansi_charset out_default_precis, out_default_precis,/輸出精度為缺省精度輸出精度為缺省精度 clip_default_precis,cl
42、ip_default_precis,/剪裁精度為缺省精度剪裁精度為缺省精度 default_quality,default_quality,/輸出質(zhì)量為缺省值輸出質(zhì)量為缺省值 default_pitch|ff_dontcare,/default_pitch|ff_dontcare,/字間距和字體系列使用缺省值字間距和字體系列使用缺省值 粗體字粗體字 );); /字體名稱字體名稱22settextcolor(hdc,rgb(0,255,0);settextcolor(hdc,rgb(0,255,0);/設(shè)置文本顏色為綠色設(shè)置文本顏色為綠色selectobject(hdc,hf_black);se
43、lectobject(hdc,hf_black);/將自定義字體選入設(shè)備環(huán)境將自定義字體選入設(shè)備環(huán)境gettextmetrics(hdc,&tm); /gettextmetrics(hdc,&tm); /獲取字體的信息,寫入獲取字體的信息,寫入tmtm結(jié)構(gòu)中結(jié)構(gòu)中textout(hdc,x,y,lpsz_2,strlen(lpsz_2);/textout(hdc,x,y,lpsz_2,strlen(lpsz_2);/用當(dāng)前字體輸出文本用當(dāng)前字體輸出文本/換行繼續(xù)輸出文本,計(jì)算新行的起始換行繼續(xù)輸出文本,計(jì)算新行的起始y y坐標(biāo)位置坐標(biāo)位置y=y+tm.tmheight+10y=
44、y+tm.tmheight+10* *tm.tmexternalleading;tm.tmexternalleading;gettextextentpoint32(hdc,lpsz_2,strlen(lpsz_2),&size);gettextextentpoint32(hdc,lpsz_2,strlen(lpsz_2),&size);/獲取字符串獲取字符串/ /的寬度的寬度settextcolor(hdc,rgb(0,0,255);settextcolor(hdc,rgb(0,0,255);/設(shè)置文本顏色為藍(lán)色設(shè)置文本顏色為藍(lán)色textout(hdc,x,y,lpsz_3,s
45、trlen(lpsz_3);/textout(hdc,x,y,lpsz_3,strlen(lpsz_3);/當(dāng)前字體輸出文本當(dāng)前字體輸出文本y=y+tm.tmheight+20y=y+tm.tmheight+20* *tm.tmexternalleading; tm.tmexternalleading; 23hf_big=createfonthf_big=createfont/引入新字體引入新字體( (30,30,/字體高度字體高度0,0,0,0,0,0,fw_normal,fw_normal,1,1,/定義斜體定義斜體1,1,/定義輸出時(shí)帶下劃線定義輸出時(shí)帶下劃線0,0,ansi_chars
46、et,ansi_charset,/所使用的字符集所使用的字符集out_default_precis,out_default_precis,clip_default_precis,clip_default_precis,default_quality,default_quality,default_pitch|ff_dontcare,default_pitch|ff_dontcare, 大號字大號字 ););24selectobject(hdc,hf_big);/selectobject(hdc,hf_big);/將自定義字體選入設(shè)備環(huán)境將自定義字體選入設(shè)備環(huán)境settextcolor(hdc,
47、rgb(155,155,155);settextcolor(hdc,rgb(155,155,155); /設(shè)置文本顏色設(shè)置文本顏色y=y+tm.tmheight+20y=y+tm.tmheight+20* *tm.tmexternalleading;tm.tmexternalleading;textout(hdc,x,y,lpsz_4,strlen(lpsz_4);/textout(hdc,x,y,lpsz_4,strlen(lpsz_4);/輸出文本輸出文本settextcolor(hdc,rgb(255,0,0);/settextcolor(hdc,rgb(255,0,0);/設(shè)置文本顏色
48、為紅色設(shè)置文本顏色為紅色y=y+tm.tmheight+30y=y+tm.tmheight+30* *tm.tmexternalleading;tm.tmexternalleading;textout(hdc,x,y,lpsz_5,strlen(lpsz_5); textout(hdc,x,y,lpsz_5,strlen(lpsz_5); /輸出文本輸出文本/在該行繼續(xù)輸出文本在該行繼續(xù)輸出文本gettextextentpoint32(hdc,lpsz_5,strlen(lpsz_5),&size);gettextextentpoint32(hdc,lpsz_5,strlen(lpsz
49、_5),&size);/獲取字符串的寬度獲取字符串的寬度x=x+size.cx;x=x+size.cx;/獲取起始坐標(biāo)獲取起始坐標(biāo)textout(hdc,x,y,lpsz_6,strlen(lpsz_6); textout(hdc,x,y,lpsz_6,strlen(lpsz_6); /輸出文本輸出文本endpaint(hwnd,&ps);endpaint(hwnd,&ps);break;break;25case wm_destroy:case wm_destroy: deleteobject(hf_black); deleteobject(hf_black); /退出
50、窗口時(shí)刪除自定義字體退出窗口時(shí)刪除自定義字體 deleteobject(hf_big);deleteobject(hf_big); postquitmessage(0); postquitmessage(0); break; break;default:default: return defwindowproc(hwnd,message,wparam,lparam); return defwindowproc(hwnd,message,wparam,lparam); return 0;return 0; 26【5-35-3】在窗口中顯示出】在窗口中顯示出2626個(gè)英文字母,個(gè)英文字母,從左向右
51、從左向右字母依次位置提高字母依次位置提高1010個(gè)象素單位,并且顏色變?yōu)榧t色,然后回到正常位置;當(dāng)?shù)竭_(dá)最右個(gè)象素單位,并且顏色變?yōu)榧t色,然后回到正常位置;當(dāng)?shù)竭_(dá)最右端后改變方向從右向左依次變成紅色并位置提高端后改變方向從右向左依次變成紅色并位置提高1010個(gè)象素單位。在窗個(gè)象素單位。在窗口的第二行顯示口的第二行顯示2626個(gè)字母,字體從正常到斜體,顏色從黑色到天藍(lán)色個(gè)字母,字體從正常到斜體,顏色從黑色到天藍(lán)色不斷變換。如圖所示。不斷變換。如圖所示。用用ncharnchar標(biāo)志紅標(biāo)志紅色跳起字母在色跳起字母在2626個(gè)字母的位置個(gè)字母的位置用用brightbright,bleftbleft標(biāo)志當(dāng)
52、前標(biāo)志當(dāng)前移動方向,初始化移動方向,初始化bright=truebright=true,bleft=falsebleft=false27本例題要解決本例題要解決動態(tài)顯示動態(tài)顯示問題問題: :首先處理第一行字符:在首先處理第一行字符:在wm_paintwm_paint消息處理程序中,在得到了設(shè)消息處理程序中,在得到了設(shè)備環(huán)境句柄備環(huán)境句柄hdchdc后,調(diào)用用戶自定義的函數(shù)后,調(diào)用用戶自定義的函數(shù)createfont(hdc,nheight,bitalic)createfont(hdc,nheight,bitalic),第一個(gè)參數(shù),第一個(gè)參數(shù)hdchdc是設(shè)備環(huán)境是設(shè)備環(huán)境句柄,第句柄,第2 2
53、個(gè)參數(shù)個(gè)參數(shù)nheightnheight是字體高度,第是字體高度,第3 3個(gè)參數(shù)個(gè)參數(shù)bitalicbitalic是斜字是斜字體的標(biāo)志變量體的標(biāo)志變量wm_createwm_create消息處理程序消息處理程序定時(shí)器定時(shí)器調(diào)用調(diào)用settimer(settimer() )創(chuàng)建創(chuàng)建wm_timerwm_timer消息處消息處理程序理程序調(diào)用調(diào)用invalidaterect(invalidaterect() )刷新刷新用戶區(qū)用戶區(qū)發(fā)送發(fā)送wm_paintwm_paint消息消息實(shí)現(xiàn)實(shí)現(xiàn)動態(tài)動態(tài)顯示顯示28下面這段程序按照黑色的字體輸出從字符串開頭到當(dāng)前位置的字符串:下面這段程序按照黑色的字體輸出從
54、字符串開頭到當(dāng)前位置的字符串: y=tm.tmexternalleading+10;y=tm.tmexternalleading+10;/設(shè)置輸出字符的設(shè)置輸出字符的y y坐標(biāo)坐標(biāo) for(i=0;inchar;i+)for(i=0;inchar;i+) settextcolor(hdc,rgb(0,0,0); settextcolor(hdc,rgb(0,0,0);/設(shè)置字體的顏色為黑色設(shè)置字體的顏色為黑色 x=x+tm.tmavecharwidthx=x+tm.tmavecharwidth* *2;2;/設(shè)置輸出字符的設(shè)置輸出字符的x x坐標(biāo)坐標(biāo) textout(hdc,x,y,&
55、lpsz_1i,1);/textout(hdc,x,y,&lpsz_1i,1);/輸出從第輸出從第0 0個(gè)到第個(gè)到第nchar-1nchar-1個(gè)字符個(gè)字符 下面輸出當(dāng)前位置上的字符,當(dāng)前位置的字符位置提高下面輸出當(dāng)前位置上的字符,當(dāng)前位置的字符位置提高1010個(gè)象素單位,個(gè)象素單位,字體顏色為紅色:字體顏色為紅色:settextcolor(hdc,rgb(255,0,0);/settextcolor(hdc,rgb(255,0,0);/設(shè)置字體的顏色為紅色設(shè)置字體的顏色為紅色x=x+tm.tmavecharwidthx=x+tm.tmavecharwidth* *2;2;/設(shè)置輸出字
56、符的設(shè)置輸出字符的x,yx,y坐標(biāo)坐標(biāo)y=tm.tmexternalleading;y=tm.tmexternalleading;/提高提高1010個(gè)像素個(gè)像素hf = createfont(hdc,40,0);hf = createfont(hdc,40,0);/創(chuàng)建字體創(chuàng)建字體selectobject(hdc,hf);selectobject(hdc,hf);/選入字體選入字體textout(hdc,x,y,&lpsz_1nchar,1);/textout(hdc,x,y,&lpsz_1nchar,1);/輸出第輸出第ncharnchar個(gè)字符個(gè)字符y=tm.tmexter
57、nalleading+10;y=tm.tmexternalleading+10;for(i=nchar+1;incharlen;i+)for(i=nchar+1;incharlen;i+) settextcolor(hdc,rgb(0,0,0); / settextcolor(hdc,rgb(0,0,0); /設(shè)置字體的顏色為黑色設(shè)置字體的顏色為黑色 x=x+tm.tmavecharwidthx=x+tm.tmavecharwidth* *2; /2; /設(shè)置輸出字符的設(shè)置輸出字符的x x坐標(biāo)坐標(biāo) textout(hdc,x,y,&lpsz_1i,1);textout(hdc,x,y,
58、&lpsz_1i,1);/輸出后面的字符輸出后面的字符 29 下面設(shè)置下面設(shè)置brightbright和和bleftbleft的值。的值。if(nchar = ncharlen)if(nchar = ncharlen)/當(dāng)輸出到最后的一個(gè)字符時(shí)當(dāng)輸出到最后的一個(gè)字符時(shí) bright = false;bright = false;/改變紅色字移動的方向?yàn)橄蜃蟾淖兗t色字移動的方向?yàn)橄蜃骲left = true;bleft = true; else(nchar = 0)else(nchar = 0)/當(dāng)輸出到第一個(gè)字時(shí)當(dāng)輸出到第一個(gè)字時(shí) bright = true;bright = true
59、;/改變紅色字移動的方向?yàn)橄蛴腋淖兗t色字移動的方向?yàn)橄蛴襜left = false;bleft = false; if(bright = true) nchar+;if(bright = true) nchar+;else nchar-;else nchar-;如果如果nchar=nchar=等于字符串長度等于字符串長度= =已到了字符串末尾,將已到了字符串末尾,將brightbright置為置為truetrue字符長度字符長度=0=0時(shí),已到了最左端,將時(shí),已到了最左端,將bleftbleft置為置為truetrue;當(dāng)當(dāng)bright=truebright=true時(shí)字符位置標(biāo)志時(shí)字符位置標(biāo)
60、志ncharnchar加加1 1,當(dāng),當(dāng)bleft=truebleft=true時(shí),字符位置標(biāo)時(shí),字符位置標(biāo)志變量減志變量減1 1。30下面輸出第下面輸出第2 2行字符:在行字符:在wm_paintwm_paint處理程序中,加入下列代碼:處理程序中,加入下列代碼:hf = createfont(hdc,40,bitalic);hf = createfont(hdc,40,bitalic);/創(chuàng)建字體創(chuàng)建字體. .大小為大小為4040selectobject(hdc,hf);selectobject(hdc,hf);/選入字體選入字體x = tm.tmavecharwidthx = tm.tmavecharwidth* *2;2;/設(shè)置輸出位置設(shè)置輸出位置y = tm.tmheighty = tm.tmheight* *2;2;if(bitalic = true) if(bitalic = true) settextcolor(hdc,rgb(0,0,0);settextcolor(hdc,rgb(0,0,0); else else
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝學(xué)校合同范本
- 包車居間服務(wù)合同范本
- 鄉(xiāng)村園林出售合同范本
- 別墅大門購買合同范本
- 醫(yī)療旅行合同范本
- 倉庫分租協(xié)議合同范例
- 分包非標(biāo)工程合同范本
- 勞動配送合同范本
- 上牌購車合同范本
- 公寓欄桿維修合同范本
- 2024 河北公務(wù)員考試(筆試、省直、A類、C類)4套真題及答案
- 廈門2025年福建廈門市公安文職人員服務(wù)中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2025年高三歷史教學(xué)工作計(jì)劃
- 《職業(yè)性肌肉骨骼疾患的工效學(xué)預(yù)防指南 》
- 不同產(chǎn)地筠連紅茶風(fēng)味化學(xué)成分差異分析
- DB50 577-2015 汽車整車制造表面涂裝大氣污染物排放標(biāo)準(zhǔn)
- 生態(tài)安全課件
- 消防風(fēng)道風(fēng)管施工方案
- 大學(xué)英語(西安歐亞學(xué)院)知到智慧樹章節(jié)測試課后答案2024年秋西安歐亞學(xué)院
- 人教版高中英語挖掘文本深度學(xué)習(xí)-選修四-UNIT-2-(答案版)
- 八下冀教版英語單詞表
評論
0/150
提交評論