Windows 應(yīng)用程序基礎(chǔ)課件_第1頁
Windows 應(yīng)用程序基礎(chǔ)課件_第2頁
Windows 應(yīng)用程序基礎(chǔ)課件_第3頁
Windows 應(yīng)用程序基礎(chǔ)課件_第4頁
Windows 應(yīng)用程序基礎(chǔ)課件_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1

Windows應(yīng)用程序基礎(chǔ)2程序調(diào)試工具包括源程序語法檢查、可執(zhí)行程序修改和運行監(jiān)視等應(yīng)用程序Help和Setup開發(fā)工具包系統(tǒng)函數(shù)庫和系統(tǒng)函數(shù)開發(fā)工具資源管理器包括圖形化窗口及組成元素的多種對象的編輯器可選擇并構(gòu)成具體語句或源程序結(jié)構(gòu)的例程庫及Help源程序編輯器和編譯器可視化開發(fā)系統(tǒng)集成了一系列系統(tǒng)可用資源和開發(fā)工具一、Windows編程基礎(chǔ)3采用交互式方法時,可視化開發(fā)平臺給出了許多選用的對象,程序員可選擇所需對象并確定其屬性,由此搭建起應(yīng)用程序的“大框架”,并可根據(jù)需要進一步編寫必要的細節(jié)代碼段,最后構(gòu)成完整的應(yīng)用程序Windows的程序設(shè)計語言VCVBVJ都是“面向?qū)ο蟆钡某绦蛟O(shè)計語言對象是Windows的規(guī)范部件窗口菜單按鈕對話框程序模塊編寫Windows程序相當一部分工作是在創(chuàng)建對象和為對象屬性賦值對象特征:具有規(guī)范形態(tài)和操作模式編程方法傳統(tǒng)編寫法-->API交互式方法-->MFC4APIAPI函數(shù)的功能為應(yīng)用程序提供Windows系統(tǒng)特殊函數(shù)及數(shù)據(jù)結(jié)構(gòu)Win應(yīng)用程序可以利用標準大量API函數(shù)調(diào)用系統(tǒng)功能是Win系統(tǒng)與Win應(yīng)用程序間的標準程序接口窗口管理函數(shù)實現(xiàn)窗口的創(chuàng)建、移動和修改功能系統(tǒng)服務(wù)函數(shù):實現(xiàn)與操作系統(tǒng)有關(guān)的多種功能圖形設(shè)備(GDI)函數(shù):實現(xiàn)與設(shè)備無關(guān)的圖形操作功能5

利用Windows

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

消息是描述事件發(fā)生的信息(如按下鼠標或鍵盤)事件驅(qū)動編程方法對于編寫交互式程序很有用處,它避免了死板的操作模式Windows程序的執(zhí)行順序取決于事件發(fā)生的順序,程序的執(zhí)行順序是由順序產(chǎn)生的消息驅(qū)動的,但是消息的產(chǎn)生往往并不要求有次序之分。(2)事件驅(qū)動

9常用句柄類型及其說明句柄是一個4字節(jié)長的數(shù)值,用于標識應(yīng)用程序中不同的對象和同類對象中不同的實例窗口按鈕圖標滾動條輸出設(shè)備控制文件(3)句柄應(yīng)用程序通過句柄訪問相應(yīng)的對象信息HWND 窗口句柄 HDC 設(shè)備環(huán)境句柄HBITMAP 位圖句柄 HCURSOR 光標句柄HICON 圖標句柄 HFONT 字體句柄HMENU 菜單句柄 HPEN 畫筆句柄HFILE 文件句柄 HBRUSH 畫刷句柄

HINSTANCE 當前實例句柄10

Windows應(yīng)用程序利用Windows消息(Message)與應(yīng)用程序及系統(tǒng)進行信息交換。typedef

struct

tagMSG

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

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

WPARAMwParam;包含有關(guān)消息的附加信息,不同消息其值有所不同

LPARAMlParam;

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

POINTpt;指定消息發(fā)送時屏幕光標的位置,其數(shù)據(jù)類型POINT也是一個結(jié)構(gòu)體}MSG;消息號:由事先定義好的消息名標識字參數(shù)(wParam):用于提供消息的附加信息長字參數(shù)(lParam):用于提供消息的附加信息消息附加信息與具體消息號的值有關(guān),在Win中消息用結(jié)構(gòu)體MSG表示typedef

struct

tagPOINT

