Windows應用程式組成及編程步驟

來源:互聯網
上載者:User

標籤: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應用程式組成及編程步驟

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.