版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四講第四講 windows編程基礎(chǔ)編程基礎(chǔ)4.1 windows 軟件結(jié)構(gòu)軟件結(jié)構(gòu)消息驅(qū)動體系消息驅(qū)動體系鍵盤輸入鍵盤輸入鼠標(biāo)輸入鼠標(biāo)輸入狀態(tài)改變狀態(tài)改變系統(tǒng)消息隊列系統(tǒng)消息隊列應(yīng)用程序隊列應(yīng)用程序隊列應(yīng)用程序隊列應(yīng)用程序隊列應(yīng)用程序隊列應(yīng)用程序隊列窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口消息循環(huán)消息循環(huán)消息循環(huán)消息循環(huán)消息循環(huán)消息循環(huán)windows應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序應(yīng)用程序框架應(yīng)用程序框架程序開發(fā)過程程序開發(fā)過程源程序源程序*.c/*.cpp目標(biāo)程序目標(biāo)程序*.obj可執(zhí)行文件可執(zhí)行文件*.exe可執(zhí)行程序可執(zhí)行程序*.exe資源描述資源描述*
2、.rc庫函數(shù)庫函數(shù)*.lib模塊定義模塊定義*.def資源文件資源文件*.res編譯器編譯器連接器連接器資源連接資源連接開發(fā)工具開發(fā)工具資源編譯資源編譯源程序結(jié)構(gòu)源程序結(jié)構(gòu) 消息循環(huán) case消息1 case消息2 case消息n 窗口函數(shù)1 switch(消息) case消息1 case消息2 case消息n窗口函數(shù)2 switch(消息) case消息1 case消息2case消息n窗口函數(shù)n switch(消息)windows 應(yīng)用程序 組成結(jié)構(gòu)winmain 的程序結(jié)構(gòu)的程序結(jié)構(gòu)l應(yīng)用程序入口應(yīng)用程序入口winmain( 程序?qū)嵗浔?,上一程序?qū)嵗浔绦驅(qū)嵗浔?,上一程序?qū)嵗浔?/p>
3、命令行參數(shù),顯示狀態(tài)命令行參數(shù),顯示狀態(tài))if( 是首次實例是首次實例 )登記主窗口所屬的窗口類;登記主窗口所屬的窗口類;創(chuàng)建主窗口;創(chuàng)建主窗口;顯示主窗口;顯示主窗口;消息循環(huán);消息循環(huán);窗口的登記、創(chuàng)建與顯示窗口的登記、創(chuàng)建與顯示wndclass ws;ws.lpszclassname = 窗口類名;窗口類名;ws.lpfnwndproc = 窗口函數(shù)名;窗口函數(shù)名;/* 給定的窗口函數(shù)負(fù)責(zé)該類窗口的消息響應(yīng)給定的窗口函數(shù)負(fù)責(zé)該類窗口的消息響應(yīng) */registerclass( &ws ); /* 登記窗口類登記窗口類 */窗口句柄窗口句柄 = createwindow(窗口類名,
4、標(biāo)題,窗口類名,標(biāo)題, ); showwindow(窗口句柄,狀態(tài)窗口句柄,狀態(tài)); /* 創(chuàng)建與顯示創(chuàng)建與顯示 */* 窗口句柄是窗口的唯一標(biāo)識窗口句柄是窗口的唯一標(biāo)識 */消息循環(huán)消息循環(huán)例例4-1:窗口函數(shù)窗口函數(shù)lresult callback 窗口函數(shù)窗口函數(shù) ( hwnd,msg,wparam,lparam ) int x = loword( lparam ); / 獲得鼠標(biāo)位置獲得鼠標(biāo)位置 int y = hiword( lparam ); hdc hdc = getdc( hwnd );/ 獲取設(shè)備句柄獲取設(shè)備句柄 switch( msg ) case wm_lbuttondo
5、wn:/ 鼠標(biāo)按下鼠標(biāo)按下 textout(hdc, 10, 10,“hello”, 5);/ 文本輸出文本輸出 moveto(hdc, x, y); break;/ 設(shè)置當(dāng)前點設(shè)置當(dāng)前點 case wm_lbuttonup:/ 鼠標(biāo)釋放鼠標(biāo)釋放 lineto(hdc, x, y);break;/ 畫線至指定點畫線至指定點 releasedc(hwnd, hdc);/ 釋放設(shè)備句柄釋放設(shè)備句柄 / 識別收到的各種消息,完成消息響應(yīng)識別收到的各種消息,完成消息響應(yīng)4.2 mfc程序設(shè)計引論程序設(shè)計引論windows系統(tǒng)的分析系統(tǒng)的分析mfc設(shè)計思想:設(shè)計思想:提供程序基本框架提供程序基本框架ap
6、pwizard 程序設(shè)計程序設(shè)計例例4-2:視窗消息映射的生成:視窗消息映射的生成例例4-3:消息響應(yīng)的編制:消息響應(yīng)的編制消息響應(yīng)消息響應(yīng)void cmyview:onmenu( ) cmydoc *pdoc = getdocument( ); / 獲得文檔獲得文檔pdoc- ( ) / 處理文檔處理文檔pdoc-updateviews(0); / 通知所有視窗通知所有視窗 void cmyview:onok( ) afxmessagebox( “謝謝使用,下次再見。謝謝使用,下次再見?!?);onclose( ); / 關(guān)閉窗口關(guān)閉窗口使用使用 oo 方法的好處:方法的好處:練習(xí)題(練習(xí)題
7、(4-1)l按照以下要求,改造本節(jié)例題按照以下要求,改造本節(jié)例題 仍然提供鼠標(biāo)劃線的功能仍然提供鼠標(biāo)劃線的功能 將每次輸入的線位置信息保存到文檔類將每次輸入的線位置信息保存到文檔類 在在ondraw中,完成劃線功能中,完成劃線功能l上機調(diào)試上機調(diào)試 提示:提示:在鼠標(biāo)響應(yīng)中,用在鼠標(biāo)響應(yīng)中,用 invalidate( )激活激活ondraw應(yīng)用例應(yīng)用例4-4:繪圖程序的開發(fā):繪圖程序的開發(fā)l需求說明需求說明 提供一個繪圖程序;提供一個繪圖程序; 支持點、直線、曲線、多邊形的可視化輸入支持點、直線、曲線、多邊形的可視化輸入l人機交互設(shè)計人機交互設(shè)計 鼠標(biāo)單擊:表示起點鼠標(biāo)單擊:表示起點 再次單擊
8、:生成點,給予保存再次單擊:生成點,給予保存 鼠標(biāo)雙擊:鼠標(biāo)雙擊: 位置與起點相同,且未保存點:則生成點位置與起點相同,且未保存點:則生成點 位置與起點相同,且保存了其他點:則生成多邊形位置與起點相同,且保存了其他點:則生成多邊形 否則,如僅保存否則,如僅保存1點:則生成直線點:則生成直線 否則,生成曲線否則,生成曲線數(shù)據(jù)分析與對象確認(rèn)數(shù)據(jù)分析與對象確認(rèn)l幾何圖元(二維)幾何圖元(二維) 點、線、面(多邊形)點、線、面(多邊形) 圖元共性:位移、繪圖、擦圖圖元共性:位移、繪圖、擦圖l編輯中的數(shù)據(jù)需求編輯中的數(shù)據(jù)需求 起點起點 start 已輸入點數(shù)據(jù)的集合已輸入點數(shù)據(jù)的集合 points 表示
9、正在編輯的狀態(tài)(用起點非空表示)表示正在編輯的狀態(tài)(用起點非空表示)l已經(jīng)編輯好的圖元組成圖形已經(jīng)編輯好的圖元組成圖形 圖元集合圖元集合 pic圖元對象模型圖元對象模型圖元圖元圖形圖形面面線線點點2+1+1圖元關(guān)聯(lián)圖元關(guān)聯(lián)多個圖元組成圖形、多多個圖元組成圖形、多點組成線、邊線屬于面點組成線、邊線屬于面點、線、面是圖元;子點、線、面是圖元;子圖形可作為圖元圖形可作為圖元各種圖元類的實現(xiàn)策略各種圖元類的實現(xiàn)策略#include #include class geometry : public cobject / 圖元基類圖元基類public:virtual void offset( int cx,
10、 int cy ) = 0; / 位移位移virtual void draw( cdc *pdc ) = 0; / 繪圖繪圖;class point : public geometry / 點圖元類點圖元類public: int xval, yval; / 點坐標(biāo)點坐標(biāo)point( int x, int y )/ 構(gòu)造構(gòu)造xval= x;yval= y;void offset( int cx, int cy )/ 位移位移xval += cx;yval += cy;void draw( cdc *pdc )/ 繪圖繪圖pdc-g.setpixel( xval, y.val, rgb(0,0,0
11、) ); 圖形類圖形類class graph : public geometry cobarray elems;/圖元集圖元集public:void offset( int cx, int cy ) /位移位移for( int i=0; ioffset( cx, cy );void draw( cdc *pdc ) /繪圖繪圖for( int i=0; idraw( pdc );int getsize( ) / 求元素個數(shù)求元素個數(shù)return elems.getsize( );void add( geometry *geo )/ 添加一元素添加一元素elems.add( geo );geom
12、etry *getat( int idx )/ 獲得指定元素獲得指定元素return (geometry *)elems.getat( idx ); class linestring : public graph public:/ 線對象包含若干點對象指針線對象包含若干點對象指針void draw( cdc *pdc )/線的繪制線的繪制if( getsize( ) moveto( pt-xval, pt-yval );for( int i=1; ilineto( pt-xval, pt-yval );class surface : public linestring public:/ 面對象包含線對象面對象包含線對象void draw( cdc *pdc )/面的繪制面的繪制linestring:draw( pdc );/繪制邊線繪制邊線/ 可以擴充填色功能可以擴充填色功能線圖元類和面圖元類線圖元類和面圖元類文檔類和文檔類和視窗類視窗類圖形的輸出圖形的
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體檢科主任先進(jìn)事跡(7篇)
- 二級職稱專業(yè)技術(shù)工作總結(jié)(5篇)
- 企業(yè)舉辦年會總結(jié)主持詞結(jié)束語
- DB12T 487-2013 放射性同位素與射線裝置安全使用管理制度編制規(guī)范
- 書香校園演講稿模板九篇
- 中考前國旗下講話稿
- 個人師德師風(fēng)剖析材料范文(6篇)
- 與感恩同行演講稿錦集六篇
- DB12∕T 1048-2021 蚯蚓養(yǎng)殖技術(shù)規(guī)程
- 驗光技術(shù)課件教學(xué)課件
- 22G101-1與16G101-1的圖集差異
- 《針織學(xué)》期末考試試卷附答案
- 特種設(shè)備使用登記表(范本)
- (完整版)5以內(nèi)的加減法(可直接打印)
- 智能物流-完整版課件(全)
- 新疆準(zhǔn)東經(jīng)濟技術(shù)開發(fā)區(qū)西部固廢處置場項目環(huán)評報告書
- GB∕T 36008-2018 機器人與機器人裝備 協(xié)作機器人
- (新版)保衛(wèi)管理員考試題庫(含答案)
- 信貸法律基礎(chǔ)知識培訓(xùn)講座PPT
- TCECA-G 0171-2022 零碳工廠評價規(guī)范
- 光與色的世界(課件)
評論
0/150
提交評論