Windows 应用程序基础课件1_第1页
Windows 应用程序基础课件1_第2页
Windows 应用程序基础课件1_第3页
Windows 应用程序基础课件1_第4页
Windows 应用程序基础课件1_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

Windows應用程式基礎2程式調試工具包括根源程式語法檢查、可執行程式修改和運行監視等應用程式Help和Setup開發工具包系統函數庫和系統函數開發工具資源管理器包括圖形化窗口及組成元素的多種對象的編輯器可選擇並構成具體語句或根源程式結構的例程庫及Help根源程式編輯器和編譯器可視化開發系統集成了一系列系統可用資源和開發工具一、Windows編程基礎3採用互動式方法時,可視化開發平臺給出了許多選用的對象,程式員可選擇所需對象並確定其屬性,由此搭建起應用程式的“大框架”,並可根據需要進一步編寫必要的細節代碼段,最後構成完整的應用程式Windows的程式設計語言VCVBVJ都是“面向對象”的程式設計語言對象是Windows的規範部件窗口菜單按鈕對話框程式模組編寫Windows程式相當一部分工作是在創建對象和為對象屬性賦值對象特徵:具有規範形態和操作模式編程方法傳統編寫法-->API互動式方法-->MFC4APIAPI函數的功能為應用程式提供Windows系統特殊函數及數據結構Win應用程式可以利用標準大量API函數調用系統功能是Win系統與Win應用程式間的標準程式介面窗口管理函數實現窗口的創建、移動和修改功能系統服務函數:實現與操作系統有關的多種功能圖形設備(GDI)函數:實現與設備無關的圖形操作功能5

利用Windows

API函數編寫Windows應用程式必須首先瞭解以下內容:(1)窗口的概念(2)事件驅動的概念(3)句柄(4)消息6(1)窗口 一個應用程式的窗口一般包含下列成分:窗口邊界工作區控制菜單框下拉菜單水準滾動條垂直滾動條最大化按鈕最小化按鈕標題欄7編寫一個Windows應用程式首先應創建一個或多個窗口,隨後應用程式的運行過程即是窗口內部、窗口與窗口之間、窗口與系統之間進行數據處理與數據交換的過程。應用程序與用戶之間交互的介面環境系統管理應用程式的基本單位Win應用程式基本的操作單元8Windows程式設計是針對事件或消息的處理進行

消息是描述事件發生的資訊(如按下滑鼠或鍵盤)事件驅動編程方法對於編寫互動式程式很有用處,它避免了死板的操作模式Windows程式的執行順序取決於事件發生的順序,程式的執行順序是由順序產生的消息驅動的,但是消息的產生往往並不要求有次序之分。(2)事件驅動

9常用句柄類型及其說明句柄是一個4位元組長的數值,用於標識應用程式中不同的對象和同類對象中不同的實例窗口按鈕圖示滾動條輸出設備控制檔(3)句柄應用程式通過句柄訪問相應的對象資訊HWND 窗口句柄 HDC 設備環境句柄HBITMAP 位圖句柄 HCURSOR 游標句柄HICON 圖示句柄 HFONT 字體句柄HMENU 菜單句柄 HPEN 畫筆句柄HFILE 檔句柄 HBRUSH 畫刷句柄

HINSTANCE 當前實例句柄10

Windows應用程式利用Windows消息(Message)與應用程式及系統進行資訊交換。typedefstructtagMSG

{HWNDhwnd; 窗口句柄,為null,則可檢索所有駐留在消息佇列中的消息

UINTmessage;消息值,由Windows.h頭檔中的宏定義來標識

WPARAMwParam; 包含有關消息的附加資訊,不同消息其值有所不同

LPARAMlParam;

DWORDtime;指定消息送至佇列的時間

POINTpt;指定消息發送時螢幕游標的位置,其數據類型POINT也是一個結構體}MSG;消息號:由事先定義好的消息名標識字參數(wParam):用於提供消息的附加資訊長字參數(lParam):用於提供消息的附加資訊消息附加資訊與具體消息號的值有關,在Win中消息用結構體MSG表示typedefstructtagPOINT{LONGx;

LONGy;}POINT;(4)消息11(4)消息

VC中存在幾種系統定義的消息分類,不同的首碼符號經常用於消息宏識別消息附屬的分類,系統定義的消息宏首碼如下:BM 表示按鈕控制消息CB 表示組合框控制消息DM 表示默認下壓式按鈕控制消息EM 表示編輯控制消息LB 表示列表框控制消息SBM 表示滾動條控制消息WM 表示窗口消息窗口管理消息初始化消息輸入消息系統消息剪貼板消息控制處理消息控制通知消息滾動條通知消息非用戶區消息MDI消息DDE消息應用程式自定義的消息Windows編程常用消息12二、Windows應用程式常用消息1.WM_LBUTTONDOWN:產生單擊滑鼠左鍵的消息此外,相似的消息還有:WM_LBUTTONUP:放開滑鼠左鍵時產生;WM_RBUTTONDOWN:單擊滑鼠右鍵時產生;WM_RBUTTONUP:放開滑鼠右鍵時產生;WM_LBUTTONDBLCLK:雙擊滑鼠左鍵時產生;WM_RBUTTONDBLCLK:雙擊滑鼠右鍵時產生。lParam高位元組包含當前游標的Y座標值低位元組包含當前游標的X座標值wParam包含一整數值以標識滑鼠鍵的按下狀態MK_LBUTTON 按下滑鼠左鍵MK_MBUTTON 按下滑鼠中鍵MK_RBUTTON 按下滑鼠右鍵132.WM_KEYDOWN:按下一個非系統鍵時產生的消息

