標籤:nms width 執行個體控制代碼 pms rest 賦值 退出 api 原型
Windows應用程式組成及編程步驟:
1、應用程式的組成:
一個完整的Windows應用程式通常由五種類型的檔案組成
1.C語言來源程式檔案
2.標頭檔
3.模組定義檔案
4.資源描述檔案
5.專案檔
2、來源程式組成結構:
1.所有應用程式的入口,類似main函數
2.完成一系列的定義和初始化,併產生訊息迴圈
Windows應用程式-> 入口函數WinMain,視窗函數WndProc->構成基本架構->
包含多種資料類型、資料結構與函數等。
/*WinMain和WndProc是Windows應用程式的主體*/
(1)WinMain函數
1.基本組成部分:函數說明、初始化和訊息迴圈
2.功能:註冊視窗類別,建立視窗及執行必要的初始化
進入訊息迴圈,具接受的訊息調用相應的處理過程
當訊息迴圈檢索到WM_QUIT時終止程式
3.WinMain函數說明
1 int WINAPI WinMain 2 ( 3 HINSTANCE hThisInst,//應用程式當前執行個體控制代碼 4 HINSTANCE hPrevInst,//應用程式其他執行個體控制代碼 5 LPSTR lpszCmdLine,//指向程式命令列參數的指標 6 int nCmdShow //應用程式開始執行時視窗顯示方式的整數值標識 7 ) 8 { 9 return 0;10 }
注意!Windows是多任務管理的,同一應用程式的多個視窗可能會同時存在,
Windows系統對每個視窗的執行稱為一個執行個體,並用一個執行個體控制代碼來唯一標識
(2)初始化
視窗類別的定義:定義視窗類別的形式與功能->LoadIcon/LoadCursor/GetStockObject
視窗類別的註冊:視窗類別必須先註冊後使用->RegisterClass
建立視窗執行個體:CreatWindow
顯示視窗:ShowWindow,UpdateWindow
(a)視窗類別定義
通過給視窗類別資料結構WNDCLASS賦值完成,該資料結構中包含視窗類別的各種
屬性。視窗類別定義常用以下函數:
LoadIcon的作用是在應用程式中載入一個視窗表徵圖。其原型為:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR IpIconName)
第一個參數:表徵圖資源所在的模組控制代碼,NULL則使用系統預定義表徵圖
第二個參數:表徵圖資源名或系統預定義表徵圖標識名
//視窗類別定義wndclass.style = 0; //視窗類別型為預設類型wndclass.IpfnWndProc = WndProc; //定義視窗過程函數wndclass.cbClsExtra = 0; //視窗類別無拓展wndclass.cbWndExtra = 0; //視窗執行個體無拓展wndclass.hInstance = hinstance; //當前執行個體控制代碼wndclass.hIcon = LocadIcon(NULL,IDI_APPLICATION);//視窗的最小化表徵圖為預設表徵圖wndclass.hCursor = LocadCursor(NULL,IDC_ARROW);//視窗採用箭頭游標wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);//視窗背景為白色wndclass.IpszMenuName = NULL;//視窗中無菜單wndclass.IpszClassName = IpszClassName;//視窗類別名為"視窗"
LoadCursor的作用是在應用程式中載入一個視窗游標
HCURSORLoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName)
第一個參數:游標資源所在的模組控制代碼,NULL則使用系統預定義表徵圖
第二個參數:游標資源名或系統預定義表徵圖標識名
應用程式調用函數GetStockObject擷取系統提供的背景刷
HBRUSH GetStockObject(int nBrush);
(b)註冊視窗類別
Windows系統本身提供部分預定義的視窗類別,程式員也可以自訂視窗類別,
視窗類別必須先註冊後使用。視窗了的註冊由函數
RegisterClass()實現。
RegisterClass(&wndclass);//wndclass為視窗類別結構
RegisterClass函數返回為布爾值,註冊成功則返回真
(c)建立視窗執行個體
建立一個視窗類別的執行個體由函數CreateWindow()實現
函數原型如下:
HWND CreateWindow(LPCTSTR lpszClassName, //視窗類別名LPCTSTR lpszTitle, //視窗標題名DWORD dwStyle, //建立視窗的樣式int x,y, //視窗左上方座標int nWidth,nHeight, //視窗寬度和高度HWND hwndParent, //該視窗的父視窗控制代碼HMENU hMenu, //視窗主菜單控制代碼HINSTACNCE hInstcane, //建立視窗的應用程式當前控制代碼LPVOID lpParam //指向一個傳遞給視窗的參數值的指標)
(d)顯示視窗
視窗類別的顯示由ShowWindow和UpdateWindow函數實現。應用程式調用
ShowWindow函數在螢幕上顯示視窗
ShowWindow(hwnd,nCmdshow);//nCmdshow為視窗顯示形式標識
SW_HIDE隱藏視窗
SW_SHOWNORMAL顯示並啟用視窗
SW_SHOWMINIMIZE顯示並已最小化的視窗
SW_SHOWMAXMIZE顯示並已最大化的視窗
SW_SHOWNOACTIVE顯示但不啟用視窗
SW_RESTORE恢複視窗的原來位置及尺寸
顯示視窗後,應用程式調用UpdateWindow更新並繪製使用者區,
並發出WM_PAINT訊息。
UpdateWindow(hwnd);
(3)訊息迴圈
Windows將產生的訊息在WinMain函數中傳給視窗函數的相應過程處理
從訊息佇列中讀取一條訊息,並將訊息放在MSG結構體中
訊息迴圈的常見格式如下:
1 MSG Msg;2 …3 while (GetMessage (&Msg,NULL,0,0))4 { 5 TranslateMessage(&Msg);//將訊息的虛擬鍵轉換為字元資訊6 DispatchMessage(&Msg); //將訊息傳送到指定視窗函數7 }
其中函數GetMessage形式為:
(返回零值,即檢索到WM_QUIT訊息,程式結束迴圈並退出)
1 GetMessage2 (lpMSG, //指向MSG結構的指標3 hwnd,4 nMsgFilteMin, //用於訊息過濾的最小訊息編號值5 nMsgFilterMax //用於訊息過濾的最大訊息編號值6 )
Windows應用程式組成及編程步驟