windowsAPI編程(上)_第1頁(yè)
windowsAPI編程(上)_第2頁(yè)
windowsAPI編程(上)_第3頁(yè)
windowsAPI編程(上)_第4頁(yè)
windowsAPI編程(上)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、WindowsAPI編程一windows基礎(chǔ)編寫第一個(gè)程序:#includeintWINAPIWinMain(HINSTANCEhlnstancelNSTANCEhPrevInstancePSTRIpCmdLineJntnShowCmd)MessageBox(NULLJEXTChelloworld,)/TEXT(,FirstProgram,)/MB-OK);return0;WINDEF.HWINBASE.HWINUSER.HWINGDI.HWINNT.H程序入口點(diǎn):Windows程序的入II點(diǎn)總是WinMain函數(shù),該函數(shù)定義如F:IntWINAPIWinMain(HINSTANCEhlnst

2、ance,HINSTANCEhPrevlnstance,LPSTRIpCmdLine,IntnCmdShow)Hlnstance是當(dāng)前實(shí)例句柄,句柄是一個(gè)整數(shù),用丁標(biāo)示程序,窗II和資源等程序分析:程序的總體結(jié)構(gòu)上,頭文件windows.h代替了stdio.h,WinMain代替了main函數(shù),MessageBox代替了printf.頭文件:Windows.h是最重要的頭文件,包含了許多其他的windows頭文件,重要的幾個(gè)如卜所示:用于定義基本數(shù)據(jù)類型用于包含內(nèi)核函數(shù)用丁包含用戶接II函數(shù)用于包含圖形設(shè)備接II函數(shù)用丁支持Unicode編碼的基本數(shù)據(jù)類型當(dāng)前實(shí)例句柄總是置空命令行程序最初的顯

3、示模式HPrevInstance總是置空NULL,在windows早期版本中,程序盂要通過(guò)檢查hprevinstance來(lái)判斷自身的其他實(shí)例程序是否正在運(yùn)行,而在32位版本的,只需將其置空。IpCmdLine是運(yùn)行程序的命令行。用戶可以單擊“開(kāi)始”菜單中的“運(yùn)行”選項(xiàng),然后輸入命令運(yùn)行程序,這里的命令就是由參數(shù)IpCmdLine傳入的。nCmdShow用于指定程序窗口最初的顯示模式。注:這里變量的名稱使用的是“匈牙利命名法”的命名規(guī)則,即在變量名前加一個(gè)標(biāo)示變量數(shù)據(jù)類型的短前綴。例如,前綴h標(biāo)示變量是一個(gè)句柄(handleMessageBox函數(shù):IntMessageBox(HWNDHWnd,

4、LPCTSTRIpText,LPCTSTRIpCaption,UINTuType所屬窗口句柄需要顯示的信息字符串對(duì)話框窗口標(biāo)題字符串對(duì)話框中的按鈕和提示圖標(biāo)類型)MessageBox函數(shù)的第四個(gè)參數(shù)用丁指定對(duì)話框中顯示的按鈕和提示圖標(biāo)的類型。常用按鈕類型有MB_OK(“確定”按鈕),MB_OKCANCEL(確定”和“取消”按鈕),MB_YESNO(“是”和“否”按鈕),MB_INFORMATION(M信息提示”圖標(biāo)),MB_WARNING(警告”圖標(biāo)),MB_ERROR(“錯(cuò)誤”圖標(biāo))。各種按鈕和圖標(biāo)可以使用“I”連接,表示同時(shí)使用。Windows與Unicode:字符集:Unicode字符集

5、比ASCII碼要多很多,并且用16位的值表示一個(gè)字符,比ASCII多一倍,采用雙字節(jié)字符集,包含了很多國(guó)家的文字代碼點(diǎn),總計(jì)65000多個(gè)代碼點(diǎn)。C運(yùn)行庫(kù)對(duì)Unicode的支持?jǐn)?shù)據(jù)類型:Unicode采用wchar_t表示字符數(shù)據(jù)類型,就像char。但它是16位雙字節(jié)的。如卜定義:wchar_tch=,W,;定義單個(gè)字符wwchar_t*ch=LthisisaUnicodestring;定義字符串指針wchar_tch=LathisisaUnicodestring;定義字符數(shù)組其中,字符串前而的L表示編譯器將字符串按Unicode保存,即每個(gè)字符占2個(gè)字節(jié)為了將單字節(jié)字符擴(kuò)充為雙字節(jié)字符,系統(tǒng)

6、會(huì)自動(dòng)在單字節(jié)字符后插入0。例如,單字節(jié)字符W在intel處理器內(nèi)存儲(chǔ)為57,而雙字節(jié)字符W則存儲(chǔ)為5700.字符串處理函數(shù):對(duì)雙字節(jié)字符串的處理與單字節(jié)字符串不同。單字節(jié)用strlen,如iStringLength=strlen(thisisaUnicodestring);/i代表int即:intStringLength=雙字節(jié)用wcslen,如:iwStringLength=wcslen(LthisisaUnicodestring);注意L,不能用strlen計(jì)算雙字節(jié)字符串的長(zhǎng)度,否則會(huì)出現(xiàn)編譯錯(cuò)誤。所有的字符串處理函數(shù)都要重新定義一個(gè)新的版本來(lái)支持Unicodeo因此采用TCHAR.H

7、頭文件實(shí)現(xiàn)對(duì)單字節(jié)和雙字節(jié)字符串的統(tǒng)一處理,根據(jù)該文件中定義的字符串處理函數(shù),可以根據(jù)是否定義了UNICODE宏來(lái)分別處理Unicode字符集和單字節(jié)字符集。/TCHAR表示既可以指向windows字符又可以指向Unicode字符以計(jì)算字符串長(zhǎng)度為例,處理單字節(jié)和雙字節(jié)字符串的統(tǒng)一函數(shù)是.tcslen,在TCHAR.H+定義如F(該頭文件不是ANSIC標(biāo)準(zhǔn)的一部分,所以這里定義的宏和函數(shù)名Z前都有一個(gè)F劃線):#ifd&-UNICODEwcslen#define.tcslenffdefine_tcslen#endifstrlen#else由此可知,如果定義了UNICODE,就定義了_tcsle

