




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
12:50下午最簡單的Windows程序
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){
MessageBox(NULL,TEXT("地信2008級!"),TEXT("HelloMsg"),0);return0;}1.正如在C程序中的進(jìn)入點(diǎn)是函數(shù)main一樣,Windows程序的進(jìn)入點(diǎn)是WinMain2.Windows程序中的變量名經(jīng)常使用“匈牙利命名法”的命名系統(tǒng),該系統(tǒng)在變量名稱前面增加了表示變量數(shù)據(jù)類型的短前綴.在這里僅需記住前綴i表示int,sz表示”以零結(jié)束的字符串”;PSTR作為指向字符串的指針12:50下午3.MessageBox函數(shù)用于顯示短信息4.MessageBox第一個(gè)參數(shù)表示句柄,第二個(gè)參數(shù)是在消息框主體中顯示的字符串,第三個(gè)參數(shù)是出現(xiàn)在消息框標(biāo)題列上的字符串.MessageBox的第四個(gè)參數(shù)是系統(tǒng)中定義的一組以前綴MB_開始的常數(shù)的組合.可以為MB_OK,MB_OKCANCELMB_ABORTRETRYIGNOREMB_YESNOCANCEL12:50下午建立自己的窗口在Windows中,窗口一詞有確切的含義.一個(gè)窗口就是屏幕上的一個(gè)矩形區(qū)域,它接收使用者的輸入并以文字或圖形的格式顯示輸出內(nèi)容建立一個(gè)窗口,需要三個(gè)步驟注冊窗口類,使用RegisterClass(&wc);創(chuàng)建窗口,使用CreateWindow顯示窗口,使用ShowWindow(hwnd,nCmdShow); 和UpdateWindow(hwnd);
12:50下午窗口類typedefstruct_WNDCLASSA{
UINTstyle;//窗口樣式,一般設(shè)為0WNDPROClpfnWndProc;//指向窗口函數(shù)的指針intcbClsExtra;intcbWndExtra;HINSTANCEhInstance;//定義應(yīng)用程序?qū)嵗鼿ICONhIcon;//窗口的圖標(biāo)HCURSORhCursor;//窗口的光標(biāo)HBRUSHhbrBackground;//窗口的背景顏色LPCSTRlpszMenuName;//窗口的菜單名LPCSTRlpszClassName;//窗口的類名}說明:1)一些新的數(shù)據(jù)類型,如UINT,其實(shí)就是typedef后,unsignedint的名稱;2)句柄,在Windows中有很多象窗口,按鈕,圖標(biāo)等,需要標(biāo)識它們,為了區(qū)別于普通對象,使用”句柄”這各名稱,例如HINSTANCE當(dāng)前應(yīng)用程序句柄,HWND窗口句柄等12:50下午如何注冊窗口類
WNDCLASSwndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;//消息處理函數(shù)
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!"),szAppName,MB_ICONERROR);return0;}12:50下午創(chuàng)建窗口
hwnd=CreateWindow(szAppName,//窗口類別名,上一步結(jié)果
TEXT(“TheHelloProgram”),//窗口標(biāo)題WS_OVERLAPPEDWINDOW,//窗口風(fēng)格,可改
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,//窗口菜單句柄
hInstance,//程序?qū)嵗浔?/p>
NULL);
說明:CreateWindow傳回被建立的窗口的句柄,該句柄存放在變量hwnd中,后者被定義為HWND類型,句柄12:50下午顯示窗體在調(diào)用CreateWindow后,Windows內(nèi)部已經(jīng)建立了這個(gè)窗口.這就是說,Windows已經(jīng)配置了一塊內(nèi)存,用來保存在CreateWindow調(diào)用中指定窗口的全部信息跟一些其它信息,而Windows稍后就是依據(jù)窗口句柄找到這些信息如果要顯示窗體,還需要調(diào)用下面兩個(gè)函數(shù)ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);ShowWindow的第一個(gè)參數(shù)是窗口句柄,第二個(gè)參數(shù)確定如何在屏幕上顯示窗口,是一般大小、最小化還是最大化;例如可選SW_HIDE或SW_SHOWMAXIMIZED12:50下午消息循環(huán)窗口一旦創(chuàng)建并顯示,應(yīng)用程序的初始化工作即完成,隨后便是程序的消息循環(huán)部分
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}12:50下午補(bǔ)充知識:事件和消息Windows程序的特點(diǎn)是程序啟動(dòng)并建立窗體后,隨即進(jìn)入了一個(gè)等待狀態(tài),直到接收到某種刺激,比如鍵盤輸入,鼠標(biāo)單擊之后,程序才會跳出等待對這個(gè)刺激進(jìn)行處理,處理完畢后又進(jìn)入等待;而這種刺激把它叫做事件Windows根據(jù)消息來處理各種事件,系統(tǒng)已經(jīng)預(yù)先定義了很多消息,比如WM_LBUTTONDOWN為鼠標(biāo)左鍵點(diǎn)擊消息,WM_CLOSE關(guān)閉窗口產(chǎn)生的消息12:50下午補(bǔ)充知識:消息隊(duì)列系統(tǒng)為程序建立了叫做消息隊(duì)列的一個(gè)存儲空間,程序運(yùn)行過程發(fā)生一個(gè)事件,系統(tǒng)就把事件對應(yīng)的消息放入消息隊(duì)列中使用GetMessage函數(shù)取得消息隊(duì)列中的消息,并利用這個(gè)函數(shù)的返回值組織一個(gè)循環(huán)來不斷獲取消息,一旦獲取消息,就把這個(gè)消息送給系統(tǒng),這個(gè)循環(huán)叫做消息循環(huán)
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);//把鍵盤消息翻譯成字符消息DispatchMessage(&msg);//將消息發(fā)送給Windows系統(tǒng)}然后,Windows將該消息發(fā)送給適當(dāng)?shù)拇翱谙⑻幚沓绦?讓它進(jìn)行處理。12:50下午第二步消息處理的函數(shù)窗口建立好以后,需要有一個(gè)地方來處理消息.在Windows系統(tǒng)中,處理消息的地方叫做消息處理的函數(shù),在本例中是WndProc()函數(shù)LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)消息處理函數(shù)WndProc()是完成任務(wù)的核心,也是需要程序員編寫大量代碼的地方之前在定義窗口類的時(shí)候,必須把這個(gè)窗口函數(shù)的名稱WndProc()賦給WNDCLASS結(jié)構(gòu)的lpfnWndProc成員,指明這個(gè)窗口如果要響應(yīng)消息,就到窗口函數(shù)WndProc()中去處理12:50下午本例中的三個(gè)消息LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){ switch(message){ caseWM_CREATE: PlaySound(); return0;caseWM_PAINT:
caseWM_DESTROY:
}returnDefWindowProc(hwnd,message,wParam,lParam);}12:50下午WM_CREATE消息
WinMain中調(diào)用CreateWindow函數(shù)時(shí),WndProc接收這個(gè)消息在接收到WM_CREATE消息后,HELLOWIN在對這個(gè)消息的處理中播放一個(gè)名為HELLOWIN.WAV的聲音文件.它通過調(diào)用PlaySound函數(shù)來完成如果我們把WM_CREATE消息改為WM_LBUTTONDOWN消息,那么程序會發(fā)生什么變化呢12:50下午WM_PAINT消息當(dāng)窗口顯示區(qū)域的一部分顯示內(nèi)容或者全部變?yōu)椤睙o效”,以致于必須”更新畫面”時(shí),將由這個(gè)消息通知程序顯示區(qū)域的顯示內(nèi)容怎么會變得無效呢?在最初建立窗口的時(shí)候,整個(gè)顯示區(qū)域都是無效的,因?yàn)槌绦蜻€沒有在窗口上畫什么東西.第一條WM_PAINT消息(通常發(fā)生在WinMain中調(diào)用UpdateWindow時(shí))指示窗口消息處理程序在顯示區(qū)域上畫一些東西在使用者改變HELLOWIN窗口的大小后,顯示區(qū)域的顯示內(nèi)容重新變得無效.然后,窗口消息處理函數(shù)WndProc又將收到一條WM_PAINT消息在移動(dòng)窗口以致其相互重迭時(shí),Windows不保存一個(gè)窗口中被另一個(gè)窗口所遮蓋的內(nèi)容(因?yàn)閳D形數(shù)據(jù)很大);在這一部分不再被遮蓋之后,它就被標(biāo)志為無效.窗口消息處理程序接收到一條WM_PAINT消息,以重新繪制窗口的內(nèi)容12:50下午caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);//獲得窗口區(qū)域
DrawText(hdc,TEXT("Hello,Window
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路車輛運(yùn)輸管理辦法
- 學(xué)區(qū)教研工作管理辦法
- 三類醫(yī)療器械經(jīng)營企業(yè)質(zhì)量職責(zé)管理制度
- 安徽綠色產(chǎn)品管理辦法
- 慈溪物業(yè)服務(wù)管理辦法
- 西南交大預(yù)算管理辦法
- 周邊居住人員管理辦法
- 礦井坍塌事故緊急處理措施
- 逾期還款管理辦法細(xì)則
- 房產(chǎn)測繪分?jǐn)偣芾磙k法
- 2025年廣東省中考生物試卷真題(含答案解析)
- 第10課+遼夏金元的統(tǒng)治(大概念教學(xué)課件)2024-2025學(xué)年高一歷史上冊教學(xué)課件(統(tǒng)編版2019)
- 2024年中國甘肅省能源行業(yè)調(diào)查報(bào)告
- 中國聚丙烯酰胺行業(yè)市場發(fā)展分析及前景趨勢與投資研究報(bào)告2025-2028版
- 中廣核培訓(xùn)課件
- 百度公司環(huán)境管理制度
- 特殊工時(shí)制管理制度
- 駐非洲員工管理制度
- 統(tǒng)編版三年級語文下冊同步高效課堂系列第一單元復(fù)習(xí)課件
- 2025年高考生物真題(安徽)含答案
- 2025年高考真題-政治(黑吉遼卷) 含答案(黑龍江、吉林、遼寧、內(nèi)蒙古)
評論
0/150
提交評論