系統鍵是指實現系統操作的組合鍵,例如Alt與某個功能鍵的組合以實現系統菜單操作等。3.WM_CHAR:按下一個非系統鍵時產生的消息wParam為按鍵的ASCII碼lParam與WM_KEYDOWN的相同wParam:按下鍵的虛擬鍵碼,用以標識按下或釋放的鍵lParam:記錄了按鍵的重複次數、掃描碼、轉移代碼、先前鍵的狀態等資訊。相似的消息還有WM_KEYUP,在放開非系統鍵時產生如F1的虛擬鍵碼在Windows.h文件中定義為VK_F1144.WM_CREATE:由CreateWindow函數發出的消息wParam:未用lParam:包含一個指向CREATESTRUCT數據結構的指針5.WM_CLOSE:關閉窗口時產生的消息wParam和lParam均未用。6.WM_DESTROY:由DestroyWiodow函數發出的消息wParam和lParam均未用。157.WM_QUIT:由PostQuitMessage函數發出的消息退出應用程式時發出的消息wParam:含退出代碼,標識程式退出運行時的有關資訊1Param:未用8.WM_PAINT用戶區移動或顯示用戶窗口改變大小程式通過滾動條滾動窗口下拉式菜單關閉並需要恢復被覆蓋的部分Windows清除對話框等對象,並需要恢復被覆蓋的部分均產生WM_PAINT消息16三、Windows中的事件驅動程式設計啟動輸入姓名輸入第一次測試成績輸入第二次測試成績輸入第三次測試成績計算平均成績結束過程驅動方法計算平均成績啟動消息處理結束輸入姓名輸入第一次成績輸入第二次成績輸入第三次成績計算平均成績事件驅動方法計算平均成績17四、Windows應用程式組成及編程步驟

1.

應用程式的組成一個完整的Windows應用程式通常由五種類型的檔組成。1.C語言根源程式檔2.頭檔 3.模組定義檔 4.資源描述檔 5.專案檔 182.根源程式組成結構入口函數WinMain窗口函數WndProcWindows應用程式構成基本框架包含各種數據類型、數據結構與函數等1.所有應用程式的入口,類似Main函數,2.完成一系列的定義和初始化,並產生消息迴圈WinMain和WinProc是Windows應用程式的主體19(1)

WinMain函數三個基本的組成部分:函數說明、初始化和消息迴圈功能註冊窗口類,建立窗口及執行必要的初始化進入消息迴圈,據接受的消息調用相應的處理過程當消息迴圈檢索到WM_QUIT時終止程式運行WinMain函數WinMain函數說明WinMain函數的說明如下:intWINAPIWinMain(

HINSTANCEhThisInst, ∥應用程式當前實例句柄

HINSTANCehPrevInst, ∥應用程式其他實例句柄

LPSTRlpszCmdLine, ∥指向程式命令行參數的指針

IntnCmdShow ∥應用程式開始執行時窗口顯示方式的整數值標識)注意!Win是多任務管理的,同一應用程式的多個窗口可能會同時存,Win系統對每個窗口的執行稱為一個實例,並用一個實例句柄來唯一標識20(2)初始化(a)窗口類定義

通過給窗口類數據結構WNDCLASS賦值完成,該數據結構中包含窗口類的各種屬性。窗口類定義常用以下函數:LoadIcon的作用是在應用程式中加載一個窗口圖示。其原型為:HICONLoadIcon(HINSTANCEhInstance,LPCTSTRlpIconName)圖示資源名或系統預定義圖示標識名圖示資源所在的模組句柄,NULL則使用系統預定義圖示初始化顯示窗口創建窗口實例窗口類的註冊:窗口類必須先註冊後使用窗口類的定義:定義窗口的形式與功能LoadIconLoadCursorGetStockObjectRegisterClassCreateWindow

ShowWindow,UpdateWindow21LoadCursor的作用是在應用程式中加載一個窗口游標HCURSORLoadCursor(HINSTANCEhInstance, LPCTSTR

lpCursorName)游標資源所在的模塊句柄,NULL則使用系統預定義游標游標資源名或系統預定義游標標識名應用程式調用函數GetStockObject獲取系統提供的背景刷HBRUSHGetStockObject(intnBrush);22(b)註冊窗口類Win系統本身提供部分預定義的窗口類,程式員也可以自定義窗口類,窗口類必須先註冊後使用。窗口類的註冊由函數RegisterClass()實現。