{LONGx;

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

VC中存在幾種系統(tǒng)定義的消息分類,不同的前綴符號經(jīng)常用于消息宏識別消息附屬的分類,系統(tǒng)定義的消息宏前綴如下:BM 表示按鈕控制消息CB 表示組合框控制消息DM 表示默認下壓式按鈕控制消息EM 表示編輯控制消息LB 表示列表框控制消息SBM 表示滾動條控制消息WM 表示窗口消息窗口管理消息初始化消息輸入消息系統(tǒng)消息剪貼板消息控制處理消息控制通知消息滾動條通知消息非用戶區(qū)消息MDI消息DDE消息應(yīng)用程序自定義的消息Windows編程常用消息12二、Windows應(yīng)用程序常用消息1.WM_LBUTTONDOWN:產(chǎn)生單擊鼠標左鍵的消息此外,相似的消息還有:WM_LBUTTONUP:放開鼠標左鍵時產(chǎn)生;WM_RBUTTONDOWN:單擊鼠標右鍵時產(chǎn)生;WM_RBUTTONUP:放開鼠標右鍵時產(chǎn)生;WM_LBUTTONDBLCLK:雙擊鼠標左鍵時產(chǎn)生;WM_RBUTTONDBLCLK:雙擊鼠標右鍵時產(chǎn)生。1Param高字節(jié)包含當前光標的Y坐標值低字節(jié)包含當前光標的X坐標值wParam包含一整數(shù)值以標識鼠標鍵的按下狀態(tài)MK_LBUTTON 按下鼠標左鍵MK_MBUTTON 按下鼠標中鍵MK_RBUTTON 按下鼠標右鍵132.WM_KEYDOWN:按下一個非系統(tǒng)鍵時產(chǎn)生的消息

系統(tǒng)鍵是指實現(xiàn)系統(tǒng)操作的組合鍵,例如Alt與某個功能鍵的組合以實現(xiàn)系統(tǒng)菜單操作等。3.WM_CHAR:按下一個非系統(tǒng)鍵時產(chǎn)生的消息wParam

為按鍵的ASCII碼1Param與WM_KEYDOWN的相同wParam:按下鍵的虛擬鍵碼,用以標識按下或釋放的鍵1Param:記錄了按鍵的重復(fù)次數(shù)、掃描碼、轉(zhuǎn)移代碼、先前鍵的狀態(tài)等信息。相似的消息還有WM_KEYUP,在放開非系統(tǒng)鍵時產(chǎn)生如F1的虛擬鍵碼在Windows.h文件中定義為VK_F114系統(tǒng)鍵的消息經(jīng)常由與Alt相組合的按鍵產(chǎn)生,這些按鍵啟動程序菜單或者系統(tǒng)菜單上的選項,或者用于切換活動窗口等系統(tǒng)功能(Alt-Tab或者Alt-Esc),也可以用作系統(tǒng)菜單加速鍵(Alt鍵與一個功能鍵相結(jié)合,例如Alt-F4用于關(guān)閉應(yīng)用程序)。應(yīng)用程序通常忽略這些消息,并將它們傳送到DefWindowProc。由于Windows要處理所有Alt鍵的功能,一般無需攔截這些消息。15這里特別提醒要注意WM_KEYDOWN,WM_KEYUP與WM_CHAR消息在使用上是有區(qū)別的。在前兩個消息中,伴隨消息傳遞的是按鍵的虛擬鍵碼,所以這兩個消息可以處理非打印字符,如方向鍵,功能鍵等。而伴隨WM_CHAR消息的參數(shù)是所按的鍵的ASCII碼,ASCII碼是可以區(qū)分字母的大小寫的。而虛擬鍵碼是不能區(qū)分大小寫的。164.WM_CREATE:由CreateWindow函數(shù)發(fā)出的消息wParam:未用1Param:包含一個指向CREATESTRUCT數(shù)據(jù)結(jié)構(gòu)的指針5.WM_CLOSE:關(guān)閉窗口時產(chǎn)生的消息wParam和1Param均未用。6.WM_DESTROY:由DestroyWiodow函數(shù)發(fā)出的消息wParam和1Param均未用。177.WM_QUIT:由PostQuitMessage函數(shù)發(fā)出的消息退出應(yīng)用程序時發(fā)出的消息wParam:含退出代碼,標識程序退出運行時的有關(guān)信息1Param:未用8.WM_PAINT用戶區(qū)移動或顯示用戶窗口改變大小程序通過滾動條滾動窗口下拉式菜單關(guān)閉并需要恢復(fù)被覆蓋的部分Windows清除對話框等對象,并需要恢復(fù)被覆蓋的部分均產(chǎn)生WM_PAINT消息189.WM_MOVE,WM_SIZE

當窗口移動的時候產(chǎn)生WM_MOVE消息,窗口的大小改變的時候產(chǎn)生WM_SIZE消息。

19三、Windows中的事件驅(qū)動程序設(shè)計啟動輸入姓名輸入第一次測試成績輸入第二次測試成績輸入第三次測試成績計算平均成績結(jié)束過程驅(qū)動方法計算平均成績啟動消息處理結(jié)束輸入姓名輸入第一次成績輸入第二次成績輸入第三次成績計算平均成績事件驅(qū)動方法計算平均成績20四、Windows應(yīng)用程序組成及編程步驟

1.

應(yīng)用程序的組成一個完整的Windows應(yīng)用程序通常由五種類型的文件組成。1.C語言源程序文件2.頭文件 3.模塊定義文件 4.資源描述文件 5.項目文件 212.源程序組成結(jié)構(gòu)入口函數(shù)WinMain窗口函數(shù)WndProcWindows應(yīng)用程序構(gòu)成基本框架包含各種數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)與函數(shù)等1.所有應(yīng)用程序的入口,類似Main函數(shù),2.完成一系列的定義和初始化,并產(chǎn)生消息循環(huán)WinMain和WinProc是Windows應(yīng)用程序的主體22(1)WinMain函數(shù)三個基本的組成部分:函數(shù)說明、初始化和消息循環(huán)功能注冊窗口類,建立窗口及執(zhí)行必要的初始化進入消息循環(huán),據(jù)接受的消息調(diào)用相應(yīng)的處理過程當消息循環(huán)檢索到WM_QUIT時終止程序運行WinMain函數(shù)WinMain函數(shù)說明WinMain函數(shù)的說明如下:intWINAPIWinMain

