Windows应用程序组成及编程步骤
Windows應用程序組成及編程步驟:
1、應用程序的組成:
一個完整的Windows應用程序通常由五種類型的文件組成
1.C語言源程序文件
2.頭文件
3.模塊定義文件
4.資源描述文件
5.項目文件
2、源程序組成結構:
1.所有應用程序的入口,類似main函數(shù)
2.完成一系列的定義和初始化,并產生消息循環(huán)
Windows應用程序-> 入口函數(shù)WinMain,窗口函數(shù)WndProc->構成基本框架->
包含多種數(shù)據(jù)類型、數(shù)據(jù)結構與函數(shù)等。
/*WinMain和WndProc是Windows應用程序的主體*/
(1)WinMain函數(shù)
1.基本組成部分:函數(shù)說明、初始化和消息循環(huán)
2.功能:注冊窗口類,建立窗口及執(zhí)行必要的初始化
進入消息循環(huán),具接受的消息調用相應的處理過程
當消息循環(huán)檢索到WM_QUIT時終止程序
3.WinMain函數(shù)說明
1 int WINAPI WinMain
2 (
3 HINSTANCE hThisInst,//應用程序當前實例句柄
4 HINSTANCE hPrevInst,//應用程序其他實例句柄
5 LPSTR lpszCmdLine,//指向程序命令行參數(shù)的指針
6 int nCmdShow //應用程序開始執(zhí)行時窗口顯示方式的整數(shù)值標識
7 )
8 {
9 return 0;
10 }
注意!Windows是多任務管理的,同一應用程序的多個窗口可能會同時存在,
Windows系統(tǒng)對每個窗口的執(zhí)行稱為一個實例,并用一個實例句柄來唯一標識
(2)初始化
窗口類的定義:定義窗口類的形式與功能->LoadIcon/LoadCursor/GetStockObject
窗口類的注冊:窗口類必須先注冊后使用->RegisterClass
創(chuàng)建窗口實例:CreatWindow
顯示窗口:ShowWindow,UpdateWindow
(a)窗口類定義
通過給窗口類數(shù)據(jù)結構WNDCLASS賦值完成,該數(shù)據(jù)結構中包含窗口類的各種
屬性。窗口類定義常用以下函數(shù):
LoadIcon的作用是在應用程序中加載一個窗口圖標。其原型為:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR IpIconName)
第一個參數(shù):圖標資源所在的模塊句柄,NULL則使用系統(tǒng)預定義圖標
第二個參數(shù):圖標資源名或系統(tǒng)預定義圖標標識名
//窗口類定義 wndclass.style = 0; //窗口類型為缺省類型 wndclass.IpfnWndProc = WndProc; //定義窗口過程函數(shù) 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的作用是在應用程序中加載一個窗口光標
HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName)
第一個參數(shù):光標資源所在的模塊句柄,NULL則使用系統(tǒng)預定義圖標
第二個參數(shù):光標資源名或系統(tǒng)預定義圖標標識名
應用程序調用函數(shù)GetStockObject獲取系統(tǒng)提供的背景刷
HBRUSH GetStockObject(int nBrush);
(b)注冊窗口類
Windows系統(tǒng)本身提供部分預定義的窗口類,程序員也可以自定義窗口類,
窗口類必須先注冊后使用。窗口了的注冊由函數(shù)
RegisterClass()實現(xiàn)。
RegisterClass(&wndclass);//wndclass為窗口類結構
RegisterClass函數(shù)返回為布爾值,注冊成功則返回真
(c)創(chuàng)建窗口實例
創(chuàng)建一個窗口類的實例由函數(shù)CreateWindow()實現(xiàn)
函數(shù)原型如下:
HWND CreateWindow ( LPCTSTR lpszClassName, //窗口類名 LPCTSTR lpszTitle, //窗口標題名 DWORD dwStyle, //創(chuàng)建窗口的樣式 int x,y, //窗口左上角坐標 int nWidth,nHeight, //窗口寬度和高度 HWND hwndParent, //該窗口的父窗口句柄 HMENU hMenu, //窗口主菜單句柄 HINSTACNCE hInstcane, //創(chuàng)建窗口的應用程序當前句柄 LPVOID lpParam //指向一個傳遞給窗口的參數(shù)值的指針 )
(d)顯示窗口
窗口類的顯示由ShowWindow和UpdateWindow函數(shù)實現(xiàn)。應用程序調用
ShowWindow函數(shù)在屏幕上顯示窗口
ShowWindow(hwnd,nCmdshow);//nCmdshow為窗口顯示形式標識
SW_HIDE 隱藏窗口
SW_SHOWNORMAL 顯示并激活窗口
SW_SHOWMINIMIZE 顯示并最小化窗口
SW_SHOWMAXMIZE 顯示并最大化窗口
SW_SHOWNOACTIVE 顯示但不激活窗口
SW_RESTORE 恢復窗口的原來位置及尺寸
顯示窗口后,應用程序調用UpdateWindow更新并繪制用戶區(qū),
并發(fā)出WM_PAINT消息。
UpdateWindow(hwnd);
(3)消息循環(huán)
Windows將產生的消息在WinMain函數(shù)中傳給窗口函數(shù)的相應過程處理
從消息隊列中讀取一條消息,并將消息放在MSG結構體中
消息循環(huán)的常見格式如下:
1 MSG Msg;
2 …
3 while (GetMessage (&Msg,NULL,0,0))
4 {
5 TranslateMessage(&Msg);//將消息的虛擬鍵轉換為字符信息
6 DispatchMessage(&Msg); //將消息傳送到指定窗口函數(shù)
7 }
其中函數(shù)GetMessage形式為:
(返回零值,即檢索到WM_QUIT消息,程序結束循環(huán)并退出)
1 GetMessage 2 (lpMSG, //指向MSG結構的指針 3 hwnd, 4 nMsgFilteMin, //用于消息過濾的最小消息號值 5 nMsgFilterMax //用于消息過濾的最大消息號值 6 )
總結
以上是生活随笔為你收集整理的Windows应用程序组成及编程步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见到的特殊字符
- 下一篇: 邬江兴院士:工业互联网安全&拟态