RegisterClass(&wndclass);//wndclass為窗口類結構

RegisterClass函數的返回為布爾值,註冊成功則返回真23(c)創建窗口實例創建一個窗口類的實例由函數CreateWindow()實現函數原型如下:HWNDCreateWindow

(

LPCTSTRlpszClassName,∥窗口類名

LPCTSTRlpszTitle, ∥窗口標題名

DWORDdwStyle, ∥創建窗口的樣式

intx,y, ∥窗口左上角座標

intnWidth,nHeight, ∥窗口寬度和度高

HWNDhwndParent, ∥該窗口的父窗口句柄

HMENUhMenu, ∥窗口主菜單句柄

HINSTANCEhInstance,∥創建窗口的應用程式當前句柄

LPVOIDlpParam ∥指向一個傳遞給窗口的參數值的指針

)2425(d)顯示窗口窗口類的顯示由ShowWindow和UpdateWindow函數實現。應用程式調用ShowWindow函數在螢幕上顯示窗口ShowWindow(hwnd,nCmdshow);//nCmdshow為窗口顯示形式標識顯示窗口後,應用程式調用UpdateWindow更新並繪製用戶區,併發出WM_PAINT消息。

UpdateWindow(hwnd);26(3)消息迴圈消息迴圈的常見格式如下:MSGMsg;…while(GetMessage(&Msg,NULL,0,0)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}將消息的虛擬鍵轉換為字元資訊將消息傳送到指定窗口函數從消息佇列中讀取一條消息,並將消息放在MSG結構中

其中函數GetMessage形式為:GetMessage(lpMSG, //指向MSG結構的指針

hwnd,

nMsgFilteMin,//用於消息過濾的最小消息號值

nMsgFilterMax//用於消息過濾的最大消息號值)返回零值,即檢索到WM_QUIT消息,程序結束迴圈並退出將消息傳遞給窗口函數的相應過程處理消息隊列Windows將產生的消息WinMain函數272.窗口函數WinProc

WinProc函數由一個或多個switch語句組成。每一條case語句對應一種消息,當應用程式接收到一個消息時,相應的case語句被啟動並執行相應的回應程式模組。WinProc包含了對各種可能接收到的消息的處理過程定義了應用程式對接收到的不同消息的回應28窗口函數的一般形式如下:LRESULTCALLBACKWndProc( HWNDhwnd, UINTmessgae, WPARAMwParam,LPARAMlParam){

switch(message) ∥message為標識的消息

{

case…

…break;

caseWM_DESTROY:

PostQuitMessage(0);

default:returnDefWindowProc(hwnd,message,wParam,lParam);

}return(0);}

在消息處理程式段中一般都有對WM_DESTROY的處理,該消息是關閉窗口時發出的。它向應用程式發出WM_QUIT消息,請求退出處理函數:

voidPostQuitMessage(intnExitCode)

//nExitCode為應用程式的退出代碼為未定義處理過程的消息提供缺省處理293.數據類型

在Windows.h中定義了Windows

應用程式中包含種類繁多的數據類型304.

一些重要的數據結構MSG:包含一個消息的全部資訊,是消息發送的格式WNDCLASS:包含一個窗口類的全部資訊及屬性POINT:定義了螢幕上或窗口中的一個點的X和Y座標RECT:定義了一個矩形區域及其左上角和右下角的座標幾種重要的結構31五、應用程式舉例【例2-1】創建應用程式框架。本例的目的在於說明創建Windows應用程式的方法及過程#include<windows.h> //包含應用程式中所需的數據類型和數據結構的定義LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函數說明//---------------以下初始化窗口類----------------------intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow){

HWNDhwnd;

MSGMsg;

WNDCLASSwndclass;

charlpszClassName[]="窗口"; //窗口類名

charlpszTitle[]="My_Windows"; //窗口標題名32

//窗口類的定義wndclass.style=0; //窗口類型為缺省類型wndclass.lpfnWndProc=WndProc; //定義窗口處理函數wndclass.cbClsExtra=0; //窗口類無擴展wndclass.cbWndExtra=0; //窗口實例無擴展wndclass.hInstance=hInstance; //當前實例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化圖示為缺省圖示wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口採用箭頭游標wndclass.hbrBackground=GetStockObject(WHITE_BRUSH); //窗口背景為白色wndclass.lpszMenuName=NULL; //窗口中無菜單wndclass.lpszClassName=lpszClassName; //窗口類名為"窗口"33

//---------------以下進行窗口類的註冊-------if(!RegisterClass(&wndclass))//如果註冊失敗則發出警告

{

MessageBeep(0);

returnFALSE;

}//----------------創建窗口-------------------

hwnd=CreateWindow

(

lpszClassName, //窗口類名

lpszTitle, //窗口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论