




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、在windows程序中,始化應(yīng)用程序,顯示主窗口,進(jìn)入一個(gè)消息接收一發(fā)送循環(huán),這個(gè) 循環(huán)是應(yīng)用程序執(zhí)行的其余部分的頂級(jí)控制結(jié)構(gòu)。大體的編程步驟如下:1. w inmain編程入口(類似于main不過ma in是控制臺(tái)程序);2.初始化wndclass結(jié)構(gòu)體wnd,包含一個(gè)窗口類的全部信息;3.向 winndows 注冊(cè)窗體 registerclass (&wnd) 4.創(chuàng)建窗體createw i ndow并且顯示5. 循環(huán)接收消息getmessage;6. 循環(huán)發(fā)送將接收到的消息發(fā)送出去postmessage;7. callback函數(shù)接收并處理消息。f面我們就逐一講解以上的七個(gè)步驟:
2、w inmainwinmain是一個(gè)函數(shù),該函數(shù)的功能是被系統(tǒng)調(diào)用,作為一個(gè)32位應(yīng)用程序的入口點(diǎn)。 winmain函數(shù)應(yīng)初始化應(yīng)用程序,int winapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr ipcmdline,int ncmdshow);hinstance:應(yīng)用程序當(dāng)前實(shí)例的句柄。hprevinstance:應(yīng)用程序的先前實(shí)例的句柄。對(duì)于同一個(gè)程序打開兩次,出現(xiàn)兩個(gè)窗口第一次打開的窗口就 是先前實(shí)例的窗口。對(duì)于一個(gè)32位程序,該參數(shù)總為nullo如果需要檢測另外一個(gè)實(shí)例是否已經(jīng)存在,則使用createmute
3、x函數(shù)創(chuàng)建一個(gè)獨(dú)一無二 的名字。即使互斥名已經(jīng)存在,createmutex函數(shù)也是成功的,但是getlasterror函數(shù)將 返回error_already_exists,這就表明應(yīng)用程序有另外一個(gè)實(shí)例存在,因?yàn)樗紫葎?chuàng)建了 互斥名。ipcmdli ne:指向應(yīng)用程序命令行的字符串的指針,不包括執(zhí)行文件名。獲得整個(gè)命令行,參看 getcommandli ne。第三個(gè)參數(shù)i pcmdl i ne是一個(gè)以空終止的字符串,指定傳遞給應(yīng)用程序的命令行參數(shù)。例如: 在d盤下有一個(gè)sunxin.txt文件,當(dāng)我們用鼠標(biāo)雙擊這個(gè)文件時(shí)將啟動(dòng)記事本程序(notepad, exe),此時(shí)系統(tǒng)會(huì)將d:sunxin
4、. txt作為命令行參數(shù)傳遞給記事本程序的 winmain函數(shù),記事本程序在得到這個(gè)文件的全路徑名后,就在窗口中顯示該文件的內(nèi)容。 要在vc+開發(fā)環(huán)境中向應(yīng)用程序傳遞參數(shù),可以單擊菜單【project】t settings,選 擇“debug”選項(xiàng)卡,在“program arguments,編輯框中輸入你想傳遞給應(yīng)用程序的參數(shù)。ncmdshow:指明窗口如何顯示。該參數(shù)可以是下列值之一:sw.hide:隱藏窗口并且激活另外一個(gè)窗口。sw.minimize:最小化指定的窗口,并且激活在系統(tǒng)表中的頂層窗口。sw_restore:激活并顯示窗口。如果窗口已經(jīng)最小化或最大化,系統(tǒng)將以恢復(fù)到原來的 尺寸
5、和位置顯示窗口(與sw_sh0wn0rmal相同)。sw_sh0w:激活一個(gè)窗口并以原來的尺寸和位置顯示窗口。sw.showmax imi zed :激活窗口并且將其最大化。sw.showm inimi zed :激活窗口并將其目標(biāo)化。sw_sh0wminnoactive:將一個(gè)窗口顯示為圖標(biāo)。激活窗口維持活動(dòng)狀態(tài)。sw_sh0wna:以窗口的當(dāng)前狀態(tài)顯示窗口。激活窗口保持活動(dòng)狀態(tài)。sw_shownoactivate:以窗口的最近一次的尺寸和位置顯示窗口。激活窗口維持激活狀osw_sh0wn0rmal:激活并顯示窗口。如果窗口最大化或最小化,系統(tǒng)將其恢復(fù)到原來的尺寸 和位置(與sw_resto
6、re相同)。wndclasswndclass是一個(gè)由系統(tǒng)支持的結(jié)構(gòu),用來儲(chǔ)存某一類窗口的信息,如classstyle, 消息處理函數(shù),icon, cursor,背景brush等。也就是說,createwi ndow只是將某個(gè) wndclass定義的窗體變成實(shí)例。要得到某一窗口的wndclass數(shù)據(jù),可以用getclasslongo ;registerclasso就是在系統(tǒng)注冊(cè)某一類型的窗體。也就是將你提供的wndclass 數(shù)據(jù)注冊(cè)為一個(gè)窗口類,在wndclass. ipszclassname中定義該wndclass的標(biāo)識(shí), 無論createwi ndow或createwi ndowex創(chuàng)建的
7、窗口都必須對(duì)應(yīng)一個(gè)wndclass, 但一個(gè)wndclass可以有多個(gè)窗口對(duì)象。有一些系統(tǒng)預(yù)定義的窗口類,如:classname二_t (“button" or “combobox" or ”ed it” or “l(fā)istbox“ or ”mdi cl i ent” or ”scollbar” or "static")要用這些窗體,直接用createwi ndow創(chuàng)建相應(yīng)對(duì)象就是了。要得到某一窗口的窗口類,可以用getclassnameo ;wndclass中的回調(diào)函數(shù)是窗體的消息處理函數(shù):callback winproc(message msg,lpa
8、ram i param,wparam wparam) 結(jié)構(gòu)wndclass包含一個(gè)窗口類的全部信息,也是windows編程中使用的基本數(shù) 據(jù)結(jié)構(gòu)之一,應(yīng)用程序通過定義一個(gè)窗口類確定窗口的屬性,定義如下:typedef struct _wndclass uint style;wndproc ipfnwndproc;int cbcisextra;int cbwndextra;hinstance hinstance;hi con hl con;hcursor hcursor;hbrush hbrbackground;lpctstr ipszmenuname;lpctstr ipszciassname
9、; wndclass, *pwndclass;wndclass結(jié)構(gòu)包含了 registerclass函數(shù)注冊(cè)的類屬性style:指定類風(fēng)格。這些風(fēng)格可通過按位或操作組合起來。風(fēng)格如下: cs.bytealignclient:在字節(jié)邊界上(在x方向上)定位窗口的用戶區(qū)域的位置 cs.bytealignwindow:在字節(jié)邊界上(在x方向上)定位窗口的位置 cs_classdc:該窗口類的所有窗口實(shí)例都共享一個(gè)窗口類dccs_dblclks:允許向窗口發(fā)送雙擊鼠標(biāo)鍵的消息cs_globalclass :當(dāng)調(diào)用 createw i ndow 或 createw i ndowex 函數(shù)來創(chuàng)建窗口 時(shí)允
10、許它的h instance參數(shù)和注冊(cè)窗口類時(shí)傳遞給registerclass的h i nstance參數(shù)不同。如果不指定該風(fēng)格,則這兩個(gè) h i nstance必須相同。cs_hredraw:當(dāng)水平長度改變或移動(dòng)窗口時(shí),重畫整個(gè)窗口cs.noclose:禁止系統(tǒng)菜單的關(guān)閉選項(xiàng)cs.owndc:給予每個(gè)窗口實(shí)例它本身的dco注意,盡管這樣是很方便,但它必 須慎重使用,因?yàn)槊總€(gè)dc大約要占800個(gè)字節(jié)的內(nèi)存。cs_parentdc:將子窗口的裁剪區(qū)域設(shè)置到父窗口的dc中去,這樣子窗口便可以 在父窗口上繪制自身。注意,這是子窗口還是從系統(tǒng)緩存中獲取dc,而不是使用父窗 口的dc。使用該風(fēng)格可以提高系
11、統(tǒng)性能。cs_savebits:以位圖形式保存被該窗口遮擋的屏幕部分,這樣當(dāng)給窗口移動(dòng)以 后,系統(tǒng)便可以用該保存的位圖恢復(fù)屏幕移動(dòng)的相應(yīng)部分,從而系統(tǒng)不用向被該窗口 遮擋的窗口發(fā)送wm_paint消息。該特性對(duì)于菜單類型的窗口比較合適,因?yàn)樗ǔ?是簡短的顯示一下之后便消失。設(shè)置該特性將增加顯示該窗口的時(shí)間,因?yàn)樗ǔR?先分配保存位圖的內(nèi)存。cs_vredraw:當(dāng)垂直長度改變或移動(dòng)窗口時(shí),重畫整個(gè)窗口ipfnwndproc:指向窗口過程cbcisextra:指定緊隨在wndclass數(shù)據(jù)結(jié)構(gòu)后分配的字節(jié)數(shù)。系統(tǒng)將其初始化 為零。cbwndextra:指定緊隨在窗口實(shí)例之后分配的字節(jié)數(shù),系統(tǒng)
12、將其初始化為零。如 果應(yīng)用程序正在用wndclass結(jié)構(gòu)注冊(cè)一個(gè)在rc資源描述文件中用class指令創(chuàng)建的對(duì)話框時(shí),它必須設(shè)置這個(gè)字段為 dlgwindowextraohlnstance:標(biāo)識(shí)了該窗口類的窗口過程所在的模塊實(shí)例的句柄,不能為null。 hl con:標(biāo)識(shí)了該窗口類的圖標(biāo)。hl con字段必須是一個(gè)圖標(biāo)的句柄;若hl con 字段為null,則無論何時(shí)用戶把應(yīng)用程序縮至最小時(shí),應(yīng)用程序必須畫一個(gè)圖標(biāo)。hcursor :標(biāo)識(shí)該窗口類的光標(biāo),hcursor必須是一個(gè)光標(biāo)資源的句柄。若 hcursor字段為null,則無論何時(shí)鼠標(biāo)移到應(yīng)用程序窗口時(shí),應(yīng)用程序必須顯式設(shè)置 光標(biāo)形狀。hb
13、rbackground :標(biāo)識(shí)了該窗口類的背景畫筆。hbrbackground字段必須是用于 繪制背景的物理刷子的句柄,或者是一個(gè)顏色的值。如果給出一個(gè)顏色的值,它必須 是下面列出的標(biāo)準(zhǔn)系統(tǒng)顏色之一(系統(tǒng)將對(duì)所選顏色加1) o如果給出了顏色值,它 必須是轉(zhuǎn)換成下列的hbrush類型之一的顏色:c0l0r_activeb0rderc0l0r_activecapti0nc0l0r_appw0rkspacec0l0r_backgr0undc0l0r_btnfacec0l0r_bthshad0wc0l0r_btntextc0l0r_capti0ntextc0l0r_graytextcolor_high
14、lightcolor_highlighttextc0l0r_inactiveborderc0l0r_inactivecaptionc0l0r_menucolor_menutextc0l0r_scr0llbarc0l0r_windowc0l0r_wind0wframec0l0r_wind0wtext當(dāng)hbrbackground字段為null時(shí),每當(dāng)需要繪制其用戶區(qū)域時(shí),應(yīng)用程序必須 自己來繪制其背景。應(yīng)用程序可以通過處理wm_erasebkgnd消息或檢查由 beg inpai nt函數(shù)填寫的paintstruct結(jié)構(gòu)的ferase字段來確定背景什么時(shí)候需 要著色。ipszmenuname指向n
15、ull結(jié)束的字符串,該字符串描述菜單的資源名,如同在資源文件里顯示 的名字一樣。若使用一個(gè)整數(shù)標(biāo)識(shí)菜單,可以使用makeintresource宏。如果 ipszmenuname 為 null,那么該窗口類的窗口將沒有默認(rèn)菜單。i pszciassname指向null結(jié)束的字符串,或者是一個(gè)原型(atom) o若該參數(shù)是一個(gè)原型,它必 須是一有先前調(diào)用registerclass或者reg i sterc i assex函數(shù)產(chǎn)生的類原型。類 原型必須作為i pszc i assname的低字,高字必須為0.若i pszc i assname是一個(gè) 字符串,它描 述了窗口類名。這個(gè)類名可以是由reg
16、isterclass或者reg i sterc i assex注冊(cè)的名字, 或者是任何預(yù)定義的控件類名。結(jié)構(gòu)信息header 在 wi nuser. h 聲明,包含 wi ndows. hreg i sterci ass函數(shù)功能:該函數(shù)注冊(cè)在隨后調(diào)用createwindow函數(shù)和createw i ndowex函數(shù) 中使用的窗口類。registerclass函數(shù)己經(jīng)由函數(shù)reg i sterc i assex函數(shù)來代替, 但是,如果不需要設(shè)置類的小目標(biāo)則仍然可以使用registerclass函數(shù)。函數(shù)原型:atom registerclass (const wndclass *lpwndcla
17、ss);參數(shù):ipwndclass:指向一個(gè)wndclass結(jié)構(gòu)的指針。在將它傳遞給函數(shù)之前,必須在 該結(jié)構(gòu)中填充適當(dāng)?shù)念悓傩浴7祷刂担喝绻瘮?shù)成功,返回值是唯一標(biāo)識(shí)已注冊(cè)的類的一個(gè)原子;如果函數(shù)失 敗,返回值為0。若想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用getlasterror函數(shù)。備注:如果使用registerclassa來注冊(cè)窗口,應(yīng)用程序通知系統(tǒng)被注冊(cè)類的窗 口的消息使用ansi字符集的文本和字符參數(shù);如果使用registerclassw來注冊(cè)窗口, 應(yīng)用程序需要系統(tǒng)以u(píng)nicode來傳遞消息的文本參數(shù)。iswindowllnicode函數(shù)使應(yīng)用 程序可以查詢每一個(gè)窗口的字符特征。參看win32a
18、pi中的ansi和unicode函數(shù),請(qǐng)查閱 funct i ont prototypeo應(yīng)用程序注冊(cè)的所有的窗口類在應(yīng)用程序中止后都為未注冊(cè)的類。windows 95:所有由dll注冊(cè)的類在dll卸載后均未注冊(cè)的類。windows nt:所有由dll注冊(cè)的類在dll卸載后仍為已注冊(cè)的類。windows 95:如果 wndclassex 結(jié)構(gòu)中的 cbwndextra 或 cbcisextra 單元包含字 節(jié)數(shù)超過40個(gè)字節(jié),則registerclassex將失敗。wi ndows ce:由 i pwndc i ass 參數(shù)指向的 wndclas 結(jié)構(gòu)不支持 i pszmenuname 域,
19、因?yàn)閣i ndowsce不支持缺省菜單。除非使用了 windowsce的i concurs組件(這個(gè)組件提供了在適當(dāng)目標(biāo)平臺(tái)上的 鼠標(biāo)支持),否則不能使用由ipwndclass指向的wndclass結(jié)構(gòu)中的hcursor域。createwindow該函數(shù)創(chuàng)建一個(gè)重疊式窗口、彈出式窗口或子窗口。它指定窗口類,窗口標(biāo)題,窗口風(fēng) 格,以及窗口的初始位置及大?。蛇x的)。函數(shù)也指該窗口的父窗口或所屬窗口(如果存 在的話),及窗口的菜單。若要使用除createwindow函數(shù)支持的風(fēng)格外的擴(kuò)展風(fēng)格,則使用 createwindowex 函數(shù)代替 createwindow 函數(shù)。hwnd createwi
20、ndow(lpctstr ipciassname,lpctstr ipwindowname,dword dwstyle,int x,int y,int nwidth,int nheight,hwnd hwndparent,hmenu hmenu,handle hinstance,lpvoid ipparam);參數(shù)ipciassname指向一個(gè)空結(jié)束的字符串或整型數(shù)atomo如果該參數(shù)是一個(gè)整型量,它是由此前調(diào)用 theglobaiaddatom函數(shù)產(chǎn)生的全局量。這個(gè)小于oxcooo的16位數(shù)必須是ipciassname參 數(shù)字的低16位,該參數(shù)的高位必須是0。如果ipciassname是一個(gè)
21、字符串,它指定了窗口的類名。這個(gè)類名可以是任何用函數(shù) registerclassex注冊(cè)的類名,或是任何預(yù)定義的控制類名。請(qǐng)看說明部分的列表。lpwi ndowname指向一個(gè)指定窗口名的空結(jié)束的字符串指針。如果窗口風(fēng)格指定了標(biāo)題條,由ipwindowname指向的窗口標(biāo)題將顯示在標(biāo)題條上。當(dāng) 使用createwindow函數(shù)來創(chuàng)建控制例如按鈕,選擇框和靜態(tài)控制時(shí),可使用i pwi ndowname 來指定控制文本。dwstyie指定創(chuàng)建窗口的風(fēng)格。該參數(shù)可以是下列窗口風(fēng)格的組合再加上說明部分的控制風(fēng)格。 風(fēng)格意義:ws_border:創(chuàng)建一個(gè)單邊框的窗口。ws.capt10n:創(chuàng)建一個(gè)有標(biāo)題
22、框的窗口(包括ws_boder風(fēng)格)。ws_ch ild:創(chuàng)建一個(gè)子窗口。這個(gè)風(fēng)格不能與ws.popup風(fēng)格合用。ws_chldwindow:與 ws_ch ild 相同。ws_clipchildren:當(dāng)在父窗口內(nèi)繪圖時(shí),排除子窗口區(qū)域。在創(chuàng)建父窗口時(shí)使用這個(gè)風(fēng) 格。ws_cl ipblings ;排除子窗口之間的相對(duì)區(qū)域,也就是,當(dāng)一個(gè)特定的窗口接收到 wm_paint消息時(shí),ws_cl ips i blings風(fēng)格將所有層疊窗口排除在繪圖之外,只重繪指定的 子窗口。如果未指定ws_cl i ps i bl i ngs風(fēng)格,并且子窗口是層疊的,則在重繪子窗口的客戶 區(qū)時(shí),就會(huì)重繪鄰近的子窗
23、口。ws.disabled:創(chuàng)建一個(gè)初始狀態(tài)為禁止的子窗口。一個(gè)禁止?fàn)顟B(tài)的窗口不能接受來自用 戶的輸入信息。ws_dlgframe:創(chuàng)建一個(gè)帶對(duì)話框邊框風(fēng)格的窗口。這種風(fēng)格的窗口不能帶標(biāo)題條。ws.group:指定一組控制的第一個(gè)控制。這個(gè)控制組由第一個(gè)控制和隨后定義的控制組 成,自第二個(gè)控制開始每個(gè)控制,具有ws_group風(fēng)格,每個(gè)組的第一個(gè)控制帶有wsabstop 風(fēng)格,從而使用戶可以在組間移動(dòng)。用戶隨后可以使用光標(biāo)在組內(nèi)的控制間改變鍵盤焦點(diǎn)。ws.hscroll:創(chuàng)建一個(gè)有水平滾動(dòng)條的窗口。ws_iconic:創(chuàng)建一個(gè)初始狀態(tài)為最小化狀態(tài)的窗口。與ws.minimize風(fēng)格相同。ws_
24、maximize:創(chuàng)建一個(gè)初始狀態(tài)為最大化狀態(tài)的窗口。ws_maximizebox:創(chuàng)建一個(gè)具有最大化按鈕的窗口。該風(fēng)格不能與ws_ex_contexthelp 風(fēng)格同時(shí)出現(xiàn),同時(shí)必須指定ws_sysmenu風(fēng)格。ws_overlapped:產(chǎn)生一個(gè)層疊的窗口。一個(gè)層疊的窗口有一個(gè)標(biāo)題條和一個(gè)邊框。與ws_tiled風(fēng)格相同。ws_overlappedw indow :創(chuàng)建一個(gè)具有 ws_overlapped , ws_capt i on , ws_sysmenu ws_thickframe, ws_minimizebox, ws_maximizebox 風(fēng)格的層疊窗口,與 ws_tiledw
25、indow 風(fēng)格相同。ws_popup;創(chuàng)建一個(gè)彈出式窗口。該風(fēng)格不能與ws_chld風(fēng)格同時(shí)使用。ws_popuwindow :創(chuàng)建一個(gè)具有 ws_border , ws_popup, ws_sysmenu 風(fēng)格的窗口, ws_capt i on和ws_popupw i ndow必須同時(shí)設(shè)定才能使窗口某單可見。ws_s izebox:創(chuàng)建一個(gè)可調(diào)邊框的窗口,與wshickframe風(fēng)格相同。ws.sysmenu:創(chuàng)建一個(gè)在標(biāo)題條上帶有窗口菜單的窗口,必須同時(shí)設(shè)定ws_capt i on風(fēng) 格。ws.tabstop:創(chuàng)建一個(gè)控制,這個(gè)控制在用戶按下tab鍵時(shí)可以獲得鍵盤焦點(diǎn)。按下 tab鍵后使
26、鍵盤焦點(diǎn)轉(zhuǎn)移到下一具有wsabstop風(fēng)格的控制。ws_thickframe:創(chuàng)建一個(gè)具有可調(diào)邊框的窗口,與ws_sizebox風(fēng)格相同。ws_tiled:產(chǎn)生一個(gè)層疊的窗口。一個(gè)層疊的窗口有一個(gè)標(biāo)題和一個(gè)邊框。與 ws_overlapped 風(fēng)格相同。wsi ledw i ndow:創(chuàng)建一個(gè)具有 ws_overlapped , ws_capt i on , ws_sysmenu , ws_thickframe, ws_minimizebox, ws_maxmizebox 風(fēng)格的層疊窗口。與 ws_overlappedwindow 風(fēng)格相同。ws_visible創(chuàng)建一個(gè)初始狀態(tài)為可見的窗口。w
27、s_vscroll:創(chuàng)建一個(gè)有垂直滾動(dòng)條的窗口。x指定窗口的初始水平位置。對(duì)一個(gè)層疊或彈出式窗口,x參數(shù)是屏幕坐標(biāo)系的窗口的左 上角的初始x坐標(biāo)。對(duì)于子窗口,x是子窗口左上角相對(duì)父窗口客戶區(qū)左上角的初始x坐標(biāo)。 如果該參數(shù)被設(shè)為cw.usedefault則系統(tǒng)為窗口選擇缺省的左上角坐標(biāo)并忽略y參數(shù)。 cw_usedefault只對(duì)層疊窗口有效,如果為彈出式窗口或子窗口設(shè)定,則x和y參數(shù)被設(shè)為 零。y指定窗口的初始垂直位置。對(duì)一個(gè)層疊或彈出式窗日,y參數(shù)是屏幕坐標(biāo)系的窗口的左 上角的初始y坐標(biāo)。對(duì)于子窗口,y是子窗口左上角相對(duì)父窗口客戶區(qū)左上角的初始y坐標(biāo)。 對(duì)于列表框,y是列表框客戶區(qū)左上角相
28、對(duì)父窗口客戶區(qū)左上角的初始y坐標(biāo)。如果層疊窗 口是使用ws_visible風(fēng)格位創(chuàng)建的并且x參數(shù)被設(shè)為cw_usedefault,則系統(tǒng)將忽略y參 數(shù)。nwi dth以設(shè)備單元指明窗口的寬度。對(duì)于層疊窗口,nwidth或是屏幕坐標(biāo)的窗口寬度或是 cw_usedefaulto若nwidth是cwjjsedefault,則系統(tǒng)為窗口選擇一個(gè)缺省的高度和寬度: 缺省寬度為從初始x坐標(biāo)開始到屏幕的右邊界,缺省高度為從初始x坐標(biāo)開始到目標(biāo)區(qū)域的 頂部。cw_usedefault只參層疊窗口有效;如果為彈出式窗口和子窗口設(shè)定cw_usedefault 標(biāo)志則nwidth和nheight被設(shè)為零。nheig
29、ht以設(shè)備單元指明窗口的高度。對(duì)于層疊窗口 , nheight是屏幕坐標(biāo)的窗口寬度。若nwidth 被設(shè)為cw_usedefault,則系統(tǒng)忽略“height參數(shù)。hwndparent指向被創(chuàng)建窗口的父窗口或所有者窗口的旬柄。若要?jiǎng)?chuàng)建一個(gè)子窗口或一個(gè)被屬窗口, 需提供一個(gè)有效的窗口句柄。這個(gè)參數(shù)對(duì)彈出式窗口是可選的。windows nt 5.0;創(chuàng)建一個(gè) 消息窗口,可以提供hwnd_message或提供一個(gè)己存在的消息窗口的句柄。hmenu菜單句柄,或依據(jù)窗口風(fēng)格指明一個(gè)子窗口標(biāo)識(shí)。對(duì)于層疊或彈岀式窗口,hmenu指定 窗口使用的菜單:如果使用了菜單類,則hmenu可以為nullo對(duì)于子窗口,
30、hmenu指定了該 子窗口標(biāo)識(shí)(一個(gè)整型量),一個(gè)對(duì)話框使用這個(gè)整型值將事件通知父類。應(yīng)用程序確定子 窗口標(biāo)識(shí),這個(gè)值對(duì)于相同父窗口的所有子窗口必須是唯一的。hinstance與窗口相關(guān)聯(lián)的模塊事例的句柄。ipparam指向一個(gè)值的指針,該值傳遞給窗口 wm_create消息。該值通過在iparam參數(shù)中的 createstruct結(jié)構(gòu)傳遞。如果應(yīng)用程序調(diào)用createwindow創(chuàng)建一個(gè)mdi客戶窗口,則 i pparam 必須指向一個(gè) cl ientcreatestruct 結(jié)構(gòu)。返回值:如果函數(shù)成功,返回值為新窗口的句柄:如果函數(shù)失敗,返回值為null。若 想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用ge
31、tlasterror函數(shù)。備注在返回前,createwindow給窗口過程發(fā)送一個(gè)wm_create消息。對(duì)于層疊,彈出式和 子窗口,createwindow 給窗 口發(fā)送 wm_create, wm_getm inmax info 和 wm_nccreate 消息。 消息wm_create的iparam參數(shù)包含一個(gè)指向createstruct結(jié)構(gòu)的指針。如果指定了 ws_visible風(fēng)格,createwindow向窗口發(fā)送所有需要激活和顯示窗口的消息。編輯本段其它參數(shù)獲取有關(guān)任務(wù)條是否為創(chuàng)建的窗口顯示一個(gè)按鈕的控制信息,參看taskbar按鈕的 vi sb iiityo以下預(yù)定義的控制類可
32、以在ipciassname參數(shù)中指定。注意在dwstyle參數(shù)中可以使用 的相應(yīng)的控制風(fēng)格。button按鈕按鈕是一個(gè)小矩形子窗口,用戶可以點(diǎn)擊來打開或關(guān)閉。按鈕控制可以單獨(dú)使用或包含 在組中使用,可以為控制寫標(biāo)簽或不寫標(biāo)簽。當(dāng)用戶點(diǎn)擊按鈕控制時(shí)按鈕的外觀有明顯的改 變。請(qǐng)參看buttono查看dwstyie參數(shù)中指定的按鈕風(fēng)格表請(qǐng)參考button style。combobox組合框由一個(gè)列表框和一個(gè)類似于編輯控制的選擇域組成。在使用這個(gè)風(fēng)格 控制時(shí),應(yīng)用程序或者使列表框一直顯示或者是作成一個(gè)下拉列表。如果列表框可見,則在 編輯域中輸入字符將使列表框中與字符一致的第一個(gè)域高亮。反之,在列表框中
33、選擇的項(xiàng)將 顯示在編輯域中。請(qǐng)參看combo boxeso查看dwsty i e參數(shù)中指定的組合框風(fēng)格表請(qǐng)參考combo boxes sty leoedit編輯框一個(gè)小的矩形子窗口用戶可以使用鍵盤向其中輸入文本。用戶可以通過點(diǎn) 擊或按tab鍵來選中編輯框控制并且使控制獲得焦點(diǎn)。當(dāng)編輯框中顯示一個(gè)閃爍的插入記號(hào) 時(shí),用戶可以輸入文本。使用鼠標(biāo)移動(dòng)光標(biāo),選擇被替換的字符或設(shè)置插入字符的位置或使 用回退鍵刪除字符。請(qǐng)參看edito controlso查看dwstyle參數(shù)中指定的編輯框風(fēng)格的表格請(qǐng)參考edit control styleolistbox列表框字符串的列表。當(dāng)應(yīng)用程序必須顯示名稱的列表
34、,例如文件名列表等, 使用戶可以從中選擇時(shí)就可指定列表框。用戶可以通過單擊來選擇名稱。選擇時(shí),被選擇名 高亮,同時(shí)傳遞給父窗口一個(gè)通知消息。請(qǐng)參看list box style。查看dwstyie參數(shù)中指 定的列表風(fēng)格表請(qǐng)參考li st box control styleomdi cl i ent mdi客戶設(shè)計(jì)出mdi客戶窗口窗口接收控制mdi應(yīng)用程序子窗口的消息。建議使用兩種控制風(fēng)格位:ws_clipchildren 和ws_childo指定了 ws_hscroll和ws_vscroll風(fēng)格的mdi客戶窗口允許用戶將mdi子窗 口滑動(dòng)進(jìn)入視窗。請(qǐng)參看mdi。richedit設(shè)計(jì)一個(gè)rich
35、editl.o版的控制。該控制使用戶可以以字符和段落格式測覽 和編輯文本,并且可以包含嵌入的com對(duì)象。請(qǐng)參看rich edit controlso查看dwstyie 參數(shù)中指定的r i ched i t風(fēng)格表請(qǐng)參考l i st box contro i sty i e。richedit class設(shè)計(jì)一個(gè)rich edik2. 0版的控制。該控制使用戶可以以字符和段落格 式測覽和編輯文本,并且可以包含嵌入的com對(duì)象。請(qǐng)參看r i ched i tcontro i s。查看dwsty i e 參數(shù)中指定的ri ched it風(fēng)格表請(qǐng)參考r i ched i tcontro i sty i e
36、oscrollbar滾動(dòng)條設(shè)計(jì)的一個(gè)包含著一個(gè)滾動(dòng)盒和兩端有方向箭頭的矩形。只要用戶點(diǎn) 擊了控制,滾動(dòng)條就給父窗口發(fā)送一個(gè)通知消息。如有必要,父窗口負(fù)責(zé)更新滾動(dòng)條的位置。 請(qǐng)參看scrol ibarso查看dwstyie參數(shù)中指定的滾動(dòng)條風(fēng)格表請(qǐng)參考scrol i bars style。 static-個(gè)簡單的靜態(tài)文本域文本盒或矩形用于給控制加標(biāo)簽,組合控制或?qū)⒖刂婆c其他控制分開。靜態(tài)控制不提供輸入和也不提供輸出。請(qǐng)參看static control styleso查看dwstyie 參數(shù)中指定的靜態(tài)文本風(fēng)格表請(qǐng)參考scrol i bars style。windows95:系統(tǒng)可以支持最大16,
37、 364個(gè)窗口句柄。備注:如果在鏈接應(yīng)用程序時(shí)指明是windows 4.x版本,除非應(yīng)用程序的窗口有窗口某 單,否則窗口控制沒有標(biāo)題控制。對(duì)windows3. x版本沒有這種要求。windows cecreatewindow是以"宏"方式完成的。它被定義為createwindowex,并且dwexstyie 參數(shù)被置為長整數(shù)0。不支持菜單條控制,除非被聲明為子窗口標(biāo)志否則hmenu參數(shù)必須為 nullo不支持mdiclient窗口類。dwstyie參數(shù)可以是對(duì)話框(dialogue box),窗口 (windows),控制(controls)文件中的窗口風(fēng)格和控制風(fēng)格的組合
38、。編輯本段下列dwsty i e標(biāo)志在窗口中不支持ws ch ildwindow ws ic0nc ; ws maxmi ze ws max imizeb0x ; ws minimize ws_minimizebox;ws_overlappedwindow ws_p0pupwindow ; ws_sizeboxwshickframe ws_tiled ws_tiledwindow下列dwsty ie標(biāo)志在控制和對(duì)話框中不支持: 不支持的按鈕風(fēng)格和靜態(tài)控制風(fēng)格bs_lefttext ss_blackframe; bs_multiline ss_grayframe bs_text ssjietap
39、 i ct; bs_userbutton ss_simple不支持組合框ss_wh iterect風(fēng)格。cbs_ownerdrawfixed ss_blackrect ; cbs_ownwedrawvari able ss_grayrect ; cbs_simple8r 舊 htrlmage不支持列表框控制ss_wh iteframe風(fēng)格。lbs_nodata不支持的對(duì)話框風(fēng)格lbs_ownerdrawfixed ds_absali gn ; lbs_ownerdrawvari able ds_centermouse ; lbs standard ds contexthelp不支持滾動(dòng)條的ds
40、_f ixedsys風(fēng)格sbs_bottomali gn ds_nofailcreate; sbs_rightali gn ds_noidlemsg;sbs_sizeboxbottomrihtali gn ds_sysmodal; sbs_sizegrip 可使用bs_ownerdraw風(fēng)格來代替bs_userbutton風(fēng)格??墒褂胹s_left或ss丄eftnowordwrap風(fēng)格來代替靜態(tài)控制的ss_s imple風(fēng)格。 不支持mdiclient窗口類所有窗口都隱含 ws_clipsiblings 和 ws_clipchildren 風(fēng)格。getmessage函數(shù)getmessage是從
41、調(diào)用線程的消息隊(duì)列里取得一個(gè)消息并將其放于指定的結(jié)構(gòu)。 此函數(shù)可取得與指定窗口聯(lián)系的消息和由postthreadmesssge寄送的線程消息。此函數(shù)接收 一定范圍的消息值。getmessage不接收屬于其他線程或應(yīng)用程序的消息。獲取消息成功后, 線程將從消息隊(duì)列中刪除該消息。函數(shù)會(huì)一直等待直到有消息到來才有返回值。bool getmessage (lpmsg ipmsg, hwnd hwnd, uint wmsgfii termin, uint wmsgfii termax 參數(shù):ipmsg:指向msg結(jié)構(gòu)的指針,該結(jié)構(gòu)從線程的消息隊(duì)列里接收消息信息。hwnd:取得其消息的窗口的句柄。這是一個(gè)
42、有特殊含義的值(null)o getmessage為任 何屬于調(diào)用線程的窗口檢索消息,線程消息通過postthreadmessage寄送給調(diào)用線程。wmsgfi i termin:指定被檢索的最小消息值的整數(shù)。wmsgfi i termax:指定被檢索的最大消息值的整數(shù)。返回值:如果函數(shù)取得wm.quit之外的其他消息,返回非零值。如果函數(shù)取得wm_quit消息, 返回值是零。如果出現(xiàn)了錯(cuò)誤,返回值是-1。例如,當(dāng)hwnd是無效的窗口句柄或ipmsg是 無效的指針時(shí)。若想獲得更多的錯(cuò)誤信息,請(qǐng)調(diào)用getlasterror函數(shù)。應(yīng)用程序通常用返回值來確定是否終止主消息循環(huán)并退出程序。getmes
43、ssge只接收與參數(shù)hwnd標(biāo)識(shí)的窗口或子窗口相聯(lián)系的消息,子窗口由函數(shù) i sch i i d決定,消息值的范圍由參數(shù)wmsgfi itermi n和wmsgfi i termax給出。如果hwnd為 null,則getmessage接收屬于調(diào)用線程的窗口的消息,線程消息由函數(shù)postthreadmessage 寄送給調(diào)用線程。getmessage不接收屬于其他線程或其他線程的窗口的消息,即使hwnd為 nullo由postthreadmessage寄送的線程消息,其消息hwnd值為null。如果wmsgfi itermin 和wmsgfi i termax都為零,getmessage返回所
44、有可得的消息(即,無范圍過濾)。常數(shù)wm.keyfirst和wm_keyast可作為過濾值取得與鍵盤輸入相關(guān)的所有消息:常數(shù) wm_mousefirst和wm_mouselst可用來接收所有的鼠標(biāo)消息。如果wmsgfi i termin和 wmsgfi i termax都為零,getmessage返回所有可得的消息(即,無范圍過濾)。getmessage不從隊(duì)列里清除wm. paint消息。該消息將保留在隊(duì)列里直到處理完畢。 注意,此函數(shù)的返回值可非零、零或t,應(yīng)避免如下代碼出現(xiàn): while (getmessage (ipmsg, hwnd, 0, 0)-1返回值的可能性表示這樣的代碼會(huì)導(dǎo)致
45、致命的應(yīng)用程序錯(cuò)誤。postmessage函數(shù)功能:該函數(shù)將一個(gè)消息放入(寄送)到與指定窗口創(chuàng)建的線程相聯(lián)系消息隊(duì)列里, 不等待線程處理消息就返回,是異步消息模式。消息隊(duì)列里的消息通過調(diào)用getmessage和 peekmessage 取得。函數(shù)原型:bool postmessage (hwnd hwnd, uint msg, wparam wparam, lparam i param); 參數(shù)hwnd:其窗口程序接收消息的窗口的句柄。可取有特定含義的兩個(gè)值:hwnd. broadcast:消息被寄送到系統(tǒng)的所有頂層窗口,包括無效或不可見的非自身擁有 的窗口、被覆蓋的窗口和彈出式窗口。消息不被
46、寄送到子窗口。null:此函數(shù)的操作和調(diào)用參數(shù)dwthread設(shè)置為當(dāng)前線程的標(biāo)識(shí)符postthreadmessage 函數(shù)一樣。msg:指定被寄送的消息。wparam:指定附加的消息特定的信息。iparam:指定附加的消息特定的信息。返回值:如果函數(shù)調(diào)用成功,返回非零值:如果函數(shù)調(diào)用失敗,返回值是零。若想獲得 更多的錯(cuò)誤信息,請(qǐng)調(diào)用getlasterror函數(shù)。備注:需要以 hwnd_broadcast方式通信的應(yīng)用程序應(yīng)當(dāng)用函數(shù) reg i sterwi ndwosmessage來獲得應(yīng)用程序間通信的獨(dú)特的消息。如果發(fā)送一個(gè)低于wm_user范圍的消息給異步消息函數(shù) (postmessag
47、e. sendnot i fymessage, sendmesssgeca i i back),消息參數(shù)不能包含指針。否 則,操作將會(huì)失敗。函數(shù)將再接收線程處理消息之前返回,發(fā)送者將在內(nèi)存被使用之前釋放。callback 函數(shù)凡是由你設(shè)計(jì)卻由windows系統(tǒng)呼叫的函數(shù),統(tǒng)稱為callback函數(shù)。某些api函數(shù)要 求以 ca i i back 作為你參數(shù)之一。如 sett imer, li nedda, enumob jectso回調(diào)函數(shù)是由開發(fā)者按照一定的原形進(jìn)行定義的函數(shù)(每個(gè)回調(diào)函數(shù)都必須遵循這個(gè)原 則來設(shè)計(jì))例如:bool callback dialogproc(hwnd hwndd
48、igf / handle of dialog boxuint umsg, / messagewparam wparam, / fi rst message parameterlparam iparam / second message parameter);說明:回調(diào)函數(shù)必須有關(guān)鍵詞callback;回調(diào)函數(shù)本身必須是全局函數(shù)或者靜態(tài)函數(shù),不可定義為某個(gè)特定的類的成員函數(shù)2回調(diào)函數(shù)并不由開發(fā)者直接調(diào)用執(zhí)行(只是使用系統(tǒng)接口 api函數(shù)作為起點(diǎn))3回調(diào)函數(shù)通常作為參數(shù)傳遞給系統(tǒng)api,由該api來調(diào)用4回調(diào)函數(shù)可能被系統(tǒng)api調(diào)用一次,也可能被循環(huán)調(diào)用多次下面是個(gè)例子:#i nciude/包含應(yīng)
49、用程序中數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的定義long callback wndproc (hwnd, ui nt, wparam, lparam);/窗口說明/w inmai n函數(shù)是所有windows應(yīng)用程序的入口,類似c語言中的ma i n函數(shù) 其 功能是完成一系列的定義和初始化,并產(chǎn)生消息循環(huán)/*winmain函數(shù)實(shí)現(xiàn)以下功能:注冊(cè)窗口類,建立窗口及執(zhí)行其他必要的初始化 工作;進(jìn)入消息循環(huán),根據(jù)從應(yīng)用程序消息隊(duì)列接受的消息,調(diào)用相應(yīng)的處理過程; 當(dāng)消息循環(huán)檢測到wm_quit消息是終止程序運(yùn)行winmain函數(shù)有三個(gè)基本部分組成:函數(shù)說明、初始化和消息循環(huán)*/函數(shù)說明int winapi winmain(hinstance hinstance, / hand ie to current i nstancehinstance hprevinstance, / hand ie to prev i ous i nstancelpstr ipcmdl i net
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 夫妻貨款還款協(xié)議書
- 學(xué)校簽名安全協(xié)議書
- 大樓物業(yè)移交協(xié)議書
- 寧夏家政保險(xiǎn)協(xié)議書
- 夫妻共同債務(wù)協(xié)議書
- 基地開發(fā)戰(zhàn)略協(xié)議書
- 委托購車付款協(xié)議書
- 外墻清潔合同協(xié)議書
- 增收脫貧帶動(dòng)協(xié)議書
- 大學(xué)防火責(zé)任協(xié)議書
- 2025年入團(tuán)考試各科目試題及答案分析
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)2025年第一季度
- 成都設(shè)計(jì)咨詢集團(tuán)有限公司2025年社會(huì)公開招聘(19人)筆試參考題庫附帶答案詳解
- 2024年湖南省長沙市中考英語真題(原卷版)
- 2025年高三高考沖刺主題教育班會(huì):《高三考前心理調(diào)適指南:減壓賦能 輕松備考》-2024-2025學(xué)年高中主題班會(huì)課件
- 學(xué)校設(shè)計(jì)施工及運(yùn)營一體化(EPC+O)招標(biāo)文件
- 小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)進(jìn)位、退位加減法口算
- 2024年全國高中數(shù)學(xué)聯(lián)賽(浙江預(yù)賽)試題含參考答案
- 2024年安徽省初中學(xué)業(yè)水平考試生物試題含答案
- 2024年浙江省中考英語試題卷(含答案解析)
- MOOC 理解馬克思-南京大學(xué) 中國大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論