(

HINSTANCEhThisInst, ∥應(yīng)用程序當前實例句柄

HINSTANCe

hPrevInst, ∥應(yīng)用程序其他實例句柄

LPSTRlpszCmdLine, ∥指向程序命令行參數(shù)的指針

Int

nCmdShow

∥應(yīng)用程序開始執(zhí)行時窗口顯示方式的整數(shù)值標識)注意!Win是多任務(wù)管理的,同一應(yīng)用程序的多個窗口可能會同時存在,系統(tǒng)對每個窗口的執(zhí)行稱為一個實例,并用一個實例句柄來唯一標識23(2)初始化(a)窗口類定義

通過給窗口類數(shù)據(jù)結(jié)構(gòu)WNDCLASS賦值完成,該數(shù)據(jù)結(jié)構(gòu)中包含窗口類的各種屬性。窗口類定義常用以下函數(shù):LoadIcon的作用是在應(yīng)用程序中加載一個窗口圖標。其原型為:HICONLoadIcon(HINSTANCE

hInstance,LPCTSTR

lpIconName)圖標資源名或系統(tǒng)預(yù)定義圖標標識名圖標資源所在的模塊句柄,NULL則使用系統(tǒng)預(yù)定義圖標初始化顯示窗口創(chuàng)建窗口實例窗口類的注冊:窗口類必須先注冊后使用窗口類的定義:定義窗口的形式與功能LoadIconLoadCursorGetStockObjectRegisterClassCreateWindow

ShowWindow

,UpdateWindow24LoadCursor的作用是在應(yīng)用程序中加載一個窗口光標HCURSORLoadCursor(HINSTANCE

hInstance, LPCTSTRlpCursorName)光標資源所在的模塊句柄,NULL則使用系統(tǒng)預(yù)定義光標光標資源名或系統(tǒng)預(yù)定義光標標識名應(yīng)用程序調(diào)用函數(shù)GetStockObject獲取系統(tǒng)提供的背景刷HBRUSHGetStockObject(int

nBrush);25(b)注冊窗口類Win系統(tǒng)本身提供部分預(yù)定義的窗口類,程序員也可以自定義窗口類,窗口類必須先注冊后使用。窗口類的注冊由函數(shù)RegisterClass()實現(xiàn)。

RegisterClass(&wndclass);//wndclass為窗口類結(jié)構(gòu)

RegisterClass函數(shù)的返回為布爾值,注冊成功則返回真26(c)創(chuàng)建窗口實例創(chuàng)建一個窗口類的實例由函數(shù)CreateWindow()實現(xiàn)函數(shù)原型如下:HWNDCreateWindow(

LPCTSTRlpszClassName,∥窗口類名

LPCTSTRlpszTitle, ∥窗口標題名

DWORDdwStyle, ∥創(chuàng)建窗口的樣式

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

int

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

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

HWENUhMenu, ∥窗口主菜單句柄

HINSTANCEhInstance,∥創(chuàng)建窗口的應(yīng)用程序當前句柄

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

)2728(d)顯示窗口窗口類的顯示由ShowWindow和UpdateWindow函數(shù)實現(xiàn)。應(yīng)用程序調(diào)用ShowWindow函數(shù)在屏幕上顯示窗口ShowWindow(hwnd,nCmdshow);//nCmdshow為窗口顯示形式標識顯示窗口后,應(yīng)用程序調(diào)用UpdateWindow更新并繪制用戶區(qū),并發(fā)出WM_PAINT消息。

