<span id="plx27"><var id="plx27"></var></span>
<dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>

    windows程序設(shè)計(jì)004

    上傳人:dfg****19 文檔編號(hào):248210869 上傳時(shí)間:2024-10-22 格式:PPT 頁(yè)數(shù):49 大小:288KB
    收藏 版權(quán)申訴 舉報(bào) 下載
    windows程序設(shè)計(jì)004_第1頁(yè)
    第1頁(yè) / 共49頁(yè)
    windows程序設(shè)計(jì)004_第2頁(yè)
    第2頁(yè) / 共49頁(yè)
    windows程序設(shè)計(jì)004_第3頁(yè)
    第3頁(yè) / 共49頁(yè)

    下載文檔到電腦,查找使用更方便

    15 積分

    下載資源

    還剩頁(yè)未讀,繼續(xù)閱讀

    資源描述:

    《windows程序設(shè)計(jì)004》由會(huì)員分享,可在線閱讀,更多相關(guān)《windows程序設(shè)計(jì)004(49頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

    1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,Windows,程序設(shè)計(jì)基礎(chǔ),第四章,Windows,圖形界面,4.1,基礎(chǔ)知識(shí),創(chuàng)建主窗口,創(chuàng)建,Win32,工程,創(chuàng)建其他工程,int APIENTRY WinMain(HINSTANCE hInstance,/本模塊的實(shí)例句柄,HINSTANCE hPrevInstance,/Win16時(shí)代句柄,LPSTR lpCmdLine,/命令行參數(shù),int nCmdShow)/主窗口初始化時(shí)的顯示方式,/TODO:Place code here.,return 0;,入口函數(shù),lpCmdLine,,,nCm

    2、dShow,的值都是由,CreateProcess,函數(shù)的參數(shù),lpCommandLine,,,dwCreationFlags,指定。,創(chuàng)建窗口后,就要對(duì)窗口的行為負(fù)責(zé)。操作系統(tǒng)不斷的向應(yīng)用程序發(fā)送消息,通知它發(fā)生了什么事情。,當(dāng),Windows,向程序發(fā)送消息時(shí),它調(diào)用程序中的一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)精確地描述了,Windows,發(fā)送的消息。,在程序中稱(chēng)其為窗口函數(shù)或消息處理函數(shù)。它是一個(gè)自定義的回調(diào)函數(shù)。原形如下:,LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);,Windows,的消

    3、息驅(qū)動(dòng),4.2,消息驅(qū)動(dòng),回調(diào)函數(shù),回調(diào)函數(shù)是應(yīng)用程序提供給,Windows,系統(tǒng),DLL,或其它,DLL,調(diào)用的函數(shù),一般用于截獲消息、獲取系統(tǒng)信息或處理異步事件。應(yīng)用程序把回調(diào)函數(shù)的地址指針告訴,DLL,,而,DLL,在適當(dāng)?shù)臅r(shí)候會(huì)調(diào)用該函數(shù)?;卣{(diào)函數(shù)必須遵守事先規(guī)定好的參數(shù)格式和傳遞方式,否則,DLL,一調(diào)用它就會(huì)引起程序或系統(tǒng)的崩潰。通常情況下,回調(diào)函數(shù)采用標(biāo)準(zhǔn),WindowsAPI,的調(diào)用方式,即,_stdcall,,當(dāng)然,,DLL,編制者可以自己定義調(diào)用方式,但客戶程序也必須遵守相同的規(guī)定。在,_stdcall,方式下,函數(shù)的參數(shù)按從右到左的順序壓入堆棧,除了明確指明是指針或引用外

    4、,參數(shù)都按值傳遞,函數(shù)返回之前自己負(fù)責(zé)把參數(shù)從堆棧中彈出。,int main(int argc,char*argv),HWND hWnd=:FindWindow(NULL,”,無(wú)標(biāo)題,-,記事本,”,);,if(hWnd,!,=NULL),:SendMessage(hWnd,WM_CLOSE,0,0);,return 0;,示例,消息簡(jiǎn)單的說(shuō)就是指通過(guò)輸入設(shè)備向程序發(fā)出指令要執(zhí)行某個(gè)操作。具體的某個(gè)操作是你寫(xiě)的一系列代碼。稱(chēng)為消息處理函數(shù)。在,SDK,中消息其實(shí)非常容易理解,當(dāng)窗口建立后便會(huì)有一個(gè)函數(shù)(窗口處理函數(shù))開(kāi)始執(zhí)行一個(gè)消息循環(huán),我們還可以清楚的看到消息處理的脈絡(luò)。一個(gè),switch

    5、case,語(yǔ)句就可以搞定,消息循環(huán)直到遇到,WM_QUIT,消息才會(huì)結(jié)束,其余的消息均被攔截后調(diào)用相應(yīng)的處理函數(shù)。但在封裝了,API,的,MFC,中,消息似乎變的有些復(fù)雜了,我們看不到熟悉的,switch case,語(yǔ)句了,取而代之的是一個(gè)叫消息映射的東西。,消息,在現(xiàn)在的程序開(kāi)發(fā)活動(dòng)中,一個(gè)程序是否擁有多個(gè)窗體,主窗口就算只有一個(gè),那菜單、工具條、控件這些都是子窗口,需要寫(xiě)很多個(gè),switch case,,并且還要為每個(gè)消息分配一個(gè)消息處理函數(shù),這樣做非常復(fù)雜。因此,MFC,采用了一種新的機(jī)制。利用一個(gè)數(shù)組,將窗口消息和相對(duì)應(yīng)的消息處理函數(shù)進(jìn)行映射,你可以理解成這是一個(gè)表。這種機(jī)制就是消息映

    6、射。這張表在窗口基類(lèi),CWnd,定義,派生類(lèi)的消息映射表如果你沒(méi)有動(dòng)作它是空的,也就是說(shuō)如果你不手工的增加消息處理函數(shù),則當(dāng)派生窗口接受一個(gè)消息時(shí)會(huì)執(zhí)行父類(lèi)的消息處理函數(shù)。這樣做顯然是高效的。,消息映射,1,、,Windows,消息 此類(lèi)消息主要包括以前綴,WM_,開(kāi)頭的消息,,WM_COMMAND,除外。,Windows,消息由窗口和視圖處理。此類(lèi)消息往往帶有用于確定如何處理消息的參數(shù)。,消息,類(lèi)別,2,、控件通知 此類(lèi)消息包括從控件和其他子窗口發(fā)送到其父窗口的,WM_COMMAND,通知消息。例如,當(dāng)用戶在編輯控件,(Edit Control),中執(zhí)行可能更改文本的操作后,該編輯控件,(E

    7、dit Control),將向其父級(jí)發(fā)送包含,EN_CHANGE,控件通知代碼的,WM_COMMAND,消息。該消息的窗口處理程序以某種適當(dāng)?shù)姆绞巾憫?yīng)此通知消息,例如在控件中檢索該文本??蚣芟駛魉推渌?WM_,消息一樣傳送控件通知消息。但是有一個(gè)例外的情況,即當(dāng)用戶單擊按鈕時(shí)由按鈕發(fā)送的,BN_CLICKED,控件通知消息。該消息被作為命令消息特別處理,并像其他命令一樣傳送。,消息,類(lèi)別,3,、命令消息 此類(lèi)消息包括用戶界面對(duì)象(菜單、工具欄按鈕和快捷鍵)發(fā)出的,WM_COMMAND,通知消息??蚣芴幚砻畹姆绞脚c處理其他消息不同,可以使用更多種類(lèi)的對(duì)象處理命令。,消息,類(lèi)別,Windows,

    8、消息和控件通知消息由窗口來(lái)處理(窗口是從,CWnd,類(lèi)派生的類(lèi)的對(duì)象)。包括,CFrameWnd,、,CMDIFrameWnd,、,CMDIChildWnd,、,CView,、,CDialog,以及從這些基類(lèi)派生的您自己的類(lèi)。這些對(duì)象封裝了,HWNDWindows,窗口的句柄。命令消息可以由范圍更廣的對(duì)象(文檔、文檔模板以及應(yīng)用程序?qū)ο蟊旧恚┨幚?,而不僅僅由窗口和視圖處理。當(dāng)某一命令直接影響到某個(gè)特定對(duì)象時(shí),應(yīng)當(dāng)讓該對(duì)象處理此命令。例如,“文件”菜單中的“打開(kāi)”命令在邏輯上與應(yīng)用程序相關(guān)聯(lián):該應(yīng)用程序接收到此命令時(shí)會(huì)打開(kāi)指定的文檔。因此“打開(kāi)”命令的處理程序是應(yīng)用程序類(lèi)的成員函數(shù)。命令消息比較

    9、常見(jiàn)的便是菜單項(xiàng)和工具條了,它的消息映射宏和窗口消息不太一樣,一般的形式是這樣的,ON_COMMAND(id,memberFxn),。,消息,處理,還有一種消息叫通知消息。例如樹(shù)型控件的等一些復(fù)雜的控件在單擊后需要傳遞更多的信息,例如光標(biāo)的位置和當(dāng)前項(xiàng)的一個(gè)結(jié)構(gòu),所以,MFC,為控件的每個(gè)通知消息也定義了一個(gè)宏,它如下:,ON_CONTROL(EN_CHANGE,id,memberFxn),。,消息,處理,MFC,定義了下面的兩個(gè)主要結(jié)構(gòu),:AFX_MSGMAP_ENTRYstruct AFX_MSGMAP_ENTRYUINT nMessage;,/Windows,消息的,ID,號(hào),UINT

    10、nCode;,/,控制消息的通知,UINT nID;,/Windows,控制消息的,ID,UINT nLastID;,/,表示是一個(gè)指定范圍的消息被映射的范圍,UINT nSig;,/,表示消息的動(dòng)作標(biāo)識(shí),AFX_PMSG pfn;,/,指向消息處理函數(shù)的指針,;,MFC,提供的消息結(jié)構(gòu),AFX_MSGMAPstruct AFX_MSGMAP#ifdef _AFXDLLconst AFX_MSGMAP*(PASCAL*pfnGetBaseMap)();#elseconst AFX_MSGMAP*pBaseMap;#endifconst AFX_MSGMAP_ENTRY*lpEntries;/A

    11、FX_MSGMAP,可以得到基類(lèi)的消息映射入口地址和得到,/,本身的消息映射入口地址。,1,、,_AfxCbtFilterHook,截獲消息(這是一個(gè)鉤子函數(shù)),2,、,_AfxCbtFilterHook,把窗口過(guò)程設(shè)定為,AfxWndProc,。,3,、函數(shù),AfxWndProc,接收,Windows,操作系統(tǒng)發(fā)送的消息。,4,、函數(shù),AfxWndProc,調(diào)用函數(shù),AfxCallWndProc,進(jìn)行消息處理。,5,、函數(shù),AfxCallWndProc,調(diào)用,CWnd,類(lèi)的方法,WindowProc,進(jìn)行消息處理。,MFC,下消息的處理過(guò)程,一個(gè)標(biāo)準(zhǔn)的消息處理程序是這個(gè)樣子的在,CWnd,類(lèi)

    12、中預(yù)定義了標(biāo)準(zhǔn),Windows,消息,(WM_XXXX WM,是,WINDOW MESSAGE,的縮寫(xiě),),的默認(rèn)處理程序。類(lèi)庫(kù)基于消息名命名這些處理程序。例如,,WM_PAINT,消息的處理程序在,CWnd,中被聲明為:,afx_msg void OnPaint();afx_msg,關(guān)鍵字通過(guò)使這些處理程序區(qū)別于其他,CWnd,成員函數(shù)來(lái)表明,C+virtual,關(guān)鍵字的作用。但是請(qǐng)注意,這些函數(shù)實(shí)際上并不是虛擬的,而是通過(guò)消息映射實(shí)現(xiàn)的。所有能夠進(jìn)行消息處理的類(lèi)都是基于,CCmdTarget,類(lèi)的,也就是說(shuō),CCmdTarget,類(lèi)是所有可以進(jìn)行消息處理類(lèi)的父類(lèi)。,CCmdTarget,類(lèi)

    13、是,MFC,處理命令消息的基礎(chǔ)和核心。,如何添加自己的消息?,若要重寫(xiě)基類(lèi)中定義的處理程序,只需在派生類(lèi)中定義一個(gè)具有相同原型的函數(shù),并創(chuàng)建此處理程序的消息映射項(xiàng)。通過(guò),ClassWizard,可以建立大多數(shù)窗口消息或自定義的消息,通過(guò),ClassWizard,可以自動(dòng)建立消息映射,和消息處理函數(shù)的框架,我們只需要把我們要做的事情填空,添加你要做的事情到處理函數(shù)。但是也許需要添加一些,ClassWizard,不支持的窗口消息或自定義消息,那么就需要親自動(dòng)手建立消息映射和消息處理的框架,通常步驟如下:,步驟,第一步:定義消息。,Microsoft,推薦用戶自定義消息至少是,WM_USER+100

    14、,,因?yàn)楹芏嘈驴丶惨褂?WM_USER,消息。,#define WM_MYMESSAGE(WM_USER+100),第二步:實(shí)現(xiàn)消息處理函數(shù)。該函數(shù)使用,WPRAM,和,LPARAM,參數(shù)并返回,LPESULT,。,LPESULT CMainFrame:OnMyMessage(WPARAM wParam,LPARAM lParam)/TODO:,處理用戶自定義消息,填空就是要填到這里。,return 0;,第三步:在類(lèi)頭文件的,AFX_MSG,塊中說(shuō)明消息處理函數(shù):,/AFX_MSG(CMainFrame)afx_msg LRESULT OnMyMessage(WPARAM wParam,

    15、LPARAM lParam);/AFX_MSG DECLARE_MESSAGE_MAP(),第四步:在用戶類(lèi)的消息塊中,使用,ON_MESSAGE,宏指令將消息映射到消息處理函數(shù)中。,ON_MESSAGE(WM_MYMESSAGE,OnMyMessage),可以看出,用戶自定義的消息和我們通過(guò),ClassWizard,添加的消息一樣,都是利用了,ON_MESSAGE,宏,建立的消息映射。,步驟,1,)注冊(cè)窗口類(lèi),RegisterClassEx,2,)創(chuàng)建窗口,CreateWindowEx,3,)在桌面顯示窗口,ShowWindow,4,)更新窗口客戶區(qū),UpdateWindow,5,)進(jìn)入無(wú)限

    16、的消息獲取和處理的循環(huán)。首先是獲取消息,GetMessage,,如果有消息到達(dá),則將消息分派到回調(diào)函數(shù)處理,DispatchMessage,,如果是,WM_QUIT,,則,GetMessage,函數(shù)返回,FALSE,,整個(gè)消息循環(huán)結(jié)束。消息的具體處理過(guò)程在,MainWndProc,函數(shù)中進(jìn)行。,顯示一個(gè)窗口的具體步驟,1,)注冊(cè)窗口類(lèi),RegisterClassEx,2,)創(chuàng)建窗口,CreateWindowEx,3,)在桌面顯示窗口,ShowWindow,4,)更新窗口客戶區(qū),UpdateWindow,5,)進(jìn)入無(wú)限的消息獲取和處理的循環(huán)。首先是獲取消息,GetMessage,,如果有消息到達(dá),則將消息分派到回調(diào)函數(shù)處理,DispatchMessage,,如果是,WM_QUIT,,則,GetMessage,函數(shù)返回,FALSE,,整個(gè)消息循環(huán)結(jié)束。消息的具體處理過(guò)程在,MainWndProc,函數(shù)中進(jìn)行。,顯示一個(gè)窗口的具體步驟,typedef struct tagMSG,HWND,hwnd;,/,消息要發(fā)送的窗口句柄,UINT,message;/,消息標(biāo)識(shí)符,以,WM_,開(kāi)頭的預(yù)定義

    展開(kāi)閱讀全文
    溫馨提示:
    1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
    2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
    3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
    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ì)自己和他人造成任何形式的傷害或損失。

    相關(guān)資源

    更多
    正為您匹配相似的精品文檔
    關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

    copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

    備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


    本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

    欧美久久久一区二区三区,国产精品亚洲一区二区无码,亚洲国产精品综合久久20声音,亚洲国产精品无码久久久蜜芽
    <span id="plx27"><var id="plx27"></var></span>
    <dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>