8、n為wcslen,否則定義為strlenForexample:intstringLength=(_tcslen(Hcpath)+1);II如果定義為UNICODE則是wcslen,反之是strlenchar*test=仃CHAR*)malloc(sizeof仃CHAR)*stringLength);intlength=_tcslen(test);另外,TCHAR.H中還定義了一個(gè)新的數(shù)據(jù)類型TCHAR解決兩種字符數(shù)據(jù)類型的統(tǒng)一問(wèn)題。林ifdef.UNICODEtypedefwchartTCHAR;#elsetypedefcharTCHAR;#endif即,如果定義了Unicode,就定義了TC

9、HAR為wchar_t,否則定義為char如:wchar_twc_examplel=LA;wchar_t表示雙字符數(shù)據(jù)類型,當(dāng)給TCHAR定義了Unicode,就使得自定義類型TCHAR代表數(shù)據(jù)類型wchar_twchart*wc-example2=L,ABCDEF;為了解決字符串前L(指定為雙字節(jié)字符串)的問(wèn)題,TCHAR.H中定義了兒個(gè)宏#ifdef.UNICODEffdefine_T(x)L#x#endif如果定義了Unicode,就以L開(kāi)頭的字符串代替以_T()宏所包用字符串.數(shù)據(jù)類型:在WINNT.H文件支持Unicode,分別為單字節(jié)和雙字節(jié)編碼定義了兩套數(shù)據(jù)結(jié)構(gòu)。單字節(jié)編碼數(shù)據(jù)類

10、型:typedefcharCHAR;自定義數(shù)據(jù)類型CHAR表示char數(shù)據(jù)類型以下用作字符指針typedefCHAR*PCHAR;/pointchar,wc表示一個(gè)寬字符,即wideChartypedefCHAR*LPCH,*PCH;/longPointChar和pointChartypedefCONSTCHAR*LPCCH,*PCCH;/理解為longPointConstChar和pointConstChar以卜用作字符串指針字首N和L表示near和long兩種大小不同的指針,Win32中相等typedefCHAR*NPSTR;/nearPointstringtypedefCHAR*LPST

