windows程序設計初步_第1頁
windows程序設計初步_第2頁
windows程序設計初步_第3頁
windows程序設計初步_第4頁
windows程序設計初步_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

12:50下午最簡單的Windows程序

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){

MessageBox(NULL,TEXT("地信2008級!"),TEXT("HelloMsg"),0);return0;}1.正如在C程序中的進入點是函數(shù)main一樣,Windows程序的進入點是WinMain2.Windows程序中的變量名經(jīng)常使用“匈牙利命名法”的命名系統(tǒng),該系統(tǒng)在變量名稱前面增加了表示變量數(shù)據(jù)類型的短前綴.在這里僅需記住前綴i表示int,sz表示”以零結束的字符串”;PSTR作為指向字符串的指針12:50下午3.MessageBox函數(shù)用于顯示短信息4.MessageBox第一個參數(shù)表示句柄,第二個參數(shù)是在消息框主體中顯示的字符串,第三個參數(shù)是出現(xiàn)在消息框標題列上的字符串.MessageBox的第四個參數(shù)是系統(tǒng)中定義的一組以前綴MB_開始的常數(shù)的組合.可以為MB_OK,MB_OKCANCELMB_ABORTRETRYIGNOREMB_YESNOCANCEL12:50下午建立自己的窗口在Windows中,窗口一詞有確切的含義.一個窗口就是屏幕上的一個矩形區(qū)域,它接收使用者的輸入并以文字或圖形的格式顯示輸出內(nèi)容建立一個窗口,需要三個步驟注冊窗口類,使用RegisterClass(&wc);創(chuàng)建窗口,使用CreateWindow顯示窗口,使用ShowWindow(hwnd,nCmdShow); 和UpdateWindow(hwnd);

12:50下午窗口類typedefstruct_WNDCLASSA{

UINTstyle;//窗口樣式,一般設為0WNDPROClpfnWndProc;//指向窗口函數(shù)的指針intcbClsExtra;intcbWndExtra;HINSTANCEhInstance;//定義應用程序?qū)嵗鼿ICONhIcon;//窗口的圖標HCURSORhCursor;//窗口的光標HBRUSHhbrBackground;//窗口的背景顏色LPCSTRlpszMenuName;//窗口的菜單名LPCSTRlpszClassName;//窗口的類名}說明:1)一些新的數(shù)據(jù)類型,如UINT,其實就是typedef后,unsignedint的名稱;2)句柄,在Windows中有很多象窗口,按鈕,圖標等,需要標識它們,為了區(qū)別于普通對象,使用”句柄”這各名稱,例如HINSTANCE當前應用程序句柄,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,//窗口類別名,上一步結果

TEXT(“TheHelloProgram”),//窗口標題WS_OVERLAPPEDWINDOW,//窗口風格,可改

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)建立了這個窗口.這就是說,Windows已經(jīng)配置了一塊內(nèi)存,用來保存在CreateWindow調(diào)用中指定窗口的全部信息跟一些其它信息,而Windows稍后就是依據(jù)窗口句柄找到這些信息如果要顯示窗體,還需要調(diào)用下面兩個函數(shù)ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);ShowWindow的第一個參數(shù)是窗口句柄,第二個參數(shù)確定如何在屏幕上顯示窗口,是一般大小、最小化還是最大化;例如可選SW_HIDE或SW_SHOWMAXIMIZED12:50下午消息循環(huán)窗口一旦創(chuàng)建并顯示,應用程序的初始化工作即完成,隨后便是程序的消息循環(huán)部分

while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}12:50下午補充知識:事件和消息Windows程序的特點是程序啟動并建立窗體后,隨即進入了一個等待狀態(tài),直到接收到某種刺激,比如鍵盤輸入,鼠標單擊之后,程序才會跳出等待對這個刺激進行處理,處理完畢后又進入等待;而這種刺激把它叫做事件Windows根據(jù)消息來處理各種事件,系統(tǒng)已經(jīng)預先定義了很多消息,比如WM_LBUTTONDOWN為鼠標左鍵點擊消息,WM_CLOSE關閉窗口產(chǎn)生的消息12:50下午補充知識:消息隊列系統(tǒng)為程序建立了叫做消息隊列的一個存儲空間,程序運行過程發(fā)生一個事件,系統(tǒng)就把事件對應的消息放入消息隊列中使用GetMessage函數(shù)取得消息隊列中的消息,并利用這個函數(shù)的返回值組織一個循環(huán)來不斷獲取消息,一旦獲取消息,就把這個消息送給系統(tǒng),這個循環(huán)叫做消息循環(huán)

while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);//把鍵盤消息翻譯成字符消息DispatchMessage(&msg);//將消息發(fā)送給Windows系統(tǒng)}然后,Windows將該消息發(fā)送給適當?shù)拇翱谙⑻幚沓绦?讓它進行處理。12:50下午第二步消息處理的函數(shù)窗口建立好以后,需要有一個地方來處理消息.在Windows系統(tǒng)中,處理消息的地方叫做消息處理的函數(shù),在本例中是WndProc()函數(shù)LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)消息處理函數(shù)WndProc()是完成任務的核心,也是需要程序員編寫大量代碼的地方之前在定義窗口類的時候,必須把這個窗口函數(shù)的名稱WndProc()賦給WNDCLASS結構的lpfnWndProc成員,指明這個窗口如果要響應消息,就到窗口函數(shù)WndProc()中去處理12:50下午本例中的三個消息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ù)時,WndProc接收這個消息在接收到WM_CREATE消息后,HELLOWIN在對這個消息的處理中播放一個名為HELLOWIN.WAV的聲音文件.它通過調(diào)用PlaySound函數(shù)來完成如果我們把WM_CREATE消息改為WM_LBUTTONDOWN消息,那么程序會發(fā)生什么變化呢12:50下午WM_PAINT消息當窗口顯示區(qū)域的一部分顯示內(nèi)容或者全部變?yōu)椤睙o效”,以致于必須”更新畫面”時,將由這個消息通知程序顯示區(qū)域的顯示內(nèi)容怎么會變得無效呢?在最初建立窗口的時候,整個顯示區(qū)域都是無效的,因為程序還沒有在窗口上畫什么東西.第一條WM_PAINT消息(通常發(fā)生在WinMain中調(diào)用UpdateWindow時)指示窗口消息處理程序在顯示區(qū)域上畫一些東西在使用者改變HELLOWIN窗口的大小后,顯示區(qū)域的顯示內(nèi)容重新變得無效.然后,窗口消息處理函數(shù)WndProc又將收到一條WM_PAINT消息在移動窗口以致其相互重迭時,Windows不保存一個窗口中被另一個窗口所遮蓋的內(nèi)容(因為圖形數(shù)據(jù)很大);在這一部分不再被遮蓋之后,它就被標志為無效.窗口消息處理程序接收到一條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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論