Windows編程基礎(chǔ)知識(shí)_第1頁
Windows編程基礎(chǔ)知識(shí)_第2頁
Windows編程基礎(chǔ)知識(shí)_第3頁
Windows編程基礎(chǔ)知識(shí)_第4頁
Windows編程基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Windows編程基礎(chǔ)知識(shí),內(nèi)容提要,1Windows編程概述2基本概念3Windows程序基本結(jié)構(gòu)4程序示例,1.1.Windows編程概述,1Windows編程,Windws編程在微軟的Windows操作系統(tǒng)下編程使用的工具微軟公司和其他公司(Boland等)在該操作系統(tǒng)下提供了了很多可視化的開發(fā)系統(tǒng)平臺(tái),如VC+、VB、BC、Delphi等。我們使用VC+,1Windows編程(續(xù)),可視化開發(fā)系統(tǒng)(資源和工具的集成),源程序編輯器編譯器,調(diào)試工具語法檢查程序修改運(yùn)行監(jiān)視,應(yīng)用程序Help和Setup開發(fā)工具,函數(shù)庫和系統(tǒng)函數(shù)開發(fā)工具,資源管理器各種窗口和控件的編輯器,例程庫及Help,其他功能,2Windows程序特點(diǎn),Windows程序特點(diǎn)1圖形用戶界面(窗口)統(tǒng)一、友好2獨(dú)立于設(shè)備的圖形操作(GUI)3支持多任務(wù)機(jī)制(多線程)4事件驅(qū)動(dòng)的程序設(shè)計(jì)(消息隊(duì)列機(jī)制)5程序和資源分開、資源共享6支持應(yīng)用程序間的數(shù)據(jù)交換(剪貼板等),2Windows程序特點(diǎn)(續(xù)),一個(gè)簡(jiǎn)單的Windows程序,#includeintCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)/產(chǎn)生一個(gè)問候小窗口MessageBox(NULL,“HelloWorld!”,“SayHello”,MB_OK);return1;,3Windows程序設(shè)計(jì)方法,傳統(tǒng)式寫法使用C語言語法規(guī)范的API函數(shù)(ApplicationProgrammingInterface)交互式寫法使用C+語法規(guī)范的MFC類庫(MicrosoftFoundationClass)其他寫法使用模板技術(shù)等的ATL模板庫(ActiveXTemplateLibrary)和組件技術(shù)等,1.2.基本概念,1Windows程序及對(duì)象,Windows應(yīng)用程序使用的界面是由各種圖形元素組成的圖形界面各個(gè)圖形元素具有不同的功能應(yīng)用程序的用戶主要是通過鍵盤和鼠標(biāo)對(duì)應(yīng)用程序界面上的圖形元素進(jìn)行操作來與Windows應(yīng)用程序進(jìn)行交互的,1Windows程序及對(duì)象(續(xù)),在Windows程序(系統(tǒng))中,存在著許多與DOS應(yīng)用程序不同的復(fù)雜對(duì)象對(duì)象和句柄Windows的程序中,對(duì)象是具有規(guī)范形態(tài)和操作模式的部件,例如窗口、按鈕、滾動(dòng)條等;Windows把為這種復(fù)雜對(duì)象所定義的標(biāo)識(shí)叫做句柄,應(yīng)用程序過句柄訪問相應(yīng)的對(duì)象信息。句柄實(shí)際上在C/C+中實(shí)現(xiàn)為指針(或認(rèn)為其一個(gè)長(zhǎng)度為4字節(jié)長(zhǎng)整數(shù)值),1Windows程序及對(duì)象(續(xù)),常用句柄類型HWND窗口句柄HINSTANCE當(dāng)前實(shí)例句柄HCURSOR光標(biāo)句柄HFONT字體句柄HPEN畫筆句柄HBRUSH畫刷句柄HDC設(shè)備環(huán)境句柄HICON圖標(biāo)句柄HMENU菜單句柄HFILE文件句柄,句柄所標(biāo)識(shí)對(duì)象實(shí)例窗口按鈕圖標(biāo)滾動(dòng)條輸出設(shè)備控件文件程序進(jìn)程如此等等.,2數(shù)據(jù)類型別名,Windows應(yīng)用程序中的數(shù)據(jù)量非常大,為了提高應(yīng)用程序的可讀性,Windows給許多基本數(shù)據(jù)類型定義了別名,例如:typedefvoid*HANDLE;typedefunsignedlongDWORD;typedefintBOOL;typedefunsignedcharBYTE;typedefunsignedshortWORD;,2數(shù)據(jù)類型別名(續(xù)),Windows應(yīng)用程序還使用了一些結(jié)構(gòu)類型的數(shù)據(jù),例如:typedefstructtagPOINTLONGx,y;POINT;/描述了一個(gè)點(diǎn)的位置。,3窗口及其功能,窗口Windows程序界面的主要組成典型窗口及其構(gòu)成,控制菜單框,標(biāo)題欄,3窗口及其功能(續(xù)),窗口功能1系統(tǒng)對(duì)應(yīng)用程序管理的基本單位2應(yīng)用程序與用戶之間交互的接口環(huán)境3Window應(yīng)用程序基本的操作單元Windows應(yīng)用程序編程創(chuàng)建一個(gè)或多個(gè)窗口Windows應(yīng)用程序運(yùn)行窗口內(nèi)部、窗口與窗口之間、窗口與系統(tǒng)之間進(jìn)行數(shù)據(jù)處理與交換的過程,4消息的概念,消息應(yīng)用程序與系統(tǒng)及其它應(yīng)用程序進(jìn)行信息交換的數(shù)據(jù)結(jié)構(gòu)消息的三個(gè)組成部分:消息號(hào):由事先定義好的消息名標(biāo)識(shí)字參數(shù)(wParam):提供消息的附加信息長(zhǎng)字參數(shù)(lParam):提供消息的附加信息附加信息與具體消息號(hào)的值有關(guān),4消息的概念(續(xù)),消息的結(jié)構(gòu),typedefstructtagMSGHWNDhwnd;/窗口句柄,為null,則檢索隊(duì)的所有消息UINTmessage;/消息號(hào),由Windows.h中的宏定義來標(biāo)識(shí)WPARAMwParam;/消息的附加信息LPARAMlParam;/消息的附加信息DWORDtime;/指定消息送至隊(duì)列的時(shí)間POINTpt;/指定消息發(fā)送時(shí)屏幕光標(biāo)的位置MSG;,4消息的概念(續(xù)),系統(tǒng)能產(chǎn)生很多消息各種消息分類,分別以不同的前綴表示:WM窗口消息BM按鈕控制消息CB組合框控制消息DM默認(rèn)下壓式按鈕控制消息EM編輯控制消息LB列表框控制消息SBM滾動(dòng)條控制消息,4消息的概念(續(xù)),常見的Windows消息有,5事件及事件驅(qū)動(dòng),事件系統(tǒng)運(yùn)行時(shí)發(fā)生的事情事件通常以以下三種方式產(chǎn)生:l通過輸入設(shè)備,如鍵盤和鼠標(biāo);l通過屏幕上可視的對(duì)象,如菜單、工具欄按鈕、滾動(dòng)條和對(duì)話框上的控件;l來自Windows內(nèi)部,如當(dāng)一個(gè)后面的窗口顯示到前面來時(shí)。事件的結(jié)果系統(tǒng)以消息的形式記錄事件的結(jié)果即消息,5事件及事件驅(qū)動(dòng)(續(xù)),Windows程序和系統(tǒng)是事件驅(qū)動(dòng)的,事件驅(qū)動(dòng)也稱消息驅(qū)動(dòng),事件驅(qū)動(dòng)模型如下:,5事件及事件驅(qū)動(dòng)(續(xù)),操作系統(tǒng)會(huì)用特定的機(jī)構(gòu)管理消息消息隊(duì)列作為結(jié)果的消息,系統(tǒng)以隊(duì)列形式進(jìn)行管理操作系統(tǒng)(軟件程序)有監(jiān)控機(jī)構(gòu)、管理機(jī)構(gòu)、通訊機(jī)構(gòu)等應(yīng)用程序在這些機(jī)構(gòu)的管理下運(yùn)行,5事件及事件驅(qū)動(dòng)(續(xù)),支持隊(duì)列特征的消息驅(qū)動(dòng)模型,6API函數(shù),Windows提供了大量預(yù)定義的用C語言編寫的函數(shù)和數(shù)據(jù)結(jié)構(gòu)集合,該集合叫API(ApplicationProgrammingInterface)早期的Windows應(yīng)用程序設(shè)計(jì)人員要使用相應(yīng)的API函數(shù)來編寫程序。類型別名和MSG等結(jié)構(gòu)都包含在API中,6API函數(shù)(續(xù)),根據(jù)WindowsAPI函數(shù)的功能,可以將其分為三類:1)管理函數(shù):實(shí)現(xiàn)窗口和其它對(duì)象的創(chuàng)建、移動(dòng)和修改等功能。2)圖形設(shè)備函數(shù):實(shí)現(xiàn)與設(shè)備無關(guān)的圖形操作功能,可以實(shí)現(xiàn)圖形繪制。3)系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)與操作系統(tǒng)有關(guān)的多種功能,如進(jìn)程線程管理、任務(wù)調(diào)度等。,1.3.Win32程序基本結(jié)構(gòu),1應(yīng)用程序的組成,Windows程序分為“程序代碼”和“UI(UserInterface)資源”兩大部份所謂UI資源是指功能菜單、對(duì)話框外貌、程序圖標(biāo)、光標(biāo)形狀等一個(gè)完整的Windows應(yīng)用程序通常包含如下幾種類型的文件:C/C+語言源程序文件(.c或.cpp)頭文件(.h)資源描述文件(.rc)模塊定義文件(.def).,1應(yīng)用程序的組成(續(xù)),源程序組成源程序主要由主函數(shù)(入口函數(shù))和窗口函數(shù)及其相關(guān)函數(shù)組成WinMain和WinProc是Win32源程序主體前者是應(yīng)用程序的入口,類似main函數(shù),2WinMain函數(shù),三個(gè)基本的組成部分:函數(shù)說明初始化消息循環(huán)功能注冊(cè)窗口類,建立窗口及初始化進(jìn)入消息循環(huán),據(jù)消息調(diào)用相應(yīng)的處理過程當(dāng)消息循環(huán)檢索到WM_QUIT時(shí)終止程序運(yùn)行,2WinMain函數(shù)(續(xù)),函數(shù)(原型)說明,注意!Windows操作系統(tǒng)是多任務(wù)管理的,同一應(yīng)用程序可能同時(shí)存在多個(gè)窗口,Windows系統(tǒng)對(duì)每個(gè)窗口的執(zhí)行稱為一個(gè)實(shí)例,并用一個(gè)實(shí)例句柄來唯一標(biāo)識(shí)它。,intWINAPIWinMain(HINSTANCEhThisInst,應(yīng)用當(dāng)前實(shí)例句柄HINSTANCehPrevInst,應(yīng)用其他實(shí)例句柄LPSTRlpszCmdLine,指向命令行參數(shù)的指針I(yè)ntnCmdShow初始窗口顯示方式的整數(shù)值標(biāo)識(shí)),2WinMain函數(shù)(續(xù)),初始化初始化包括窗口類的定義、注冊(cè)窗口類、創(chuàng)建窗口和顯示窗口四部分。需要注意的是,在顯示窗口ShowWindow函數(shù)后,需調(diào)用UpdateWindow函數(shù)更新并繪制用戶區(qū),并發(fā)出WM_PAINT消息。,2WinMain函數(shù)(續(xù)),消息循環(huán)應(yīng)用程序通常有一段代碼稱為消息循環(huán),又稱為消息泵,它是程序的動(dòng)力結(jié)構(gòu),形式如下,MSGmsg;/從消息隊(duì)列中提取消息while(GetMessage(/將消息傳送到指定窗口函數(shù)/以上出現(xiàn)的函數(shù)都是WindowsAPI函數(shù),2WinMain函數(shù)(續(xù)),消息循環(huán)中:函數(shù)GetMessage形式為:GetMessage(lpMSG,/指向MSG結(jié)構(gòu)的指針hwnd,nMsgFilteMin,/用于消息過濾的最小消息號(hào)值nMsgFilterMax/用于消息過濾的最大消息號(hào)值)GetMessage從消息隊(duì)列中讀取消息,并將消息放在MSG結(jié)構(gòu)中,返回零值,即檢索到WM_QUIT消息,程序結(jié)束循環(huán)并退出,2WinMain函數(shù)(續(xù)),DispatchMessage函數(shù)該函數(shù)負(fù)責(zé)將消息分發(fā)給窗口函數(shù)(可以理解為其用指針間接調(diào)用了窗口過程函數(shù))在窗口產(chǎn)生過程中,要使用函數(shù)指針為窗口聯(lián)系一個(gè)函數(shù)(通常為WndProc)WndProc窗口函數(shù)是程序和用戶交互的主要處理部分!,3窗口函數(shù)WinProc,WndProc函數(shù)由一個(gè)或多個(gè)switch語句組成。每一條case語句對(duì)應(yīng)一種消息,當(dāng)應(yīng)用程序接收到一個(gè)消息時(shí),相應(yīng)的case語句被激活并執(zhí)行相應(yīng)的響應(yīng)程序模塊。,WndProc,包含了對(duì)各種可能接收到的消息的處理過程,定義了應(yīng)用程序?qū)邮盏降牟煌⒌捻憫?yīng),窗口函數(shù)的一般形式如下:LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam)switch(message)message為標(biāo)識(shí)的消息casebreak;caseWM_DESTROY:PostQuitMessage(0);default:returnDefWindowProc(hwnd,message,wParam,lParam);return(0);,在消息處理程序段中一般都有對(duì)WM_DESTROY的處理,該消息是關(guān)閉窗口時(shí)發(fā)出的。它向應(yīng)用程序發(fā)出WM_QUIT消息,請(qǐng)求退出處理函數(shù):voidPostQuitMessage(intnExitCode)/nExitCode為應(yīng)用程序的退出代碼,為未定義處理過程的消息提供缺省處理,4程序與系統(tǒng)之間的關(guān)系,操作系統(tǒng)監(jiān)控機(jī)構(gòu)感知事件并產(chǎn)生消息系統(tǒng)將消息發(fā)給活動(dòng)窗口消息隊(duì)列應(yīng)用程序擁有一個(gè)消息隊(duì)列程序處理過程:消息泵獲得消息GetMessage,然后分發(fā)消息DispatchMessage給窗口過程WndProc(函數(shù)調(diào)用過程)作相應(yīng)處理返回,接下來再獲取消息,如此循環(huán)重復(fù),直到GetMessage檢到WM_QUIT消息返回0值。,4程序與系統(tǒng)之間的關(guān)系(續(xù)),1.4.完整程序示例,應(yīng)用程序舉例,#include/包含應(yīng)用程序中所需的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的定義LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/窗口函數(shù)說明/-以下初始化窗口類-intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow)HWNDhwnd;MSGMsg;WNDCLASSwndclass;charlpszClassName=窗口;/窗口類名charlpszTitle=My_Windows;/窗口標(biāo)題名,/窗口類的定義wndclass.style=0;/窗口類型為缺省類型wndclass.lpfnWndProc=WndProc;/定義窗口處理函數(shù)wndclass.cbClsExtra=0;/窗口類無擴(kuò)展wndclass.cbWndExtra=0;/窗口實(shí)例無擴(kuò)展wndclass.hInstance=hInstance;/當(dāng)前實(shí)例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化圖標(biāo)為缺省圖標(biāo)wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);/窗口采用箭頭光標(biāo)wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);/窗口背景為白色wndclass.lpszMenuName=NULL;/窗口中無菜單wndclass.lpszClassName=lpszClassName;/窗口類名為窗口,/-以下進(jìn)行窗口類的注冊(cè)-if(!RegisterClass(,/-顯示窗口-ShowWindow(hwnd,nCmdShow);/-繪制用戶區(qū)-UpdateWindow(hwnd);/-消息循環(huán)-while(GetMes

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論