11、RZ*PSTR;/longPointStringpointstringtypedefCONSTCHARLPCSTR,*PCSTR;/longPointConstStringpointConstString雙字節(jié)編碼數(shù)據(jù)類型:typedefwchartWCHAR;/wideChar,自定義WCHAR表示wchart以下用作字符指針typedefWCHAR*PWCHAR;/自定義PWCHAR表示雙字符形指針typedefWCHAR*LPWCH/*PWCH;/wideChar*longPointWideChar/*pointWideChartypedefCONSTWCHAR*LPCWCH/*PCWC

12、H;/constwideChar*longPointConstWideChar以下用作字符串指針typedefWCHAR*NWPSTR;/widechar*nearWidePointStringtypedefWCHAR*LPWSTR,*PWSTR;/wideCharlongPointWideString/pointWideStringtypedefCONSTWCHAR*LPCWSTR/PCWSTR;并在此基礎(chǔ)上定義了一套統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)#ifdefUNICODEtypedefWCHARTCHAR,*PTCHAR;/wideChartchar,*point_Tchar/以下為字符串指針自定義類型,

13、LPWSTR為長(zhǎng)整形雙字符字符串指針類型typedefLPWSTRLPTCH,PTCH;/自定義LPTCH,PTCH表示指向雙字符型字符串的指針typedefLPWSTRPTSTR,LPTSTR;/longPointWideStringpointTstringtypedefLPCWSTRLPCTSTR;#elsetypedefcharTCHAR,*PTCHAR;/以下為字符串指針typedefLPSTRLPTCH,PTCH;typedefLPSTRPTSTR,LPTSTR;typedefLPCSTRLPCTSTR;#endif為了處理字符串前而的L(指定為雙字節(jié)字符串),還定義了_TEXT宏#

14、ifdefUNICODEffdefine_TEXT(quote)L#quoteelseffdefine_TEXT(quote)quoteendif用于將單字節(jié)編碼轉(zhuǎn)換為雙字節(jié)編碼如果明確要編寫ASCII編碼的程序,就使用單字節(jié)編碼的數(shù)據(jù)類型體系,如果明確需要編寫Unicode編碼的程序,就使用雙字節(jié)編碼的數(shù)據(jù)類型體系;如果不確定使用何種編碼,則應(yīng)當(dāng)使用統(tǒng)一的數(shù)據(jù)類型體系,而由將來(lái)是否定義了UNICODE來(lái)決定是否解釋為Unicode編碼。涉及字符串的函數(shù)顯示單字節(jié)字符串信息的消息框函數(shù)為MessageBoxA:IntWINAPIMessageBoxA(HWNDhWnd,窗口句柄,h表示句柄,w

15、nd表示窗口LPCSTRIpText,/內(nèi)容字符串LPCSTRIpCaption,/caption表示標(biāo)題,即這個(gè)變量為標(biāo)題字符串UINTuType)/UNIT是unsignedint的縮寫窗口和消息:WindowsAPI函數(shù)調(diào)用說(shuō)明LoadiconLoadCursorGetStockObjectRegisterclassCreateWindowShowWindowUpdateWindowGetMessageTranslateMessageicon圖標(biāo)加載程序圖標(biāo)以供顯示使用加載亂標(biāo)指針以供顯示使用獲取一個(gè)圖形設(shè)備對(duì)象為程序的窗口注冊(cè)窗口類創(chuàng)建一個(gè)窗口在屏幕上顯示窗口刷新窗口從消息隊(duì)列中獲取消

16、息轉(zhuǎn)換消息DispatchMessageBeginPaintGetClientRectDrawTextEndPaintPostQuitMessageDefWindowProc將消息發(fā)送給窗口函數(shù)開(kāi)始在用戶區(qū)繪制取得用戶區(qū)顯示文本結(jié)束繪制在消息隊(duì)列中插入一條“推出”消息執(zhí)行缺省的windows消息處理二窗口和消息:匈牙利表示法:Windows壞境卜的變量命名約定一“匈牙利命名法”:變量名以一個(gè)或多個(gè)小寫字母開(kāi)始,這些字母用來(lái)表示改變吊:的數(shù)據(jù)類型。例如,szAppName中的“sz就表示ustringendedwithzero(以零結(jié)尾的字符串)如卜表列出了編寫windows程序時(shí)經(jīng)常用到的一些

17、變最前綴前綴數(shù)據(jù)類型CChar或WCHAR或TCHARbyBYTEnShort1Intx,yInt:坐標(biāo)為x,yex,cyInt:分別作為x方向和y方向的長(zhǎng)度b或fBool;f表示flagwWordLLongdwDword(無(wú)符號(hào)長(zhǎng)整數(shù))fnFunction(函數(shù))sStringszStringendedwithzerohHandlepPointer取變吊名要盡彊取一些有意義的名字。例如szAppName中的AppName就表示了該變吊:是用來(lái)表示“ApplicationName。注冊(cè)窗口類:“窗I啖”與“窗11”Z河的關(guān)系有點(diǎn)類似C+中的類與類的實(shí)例Z間的關(guān)系,可以基于同一個(gè)窗II類創(chuàng)建多個(gè)

18、窗II,正如C+中可以基丁同一個(gè)類而巾明多個(gè)類的實(shí)例。但是窗II類只規(guī)定了基丁該窗II類的窗II中刻畫窗I丨內(nèi)部特征和與具體顯示關(guān)系不人的一些特性,包扌舌窗II用丁相應(yīng)windows消息的窗II函數(shù),窗II的基本顯示風(fēng)格,窗II所屬的實(shí)例句柄,窗I1類名稱和窗I所使用的菜單名稱等。在創(chuàng)建窗IIZ前,必須調(diào)用Registerclass函數(shù)為窗II注冊(cè)一個(gè)窗II類,定義如下:ATOMRegisterclass(constWNDCLASS*lpWndClass)如果注冊(cè)失敗,則返回零,反Z返回非零值。ATOM類型用于保證其返回值在整個(gè)系統(tǒng)中獨(dú)一無(wú)二,區(qū)別于其他的窗I類該函數(shù)只用一個(gè)參數(shù):一個(gè)指向WN

19、DCLASS結(jié)構(gòu)體的指針。WNDCLASS結(jié)構(gòu)體中包括了兩個(gè)指向字符串的指針域。單字符型窗口類結(jié)構(gòu)體/unsightedintstyle;用于ASCII版本的WNDCLASS:typedefstruct_WNDCLASSAUINTWNDPROCIntstyle;IpfnWndProc;窗口過(guò)程函數(shù)longPointertoFunctionWNDPROCcbClsExtra;/調(diào)用Registerclass,分配給user.exe本地堆中的類別據(jù)結(jié)構(gòu)的額外的字節(jié)數(shù),即保存數(shù)據(jù),指定尺寸后注冊(cè)窗口時(shí)系統(tǒng)就會(huì)按照此尺寸開(kāi)辟一塊內(nèi)存IntcbWndExtra;.調(diào)用CreateClass,0cr即保存

20、數(shù)據(jù),指定尺寸后創(chuàng)建窗口時(shí)系統(tǒng)會(huì)按照此尺寸開(kāi)辟一塊內(nèi)存HINSTANCEhinstance;/instancehandle實(shí)例句柄HICONhlcon;/iconhandle圖標(biāo)句柄HCURSORhCursor;/cursorhandle鼠標(biāo)句柄HBRUSHhbrBackground;/backgroundhandle背景句柄LPCSTRIpszMenuName;/longpointstringmenunameLPCSTRIpszClassName;WNDCLASSA;窗LI類結(jié)構(gòu)體中包扌舌的數(shù)據(jù):窗口實(shí)例句柄,窗口顯示風(fēng)格style,窗I過(guò)程函數(shù)(處理窗II的所有響應(yīng)的消息),窗口注冊(cè)時(shí)額外

21、的內(nèi)存開(kāi)銷,窗LI創(chuàng)建時(shí)額外的內(nèi)存開(kāi)銷,窗II背景,窗II菜單,窗II類名,圖標(biāo)句柄,鼠標(biāo)句柄。用TUnicode版的WNDCLASSW:typedefstruct_VVNDCLASSWUINTstyple;WNDPROCIpfnWndProc;IntcbClsExtra;IntcbWndExtra;HINSTANCEhlnstance;HICONhlcon;HCURSORhCursor;HBRUSHhbrBackGround;LPCWSTRIpszMenuName;LPCWSTRIpszClassName;WNDCLASSW;Windows提供了一個(gè)通用的版本:Typedefstruct.W

22、NDCLASSUINTstyle;WNDPROCIpfnWndProc;IntcbClsExtra;IntcbWndExtra;HINSTANCEhlnstance;HICONhlcon;HCURSORhCursor;HBRUSHhbrBackGround;LPCTSTRIpszMenuName;LPCTSTRIpszClassName;WNDCLASS;注:這些結(jié)構(gòu)體由編譯器自行提供,只需對(duì)其賦值即可Ipfn表示longpointertofunction,cb表示countofbytes(字節(jié)數(shù)),hbr表示handleofabrush(一個(gè)刷子的句柄),Ipsz表示longpointert

23、oastringendedwithzero為了調(diào)用Registerclass函數(shù),需要先定義一個(gè)WNDCLASS結(jié)構(gòu)體,然后初始化該結(jié)構(gòu)體的10個(gè)域,作為參數(shù)傳給Registerclass函數(shù)。在WNDCLASS結(jié)構(gòu)體中最重要的兩個(gè)域是第二和最后一個(gè)。第二個(gè)域(IpfnWndProc)是所有基丁該窗II類創(chuàng)建的窗II所使用的窗II函數(shù)的入II地址,正是這個(gè)窗II函數(shù)負(fù)責(zé)處理窗II所響應(yīng)的所有信息。最后一個(gè)域是該窗II類的名稱,在后面CreateWindow函數(shù)中還將使用,正是這個(gè)域?qū)ⅰ按癐”與其響應(yīng)的“窗I類”聯(lián)系起來(lái)。窗口樣式語(yǔ)句:cs表示createStyle創(chuàng)建樣式Wndclass.st

24、yle=CS.HREDRAW|CS.VREDRAW;窗I類結(jié)構(gòu)體的對(duì)彖中的style數(shù)據(jù)成員賦值使用“位或”操作符組合了CS.HREDRAW,CS_VREDRAW兩種“類風(fēng)格”標(biāo)識(shí)符,它們分別表示:當(dāng)窗II水平方向的寬度變化時(shí)重新繪制整個(gè)窗II,當(dāng)窗II垂直方向的寬度變化時(shí)重新繪制整個(gè)窗II。這樣,當(dāng)要改動(dòng)窗II人小時(shí),窗II中的信息相対位置將保持不變。類似CS_HREDRAW這樣的標(biāo)識(shí)符為“位標(biāo)識(shí)符”如下是一些以CS開(kāi)頭的標(biāo)識(shí)符:CS_BYTEALIGNCLIENT在字節(jié)邊界(在X方向)上対齊窗體的客戶區(qū)。此類型將影響到在窗體顯示時(shí)它的寬度和它的水平位置。CS_BYTEALIGNWINDOW

25、在字節(jié)邊界(在X方向)上對(duì)齊窗體。此類型將影響到在窗體顯示時(shí)它的寬度和它的水平位置。CS_CLASSDC分配一個(gè)設(shè)備壞境并被類中的所有窗體共享。由于窗體類被處理特化,它是可以適用于一個(gè)應(yīng)用程序的若干線程創(chuàng)建一個(gè)相同類的窗體。它同樣適用于多個(gè)線程試圖同時(shí)使用相同的設(shè)備壞境。當(dāng)此種情況發(fā)生時(shí),系統(tǒng)只允許一個(gè)線程去成功的它的繪圖操作。CS_DBLCLKS當(dāng)指針在屬于此類的窗體內(nèi)部,并且用戶雙擊鼠標(biāo)時(shí),將會(huì)發(fā)送一個(gè)雙擊消息到窗體程序。CS_GLOBALCLASS指定此窗體類是一個(gè)應(yīng)用程序全局類。應(yīng)用程序全局類是由一個(gè)在進(jìn)程中對(duì)所有模塊有效的exe或ddl注冊(cè)的一個(gè)窗體類。CS_HREDRAW如果窗體被

26、移動(dòng)或尺寸調(diào)整器改變了客戶區(qū)的人小,重繪全部的窗體。CS_NOCLOSE關(guān)閉按扭不可用。CS0WNDC為此類中的每一個(gè)窗體分配唯一的設(shè)備壞境。CS_PARENTDC設(shè)置子窗體中剪卜的矩形到父窗體中,以使子窗全可以在父窗體上繪圖。一個(gè)具有CS_PARENTDC屬性控制的窗體從設(shè)備壞境的系統(tǒng)緩存中接收到一個(gè)規(guī)則的設(shè)備環(huán)境。它不把父窗體的設(shè)備環(huán)境或設(shè)備壞境設(shè)置給予子窗體。指定CS_PARENTDC以提高應(yīng)用程序的性能。CS_SAVEBITS保存被此類的一個(gè)窗體摭住的屏幕圖彖的一部分為位圖。當(dāng)窗體被移動(dòng),系統(tǒng)使用保存過(guò)的位圖去恢復(fù)屏幕圖彖,包括其它被摭住的窗體。因此如果被位圖使用內(nèi)存沒(méi)有被釋放,并且其

27、它的屏幕動(dòng)作沒(méi)有使儲(chǔ)冇的圖像無(wú)效。系統(tǒng)不會(huì)發(fā)送WM_PAINT消息到被摭蓋的窗體。這種類型對(duì)在其它屏幕動(dòng)作發(fā)生時(shí)被暫時(shí)顯示小窗體(如菜單或?qū)υ捒?很有用。這種類型増加了顯示窗體所需的時(shí)間,因?yàn)橄到y(tǒng)必須先分配內(nèi)存去存儲(chǔ)位圖。CS_VREDRAW如果窗體被移動(dòng)或尺寸調(diào)整器改變了客戶區(qū)的高度,重繪全部的窗體??聪旅娴囊粋€(gè)綜合實(shí)例:#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/函數(shù)聲明intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevlnstance,LPSTRIpCmdLineJnt

28、nCmdShow)主函數(shù)體staticTCHARszAppName=TEXT(”HelloWin”);staticTCHARszClassName=TEXTrHelloWinClass“);HWNDhwnd;聲明窗II句柄,HWND是宏定義的數(shù)據(jù)類型MSGmsg;聲明消息對(duì)彖,MSG為消息結(jié)構(gòu)體WNDCLASSwndclass;/窗I1類結(jié)構(gòu)體定義了一個(gè)窗II對(duì)彖wndclass.style=CS_HREDRAW|CS_VREDRAW;窗II顯示模式wndclass.lpfnWndProc=WndProc;/對(duì)象的窗II過(guò)程指針成員指向窗II過(guò)程函數(shù)(處理所有響應(yīng)的消息),wndclass.c

29、bClsExtra=0;調(diào)用RegisterClassS時(shí)不提供額外的空間wndclass.cbWndExtra=0;/調(diào)用CreateClass時(shí)不提供額外的空間wndclass.hlnstance=hlnstance;窗II實(shí)例句柄接受形參hlnstancewndclass.hlcon二Loadicon(NULL,IDI_APPLICATION);圖標(biāo)成員旬柄賦值wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);鼠標(biāo)成員句柄賦值wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);/背景成

30、員句柄賦值wndclass.lpszMenuName=NULL;/指向菜單名稱的長(zhǎng)整形指針為空wndclass.lpszClassName=szClassName;/指向類名的長(zhǎng)整形指針指向數(shù)組szClassNameif(!RegisterClass(&wndclass)如果注冊(cè)窗II類失敗,返回0,在創(chuàng)建窗II前耍先調(diào)用注冊(cè)窗I啖,參數(shù)是窗II對(duì)象指針或引用MessageBox(NULL,TEXT(HthiSprogramrequireswindowsNTjszAppName,MBJCONERROR);return0;創(chuàng)建窗II,調(diào)用窗II創(chuàng)建函數(shù),傳遞實(shí)參,返回值新窗II句柄給hwndhw

31、nd=CreateWindow(szClassName,TEXT(Hthishellowinprogram),WS.OVERLAPPEDWINDOW,/窗口類名,窗口標(biāo)題名,窗口樣式CW_USEDEFAULT,窗IIx軸位置缺省,即使用默認(rèn)值CW_USEDEFAULT,窗IIy軸位置缺省,即使用默認(rèn)值CW_USEDEFAULT,窗II寬度缺省CW_USEDEFAULT,窗II高度缺省NULL,窗門沒(méi)啟父窗IINULL,窗II菜單欄為空hInstance,/窗I1實(shí)例句柄NULL);ShowWindow(hwnd,nCmdShow);調(diào)用窗II顯示函數(shù),傳遞窗II旬柄和窗II顯示樣式Update

32、Window(hwnd);調(diào)用窗I1刷新函數(shù)while(GetMessage(&msgfNULL,0,0)/用接收作用于窗口的消息TranslateMessage(&msg);消息轉(zhuǎn)換DispatchMessage(&msg);/將消息發(fā)給窗II函數(shù),returnmsg.wParam;LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMiParam)得到消息后系統(tǒng)會(huì)進(jìn)行回調(diào),執(zhí)行回調(diào)函數(shù)HDChdc;PAINTSTRUCTps;RECTrect;switch(message)caseWM_CREATE:MessageBo

33、x(NULLJEXT(creating,l),TEXT(,hellowinMessage,),MB_OK);return0;caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);DrawText(hdcJEXTCHellowindows98”),4&rect,DT_SINGLELINE|DT.CENTER|DT_VCENTER);EndPaint(hwnd,&ps);return0;caseWM_DESTROY:PostQuitMessage(O);return0;returnDefWindowProc(hwnd,mes

34、sage,wParam,IParam);程序分析:程序開(kāi)頭是一段函數(shù)聲明:LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);LRESULTCALLBACK其實(shí)是函數(shù)WndProc的函數(shù)類型,即函數(shù)返回值類型,他們是宏,意思是LongResultCallBack返回長(zhǎng)整形的數(shù)據(jù)。在windowsAPI中,得到Message消息Z后系統(tǒng)會(huì)進(jìn)行回調(diào),這時(shí),我們需要一個(gè)回調(diào)函數(shù),這個(gè)問(wèn)題要從windows運(yùn)行機(jī)制說(shuō)起.Windows是以消息為基礎(chǔ),事件為驅(qū)動(dòng)而運(yùn)行的,所謂消息就是諸如光標(biāo)移動(dòng),鼠標(biāo)點(diǎn)擊左右健,雙擊時(shí),會(huì)使得windows發(fā)出一個(gè)消息給應(yīng)用程

35、序,總Z就是windows發(fā)出一個(gè)通知,告訴應(yīng)用程序某個(gè)事件發(fā)生了。當(dāng)一個(gè)事件發(fā)生后,如點(diǎn)擊了鼠標(biāo)左鍵,這時(shí)windows會(huì)產(chǎn)生一個(gè)message,傳遞給指定的窗II進(jìn)行處理,這時(shí)就需要有一個(gè)接門來(lái)給系統(tǒng)調(diào)用。這個(gè)函數(shù)LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);中的第一個(gè)參數(shù)HWND,是消息要傳遞的窗II,參數(shù)2是消息的ID(就是這是個(gè)什么樣的消息,比如鼠標(biāo)左鍵按卜事件刈應(yīng)的消息是WM_LBUTTONDOWN,即windowsMessageeftButtonDown),參數(shù)3和4是消息的具體內(nèi)容。函數(shù)聲明后是主調(diào)函數(shù):intWINAPIWin

36、MainfHINSTANCEhlnstancelNSTANCEhPrevInstanceAPSTRIpCmdLineJntnCmdShow)第一個(gè)參數(shù)是當(dāng)前的實(shí)例旬柄,第2個(gè)參數(shù)是上一個(gè)實(shí)例旬柄,通常設(shè)為NULL,第3個(gè)參數(shù)是指向字符串的指針,第4個(gè)指針是一個(gè)整形數(shù)據(jù),表示窗II顯示的模式。說(shuō)到句柄handle,它有點(diǎn)類似C+中的指針,但又不完全實(shí)現(xiàn)指針的作用,它是一個(gè)指向某一結(jié)構(gòu)體的指針。這個(gè)結(jié)構(gòu)體中只有一個(gè)整形參數(shù)。它的功能就好比是鍋柄,你要使用鍋,你就必須先握住鍋柄,而具體怎么使用這個(gè)鍋,就不是鍋柄的事情了。WindowsAPI程序中都需要一個(gè)handle作為輸入?yún)?shù),這是因?yàn)锳PI要和

37、許多底層的東西打交道,而這些東西是不允許改動(dòng)的,因而使用了handle而不是真正意義上的指針,handle在這里只是一個(gè)中河人,用來(lái)記錄對(duì)彖的最新地址,你知道handle在那里,但你不知道對(duì)彖在那里,而handle卻知道對(duì)象在那里。窗口圖標(biāo)樣式函數(shù):Loadicon函數(shù)HICONLoadicon(HINSTANCEhlnstance,LPCSTRIpIconName)該函數(shù)從與hlnstance模塊相關(guān)聯(lián)的可執(zhí)彳亍文件中裝入IpIconName指定的圖標(biāo)資源,進(jìn)當(dāng)圖標(biāo)資源還未裝入時(shí)該函數(shù)才執(zhí)行裝入操作,否則只獲取裝入的資源句柄。參數(shù)說(shuō)明:IpIconName是指向NULL字符結(jié)尾的字符串指針,

38、它包含圖標(biāo)名,如果要使用windows預(yù)定義的圖標(biāo),則實(shí)例句柄必須為NULL,IpIconName貝lj可以是下列值:IDI_APPUCATION:32512IDI_QUESTION:332514IDI_HAND:32513IDI.EXCLAMATION:32515IDI_ASTERISK:32516IDI_WINLOGO:32517這些值對(duì)應(yīng)了不同的windows圖標(biāo)。窗口背景樣式函數(shù):GetStockObjectGetStockObject函數(shù):該函數(shù)檢索預(yù)定義的備用筆,刷子,字體或調(diào)色板的句柄函數(shù)原型:HGDIOBJGetStockObject(intfnObject)其中HGDIOBJ

39、是handle_GDI_Object.參數(shù):fnObject:指定對(duì)彖的類型,該參數(shù)可取如卜值2;BLACK_BRUSH:黑色畫筆;DKGRAY_BRUSH:暗灰色畫筆:DC_BRUSH:在Windows98,WindowsNT5.0和以后版本中為純顏色畫筆,缺省色為白色,可以用SetDCBrushColor函數(shù)改變顏色,更多的信息參見(jiàn)以卜的注釋部分。GRAYBRUSH:灰色畫筆;HOLLOW_BRUSH:空畫筆(相當(dāng)于HOLLOW_BRUSH);LTGRAY_BRUSH:亮灰色畫筆;NULL_BRUSH:空畫筆(相當(dāng)于HOLLOW_BRUSH);WHITE_BRUSH:白色畫筆;BLACK_

40、PEN:黑色鋼筆;DC_PEN:在Windows98、WindowsNT5.0和以后版本中為純色鋼筆,缺省色為白色,使用SetDCPenColor函數(shù)可以改變色彩.WHITE_PEN:白色鋼筆;ANSI_FIXED_FONT:在Windows中為固定間距(等寬)系統(tǒng)字體:ANSI_VAR_FONT:在Windows中為變間距(比例河距)系統(tǒng)字體:DEVICE_DEFAUCT_FONT:在WindowsNT+為設(shè)備相關(guān)字體:DEFAULT_GUI_FONT:用戶界面對(duì)象缺省字體,如菜單和對(duì)話框;OEM_FIXED_FONT:原始設(shè)備制造商(OEM)相關(guān)固定間距(等寬)字體;SYSTEM_FONT

41、:系統(tǒng)字體,在缺省情況卜一,系統(tǒng)使用系統(tǒng)字體繪制菜單,對(duì)話框控制和文本;SYSTEM_FIXED_FONT:固定間距(等寬)系統(tǒng)字體,該對(duì)象僅提供給兼容16位Windows版本:DEFAULT_PALETTE:缺省調(diào)色板,該調(diào)色板由系統(tǒng)調(diào)色板中的靜態(tài)色彩組成。返回值:如果成功,返回値標(biāo)識(shí)聲請(qǐng)的邏輯對(duì)彖,如果失敗,返回值為NULL。WindowsNT:若想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。注釋:僅在CS_HREDRAW和CS_UREDRAW風(fēng)格的窗II中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH對(duì)彖。如果在其他風(fēng)格的窗II中使灰色畫筆,可能導(dǎo)

42、致在窗II移動(dòng)或改變?nèi)诵后出現(xiàn)畫筆模式錯(cuò)位現(xiàn)彖,原始儲(chǔ)存畫筆不能被調(diào)整。HOLLOW_BRUSH和NULL_BRUSH儲(chǔ)存對(duì)象相等。由DEFAULT_GUI_FONT儲(chǔ)存對(duì)彖使用的字體將改變。當(dāng)想使用菜單、對(duì)話框和其他用戶界面對(duì)彖使用的字體時(shí)請(qǐng)使用此儲(chǔ)存對(duì)象。不必要通過(guò)調(diào)用DeleteObject函數(shù)來(lái)刪除儲(chǔ)存對(duì)象。創(chuàng)建窗口函數(shù):CreateWindow()函數(shù)功能:該函數(shù)創(chuàng)建一個(gè)重疊式窗II、彈出式窗II或子窗II。它指定窗II類,窗II標(biāo)題,窗II風(fēng)格,以及窗II的初始位置及人?。蛇x的)。該函數(shù)也指定該窗II的父窗II或所屬窗II(如果存在的話),及窗II的菜單。若要使用除Create

43、Window函數(shù)支持的風(fēng)格外的擴(kuò)展風(fēng)格,則使用CreateWindowEx函數(shù)(擴(kuò)展函數(shù))代替CreateWindow函數(shù)。函數(shù)原型:HWNDCreateWindowfLPCTSTRlpClassName,LPCTSTRIpWindowName,DWORDdwStyleJntxzintyjntnWidth,intnHeight,HWNDhWndParenHMENUhMenu,HANDLEhlnstance,LPVOIDIpParam);參數(shù):IpClassName:指向一個(gè)空結(jié)束的字符串或整型數(shù)atom如果該參數(shù)是一個(gè)整型最,它是由此前調(diào)用theGlobalAddAtom函數(shù)產(chǎn)生的全局屋。這個(gè)

44、小于OxCOOO的16位數(shù)必須是IpClassName參數(shù)字的低16位,該參數(shù)的高位必須是0。如果IpClassName是一個(gè)字符串,它指定了窗II的類名。這個(gè)類名可以是任何用函數(shù)RegisterClassEx注冊(cè)的類名,或是任何預(yù)定義的控制類名。請(qǐng)看說(shuō)明部分的列表。LPWindowName:指向一個(gè)指定窗II名的空結(jié)束的字符串指針。如果窗II風(fēng)格指定了標(biāo)題條,由IpWindowName指向的窗II標(biāo)題將顯示在標(biāo)題條上。當(dāng)使用Createwindow函數(shù)來(lái)創(chuàng)建控制例如按鈕,選擇框和靜態(tài)控制時(shí),可使用IpWindowName來(lái)指定控制文本。dwStyle:指定創(chuàng)建窗II的風(fēng)格。該參數(shù)可以是下列窗

45、II風(fēng)格的組合再加上說(shuō)明部分的控制風(fēng)格。風(fēng)格意義:WS_BORDER:創(chuàng)建一個(gè)單邊框的窗1丨。WS_CAPTION:創(chuàng)建一個(gè)有標(biāo)題框的窗II(包括WS_BODER風(fēng)格)。WS_CHIID:創(chuàng)建一個(gè)子窗II。這個(gè)風(fēng)格不能與WS_POPUP風(fēng)格合用。WS_CHLDWINDOW:與WS_CHILD相同。WS_CLIPCHILDREN:當(dāng)在父窗II內(nèi)繪圖時(shí),排除子窗II區(qū)域。在創(chuàng)建父窗II時(shí)使用這個(gè)風(fēng)格。WS_CLIPBLINGS;排除子窗IIZ間的相對(duì)區(qū)域,也就是,當(dāng)一個(gè)特定的窗II接收到WM_PAINT消息時(shí),WS_CLIPSIBLINGS風(fēng)格將所有層疊窗II排除在繪圖Z外,只重繪指定的子窗II。

46、如果未指定WS_CLIPSIBLINGS風(fēng)格,并且子窗II是層疊的,則在重繪子窗II的客戶區(qū)時(shí),就會(huì)重繪鄰近的子窗口。WS_DISABLED:創(chuàng)建一個(gè)初始狀態(tài)為禁止的子窗II。一個(gè)禁止?fàn)顟B(tài)的窗口不能接受來(lái)自用戶的輸入信息。WS_DLGFRAME:創(chuàng)建一個(gè)帶對(duì)話框邊框風(fēng)格的窗II。這種風(fēng)格的窗II不能帶標(biāo)題條。WS.GROUP:指定一組控制的第一個(gè)控制。這個(gè)控制組由第一個(gè)控制和隨后定義的控制組成,自第二個(gè)控制開(kāi)始每個(gè)控制,具有WS_GROUP風(fēng)格,每個(gè)組的第一個(gè)控制帶冇WS_TABSTOP風(fēng)格,從而使用戶可以在組間移動(dòng)。用戶隨后可以使用光標(biāo)在組內(nèi)的控制間改變鍵盤焦點(diǎn)。WS_HSCROLL:創(chuàng)建一

47、個(gè)有水平滾動(dòng)條的窗II。WS_ICONIC:創(chuàng)建一個(gè)初始狀態(tài)為最小化狀態(tài)的窗II。與WS_MINIMIZE風(fēng)格相同。WS_MAXIMIZE:創(chuàng)建一個(gè)具有最人化按鈕的窗II。該風(fēng)格不能與WS_EX_CONTEXTHELP風(fēng)格同時(shí)出現(xiàn),同時(shí)必須指定WS_SYSMENU風(fēng)格。WS_OVERLAPPED:產(chǎn)生一個(gè)層疊的窗1丨。一個(gè)層疊的窗II有一個(gè)標(biāo)題條和一個(gè)邊框。與WS_TILED風(fēng)格相同。WS_OVERtAPPEDWINDOW:創(chuàng)建一個(gè)具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENUWS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX風(fēng)格的

48、層疊窗I丨,與WS_TILEDWINDOW風(fēng)格相同。WS_POPUP:創(chuàng)建一個(gè)彈出式窗I丨。該風(fēng)格不能與WS_CHLD風(fēng)格同時(shí)使用。WS_POPUWINDOW:創(chuàng)建一個(gè)具有WS_BORDER,WS_POPUP,WS_SYSMENU風(fēng)格的窗II,WS_CAPTION和WS_POPUPWINDOW必須同時(shí)設(shè)定才能使窗II某單可見(jiàn)。WS_SIZEBOX:創(chuàng)建一個(gè)可調(diào)邊框的窗II,與WS_THICKFRAME風(fēng)格相同。WS_SYSMENU:創(chuàng)建一個(gè)在標(biāo)題條上帶仃窗II菜單的窗II,必須同時(shí)設(shè)定WS_CAPTION風(fēng)格。WS_TABSTOP:創(chuàng)建一個(gè)控制,這個(gè)控制在用戶按FTab鍵時(shí)可以獲得鍵盤焦點(diǎn)。按

49、KTab鍵后使鍵盤焦點(diǎn)轉(zhuǎn)移到下一具有WS_TABSTOP風(fēng)格的控制。WS_THICKFRAME:創(chuàng)建一個(gè)具有可調(diào)邊框的窗I,與WS_SIZEBOX風(fēng)格相同。WS_TILED:產(chǎn)生一個(gè)層疊的窗II。一個(gè)層疊的窗II有一個(gè)標(biāo)題和一個(gè)邊框。與WS_OVERLAPPED風(fēng)格相同。WS_TILEDWINDOW:創(chuàng)建一個(gè)具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENUMS_THICKFRAME.WS_MINIMIZEBOX,WS_MAXMIZEBOX風(fēng)格的層疊窗丨I。與WS_OVERLAPPEDWINDOW風(fēng)格相同。WSVISIBLE:創(chuàng)建一個(gè)初始狀態(tài)為可見(jiàn)的窗I丨。WSVSCR

50、OLL:創(chuàng)建一個(gè)有垂直滾動(dòng)條的窗口。X:指定窗II的初始水平位置。對(duì)一個(gè)層疊或彈出式窗II,X參數(shù)是屏幕坐標(biāo)系的窗II的左上角的初始X坐標(biāo)。對(duì)丁子富II,x是子窗II左上角相對(duì)父窗II客戶區(qū)左上角的初始X坐標(biāo)。如果該參數(shù)被設(shè)為CW_UCEDEFAULT則系統(tǒng)為窗II選擇缺省的左上角坐標(biāo)并忽略Y參數(shù)。CW_USEDEFAULT只對(duì)層疊窗II有效,如果為彈出式窗II或子窗II設(shè)定,則X和y參數(shù)被設(shè)為零。Y:指定窗II的初始垂直位置。對(duì)一個(gè)層疊或彈出式窗口,y參數(shù)是屏幕坐標(biāo)系的窗II的左上角的初始y坐標(biāo)。對(duì)丁子窗II,y是子窗II左上角相對(duì)父窗II客戶區(qū)左上角的初始y坐標(biāo)。對(duì)丁列表框,y是列表框客戶

51、區(qū)左上角相對(duì)父窗II客戶區(qū)左上角的初始y坐標(biāo)。如果層疊窗II是使用WS_VISIBLE風(fēng)格位創(chuàng)建的并且X參數(shù)被設(shè)為CWUSEDEFAULT,則系統(tǒng)將忽略y參數(shù)。nWidth:以設(shè)備單元指明窗II的寬度。對(duì)于層疊窗II,nWidth或是屏幕坐標(biāo)的窗II寬度或是CW_USEDEFAULToXinWidth是CW_USEDEFAULT,則系統(tǒng)為窗II選擇一個(gè)缺省的高度和寬度:缺省寬度為從初始X坐標(biāo)開(kāi)始到屏幕的右邊界,缺省高度為從初始X坐標(biāo)開(kāi)始到目標(biāo)區(qū)域的頂部。CW_USEDFEAULT只參層疊窗II有效:如果為彈出式窗丨I和子窗II設(shè)定CW_USEDEFAULT標(biāo)志則nWidth和nHeight被設(shè)

52、為零。nHelght:以設(shè)備單元指明窗II的高度。對(duì)于層疊窗II,nHeight是屏幕坐標(biāo)的窗II寬度。若nWidth被設(shè)為CW_USEDEFAULT,則系統(tǒng)忽略nHeight參數(shù)。hWndParent:指向被創(chuàng)建窗口的父窗口或所有者窗口的旬柄。若要?jiǎng)?chuàng)建一個(gè)子窗口或一個(gè)被屬窗II,需提供一個(gè)有效的窗II句柄。這個(gè)參數(shù)對(duì)彈出式窗口是可選的。WindowsNT5.0:創(chuàng)建一個(gè)消息窗II,可以提供HWND_MESSAGE或提供一個(gè)己存在的消息窗II的句柄。hMenu:菜單句柄,或依據(jù)窗II風(fēng)格指明一個(gè)子窗II標(biāo)識(shí)。對(duì)于層疊或彈出式窗II,hMenu指定窗II使用的菜單:如果使用了菜單類,則hMenu

53、可以為NULL。對(duì)J:子窗II,hMenu指定了該子窗II標(biāo)識(shí)(一個(gè)整型鼠),一個(gè)對(duì)話框使用這個(gè)整型值將事件通知父類。應(yīng)用程序確定子窗II標(biāo)識(shí),這個(gè)值對(duì)于相同父窗II的所有子窗I1必須是唯一的。hlnstance:與窗I1相關(guān)聯(lián)的模塊事例的句柄。IpParam:指向一個(gè)值的指針,該值傳遞給窗IIWM_CREATE消息。該值通過(guò)在IParam參數(shù)中的CREATESTRUCT結(jié)構(gòu)傳遞。如果應(yīng)用程序調(diào)用CreateWindow創(chuàng)建一個(gè)MDI客戶窗II,則IpParam必須指向一個(gè)CLIENTCREATESTRUCT結(jié)構(gòu)。返回值:如果函數(shù)成功,返回值為新窗II的句柄:如果函數(shù)失敗,返回值為NULL。若

54、想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。備注:在返回前,CreateWindow給窗I過(guò)程發(fā)送一個(gè)WM_CREATE消息。對(duì)于層疊,彈出式和子窗II,CreateWindow給窗口發(fā)送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的IParam參數(shù)包含一個(gè)指向CREATESTRUCT結(jié)構(gòu)的指針。如果指定了WS_VISIBLE風(fēng)格,CreateWindow向窗II發(fā)送所有需要激活和顯示窗II的消息。消息獲取函數(shù):GetMessage()GetMessage()函數(shù)功能:該函數(shù)從調(diào)用線程的消息隊(duì)列里取得一個(gè)消息并將其放于指定

55、的結(jié)構(gòu)。此函數(shù)可取得與指定窗口聯(lián)系的消息和由PostThreadMesssge寄送的線程消息。此函數(shù)接收一定范由的消息值。GetMessage不接收屬丁其他線程或應(yīng)用程序的消息。函數(shù)原型:BOOLGetMessage(LPMSGIpMsg,HWNDhWnd,UINTwMsgFilterMin,UINTwMsgFilteMax參數(shù):IpMsg:指向MSG結(jié)構(gòu)的指針,該結(jié)構(gòu)從線程的消息隊(duì)列里接收消息信息。hWnd:取得其消息的窗II的句柄。這是一個(gè)有特殊含義的值(NULL)。GetMessage為任何屬丁調(diào)用線程的窗II檢索消息,線程消息通過(guò)PostThreadMessage寄送給調(diào)用線程。wMs

56、gFilterMin:指定彼檢索的最小消息值的整數(shù)。wMsgFilterMax:指定被檢索的最人消息值的整數(shù)。返回值:如果函數(shù)取得WM_QUITZ外的其他消息,返回非零值。如果函數(shù)取得WM_QUIT消息,返回值是零。如果出現(xiàn)了錯(cuò)誤,返回值是。例如,當(dāng)hWnd是無(wú)效的窗I1句柄或IpMsg是無(wú)效的指針時(shí)。若想獲得更多的錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。備注:應(yīng)用程序通常用返回值來(lái)確定是否終止主消息循壞并退出程序。GetMesssge只接收與參數(shù)hWnd標(biāo)識(shí)的窗口或子窗口相聯(lián)系的消息,子窗口由函數(shù)IsChild決定,消息值的范圍由參數(shù)wMsgFilterMin和wMsgFilterMa

57、x給出。如果hWnd為NULL,則GetMessage接收屬J:調(diào)用線程的窗II的消息,線程消息由函數(shù)PostThreadMessage寄送給調(diào)用線程。GetMessage不接收屬丁其他線程或其他線程的窗II的消息,即使hWnd為NULLo由PostThreadMessage寄送的線程消息,其消息hWnd值為NULL。如果wMsgFilterMin和wMsgFilterMax都為零,GetMessage返回所有可得的消息(即,無(wú)范圍過(guò)濾常數(shù)WM_KEYFIRST和WM_KEYAST可作為過(guò)濾值取得與鍵盤輸入相關(guān)的所有消息:常數(shù)WM_MOUSEFIRST和WM_MOUSELST町用來(lái)接收所有的鼠

58、標(biāo)消息。如果wMsgFilterMin和wMsgFilterMax都為零,GetMessage返回所有可得的消息(即,無(wú)范R習(xí)過(guò)濾)。GetMessage不從隊(duì)列里清除WM.PAINT消息。該消息將保留在隊(duì)列里直到處理完畢。注意,此函數(shù)的返回值可非零、零或-1,應(yīng)避免如下代碼出現(xiàn):while(GetMessage(IpMsg,hwnd0,0)一1返回值的可能性表示這樣的代碼會(huì)導(dǎo)致致命的應(yīng)用程序錯(cuò)誤。顯示窗口函數(shù):ShowWindow(hwnd,nCmdShow)參數(shù)hwnd表示所創(chuàng)建的窗II的句柄,第二個(gè)參數(shù)nCmdShow用來(lái)表示窗II初始狀態(tài)所顯示的形式,常見(jiàn)的有四種形式:SW.SHOWM

59、AXIMIZED(最大化一個(gè)窗口,并激活);SW_SHOWMINIMIZED(最小化一個(gè)窗口,并激活);SW_SHOWMINNOACTIVE(最小化一個(gè)窗口但不激活);SW_SHOWNORMAL(正常形式顯示一個(gè)窗口)消息循環(huán)函數(shù):調(diào)用窗II刷新函數(shù)后,窗II顯示完畢,Z后的程序需要處理的是由鍵盤和鼠標(biāo)發(fā)送的消息。Windows是基丁消息驅(qū)動(dòng)機(jī)制的,windows會(huì)為當(dāng)前運(yùn)行的每個(gè)windows程序維護(hù)一個(gè)消息隊(duì)列。當(dāng)發(fā)生某個(gè)事件后,windows將事件轉(zhuǎn)換為對(duì)應(yīng)的消息,并將消息放入相應(yīng)的“消息隊(duì)列”。然后,程序從自己的消息隊(duì)列中按一定的次序讀取消息并發(fā)送給相應(yīng)的窗II函數(shù)消息結(jié)構(gòu)體MSG在W

60、INUSE.H中定義如下:typedefstructtagMSGHWNDhwnd;WPARAMLPATAMDWORDwParam;IParam;time;其中POINT也是一個(gè)結(jié)構(gòu)體,用以表示屏幕上的一個(gè)點(diǎn)的坐標(biāo),其定義如下:typedefstructtagPOINTLONGX;LONGY;;消息結(jié)構(gòu)(MSG)各個(gè)域的定義如下:hwnd接收消息的窗口的句柄。Message消息標(biāo)識(shí)符。wparam消息參數(shù),其含義和數(shù)值依據(jù)消息的不同而不同。Lparam消息參數(shù),其含義與消息有關(guān)。Time,消息進(jìn)入隊(duì)列的時(shí)間。Pt,消息進(jìn)入隊(duì)列時(shí)鼠標(biāo)的坐標(biāo)。整個(gè)消息循壞從GetMessage函數(shù)調(diào)用開(kāi)始,從消息隊(duì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論