UpdateWindow(hwnd);29(3)消息循環(huán)消息循環(huán)的常見格式如下:MSGMsg;…while(GetMessage(&Msg,NULL,0,0)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}將消息的虛擬鍵轉(zhuǎn)換為字符信息將消息傳送到指定窗口函數(shù)從消息隊列中讀取一條消息,并將消息放在MSG結(jié)構(gòu)中

其中函數(shù)GetMessage形式為:GetMessage(lpMSG, //指向MSG結(jié)構(gòu)的指針

hwnd,

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

nMsgFilterMax//用于消息過濾的最大消息號值)返回零值,即檢索到WM_QUIT消息,程序結(jié)束循環(huán)并退出將消息傳遞給窗口函數(shù)的相應(yīng)過程處理消息隊列Windows將產(chǎn)生的消息WinMain函數(shù)302.窗口函數(shù)WinProc

WinProc函數(shù)由一個或多個switch語句組成。每一條case語句對應(yīng)一種消息,當應(yīng)用程序接收到一個消息時,相應(yīng)的case語句被激活并執(zhí)行相應(yīng)的響應(yīng)程序模塊。WinProc包含了對各種可能接收到的消息的處理過程定義了應(yīng)用程序?qū)邮盏降牟煌⒌捻憫?yīng)31窗口函數(shù)的一般形式如下:LRESULTCALLBACKWndProc( HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAM

lParam){…∥message為標識的消息

switch(message)

{

case… …break;…

caseWM_DESTROY:

PostQuitMessage(0);

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

}return(0);}

在消息處理程序段中一般都有對WM_DESTROY的處理,該消息是關(guān)閉窗口時發(fā)出的。它向應(yīng)用程序發(fā)出WM_QUIT消息,請求退出處理函數(shù):

voidPostQuitMessage(int

nExitCode)

//nExitCode為應(yīng)用程序的退出代碼為未定義處理過程的消息提供缺省處理323.數(shù)據(jù)類型

在Windows.h中定義了Windows

應(yīng)用程序中包含種類繁多的數(shù)據(jù)類型334.一些重要的數(shù)據(jù)結(jié)構(gòu)MSG:包含一個消息的全部信息,是消息發(fā)送的格式WINDCLASS:包含一個窗口類的全部信息及屬性POINT:定義了屏幕上或窗口中的一個點的X和Y坐標RECT:定義了一個矩形區(qū)域及其左上角和右下角的坐標幾種重要的結(jié)構(gòu)34五、應(yīng)用程序舉例【例2-1】創(chuàng)建應(yīng)用程序框架。本例的目的在于說明創(chuàng)建Windows應(yīng)用程序的方法及過程#include<windows.h> //包含應(yīng)用程序中所需的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)的定義LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函數(shù)說明//---------------以下初始化窗口類----------------------intWINAPIWinMain(HINSTANCE

hInstance, HINSTANCEhPrevInst,LPSTR

lpszCmdLine,int

nCmdShow){

HWNDhwnd;

MSGMsg;

WNDCLASSwndclass;

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

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

//窗口類的定義wndclass.style=0; //窗口類型為缺省類型wndclass.lpfnWndProc=WndProc; //定義窗口處理函數(shù)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; //窗口類名為"窗口"36

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

{

MessageBeep(0);

returnFALSE;

}//----------------創(chuàng)建窗口-------------------

hwnd=CreateWindow (

lpszClassName, //窗口類名

lpszTitle, //窗口實例的標題名

WS_OVERLAPPEDWINDOW, //窗口的風(fēng)格

CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐標為缺省值

CW_USEDEFAULT, CW_USEDEFAULT,, //窗口的高和寬為缺省值

NULL, //此窗口無父窗口

NULL, //此窗口無主菜單

hInstance, //創(chuàng)建此窗口的應(yīng)用程序的當前句柄

NULL //不使用該值

);37//---------------顯示窗口----------------------ShowWindow(hwnd,nCmdShow);//--------------繪制用戶區(qū)---------------------UpdateWindow(hwnd);//-----------------消息循環(huán)----------------------while(GetMessage(&Msg,NULL,0,0)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);}returnMsg.wParam;//消息循環(huán)結(jié)束即程序終止時將信

溫馨提示

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

評論

0/150

提交評論