版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章Windows應(yīng)用程序界面的設(shè)計(jì),鄒昆Email:cszoukun@foxmail.com,2,第6章 Windows應(yīng)用程序界面的設(shè)計(jì),凡是對(duì)Windows應(yīng)用程序有一定了解的人都知道,Windows應(yīng)用程序界面具有大量的窗口和對(duì)話框。應(yīng)用程序的窗口設(shè)計(jì)得好壞會(huì)直接影響到應(yīng)用程序的質(zhì)量。,3,本章主要內(nèi)容,SDI界面和MDI界面。SDI界面窗口的樣式。拆分窗口及其顯示的同步更新。帶有滾動(dòng)條窗口的創(chuàng)建。,4,6.1 SD
2、I和MDI界面,SDI(單文檔界面)MDI(多文檔界面)MDI框架窗口是CMDIFrameWnd派生類(lèi)對(duì)象框架窗口中的子窗口是CChildFrame派生類(lèi)的對(duì)象,5,6.2 SDI界面窗口的樣式,使用MFC可以設(shè)計(jì)多種樣式的應(yīng)用程序窗口。設(shè)計(jì)時(shí),既可以在向?qū)FC AppWizard的各個(gè)對(duì)話框中以選項(xiàng)的方式確定程序的窗口樣式,也可以在框架窗口類(lèi)的成員函數(shù)PreCreateWindow中用代碼來(lái)選擇程序的窗口樣式。,6,6.2.3
3、 可拆分為小窗口的SDI界面,作用:從不同位置觀察大文檔;針對(duì)同一文檔提供不同視圖。注意:在MFC中只有具有文檔/視圖結(jié)構(gòu)的應(yīng)用程序才可以設(shè)計(jì)可拆分窗口的界面,因?yàn)橹挥性谶@種結(jié)構(gòu)中才能對(duì)同一文檔對(duì)象建立多個(gè)視圖對(duì)象。方法:通過(guò)MFC AppWizard,7,6.3 拆分窗口的同步更新及更新效率,6.3.1 拆分窗口的同步更新為何要同步更新?如何同步更新?void UpdateAllViews( CView* pSender
4、, LPARAM lHint = 0L, CObject* pHint = NULL ); 例6-2 可以同步更新所有窗口的應(yīng)用程序。,8,6.3.2 提高拆分窗口更新效率的方法,全部更新的潛在問(wèn)題:效率低,可能引起閃爍解決方法:只更新被修改的部分1. 理解視圖類(lèi)的成員函數(shù)InvalidateRect無(wú)效顯示區(qū):需要重繪的矩形區(qū)域void InvalidateRect( LPCRECT lpRect, BOOL bE
5、rase = TRUE );,9,6.3.2 提高拆分窗口更新效率的方法,2. 理解文檔類(lèi)的成員函數(shù)UpdateAllViews本視圖更新使用InvalidateRect來(lái)提高效率但其余視圖還得通過(guò)UpdateAllViews(this)問(wèn)題:如何讓其他視圖也僅對(duì)無(wú)效區(qū)域重繪呢?其實(shí)文檔類(lèi)的成員函數(shù)UpdateAllViews之所以能夠通知與文檔對(duì)象對(duì)應(yīng)的所有視圖進(jìn)行顯示更新,是因?yàn)樵赨pdateAllViews函數(shù)中調(diào)用了各個(gè)
6、視圖的成員函數(shù)OnUpdate:virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );,10,6.3.2 提高拆分窗口更新效率的方法,圖6-13程序員應(yīng)該設(shè)計(jì)一個(gè)以CObject為基類(lèi)的類(lèi),在該類(lèi)中封裝無(wú)效區(qū)域的相關(guān)數(shù)據(jù)及算法,然后創(chuàng)建這個(gè)類(lèi)的對(duì)象,并以這個(gè)對(duì)象的指針作為實(shí)參調(diào)用函數(shù)UpdateAllViews,然后在函數(shù)OnUpdate中計(jì)算出無(wú)
7、效區(qū)域的矩形后,再調(diào)用InvalidateRect函數(shù)來(lái)觸發(fā)OnDraw對(duì)無(wú)效區(qū)域進(jìn)行重繪。,11,6.3.2 提高拆分窗口更新效率的方法,例6-3 編寫(xiě)一個(gè)帶有可拆分窗口的SDI應(yīng)用程序,當(dāng)鼠標(biāo)單擊窗口用戶(hù)區(qū)時(shí),可以在鼠標(biāo)位置出現(xiàn)一個(gè)直徑大小隨機(jī)的圓。要求使用無(wú)效區(qū)進(jìn)行窗口顯示的同步更新。,12,6.4 創(chuàng)建帶有滾動(dòng)條的窗口,為了使程序員可以很方便地創(chuàng)建各種不同形式的程序界面,MFC以CView類(lèi)為基類(lèi)派生了一些具有增強(qiáng)功能的派生
8、類(lèi)。在程序框架向?qū)FC Wizard的第6步進(jìn)行選擇。,13,6.4 創(chuàng)建帶有滾動(dòng)條的窗口,兩種方法創(chuàng)建帶滾動(dòng)條窗口:方法一:創(chuàng)建工程時(shí)在MFC AppWizard-Step 6中選擇CScrollView類(lèi)為應(yīng)用程序視圖類(lèi)的基類(lèi)。滾動(dòng)條在哪里?方法二:手動(dòng)修改,將視圖類(lèi)的源文件和頭文件中的CView全部替換為CScrollView。為何會(huì)出錯(cuò)?,14,6.4 創(chuàng)建帶有滾動(dòng)條的窗口,CView::OnInitialUpd
9、ate virtual void OnInitialUpdate( ); 該函數(shù)只在生成視圖對(duì)象且與文檔結(jié)合時(shí),被程序框架調(diào)用一次,因此這是初始化滾動(dòng)條參數(shù)的地方。CScrollView::SetScrollSizes void SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE&a
10、mp; sizeLine = sizeDefault );,15,6.4 創(chuàng)建帶有滾動(dòng)條的窗口,例6-4把例6-3的程序界面改為一個(gè)帶有滾動(dòng)條的窗口,文檔的寬為3000,高為2000,滾動(dòng)頁(yè)為50,滾動(dòng)行為10.邏輯坐標(biāo):CDC的作圖函數(shù)均使用邏輯坐標(biāo)設(shè)備坐標(biāo):消息響應(yīng)函數(shù)均使用設(shè)備坐標(biāo),16,6.4 創(chuàng)建帶有滾動(dòng)條的窗口,CView::OnPrepareDC virtual void OnPrepareDC( CD
11、C* pDC, CPrintInfo* pInfo = NULL ); CDC::DPtoLP void DPtoLP( LPPOINT lpPoints, int nCount = 1 ) const;void DPtoLP( LPRECT lpRect ) const;void DPtoLP( LPSIZE lpSize ) const;CDC::LPtoDPvoid LPtoDP( LPPOINT lpPoints,
12、int nCount = 1 ) const;void LPtoDP( LPRECT lpRect ) const;void LPtoDP( LPSIZE lpSize ) const;,17,小結(jié),Windows應(yīng)用程序的界面有單文檔界面和多文檔界面的區(qū)別。每次繪圖操作結(jié)束后要調(diào)用視圖類(lèi)的成員函數(shù)InvalidateRect()或Invalidate()啟動(dòng)OnDraw()函數(shù)以更新顯示。文檔/視圖類(lèi)型的應(yīng)用程序可以實(shí)現(xiàn)一個(gè)文
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Windows應(yīng)用程序的用戶(hù)界面設(shè)計(jì)研究.pdf
- 基于c#的windows 應(yīng)用程序設(shè)計(jì)
- 第17章 創(chuàng)建windows應(yīng)用程序
- 富互聯(lián)網(wǎng)應(yīng)用程序交互界面的設(shè)計(jì)模式及設(shè)計(jì)方法研究.pdf
- windows應(yīng)用程序開(kāi)發(fā)初步常用窗體控件
- rfc1823_ldap 應(yīng)用程序界面
- 手機(jī)閱讀類(lèi)應(yīng)用程序的界面視覺(jué)設(shè)計(jì)研究
- windows應(yīng)用程序開(kāi)發(fā)進(jìn)階高級(jí)窗體控件
- 購(gòu)物類(lèi)手機(jī)應(yīng)用程序的界面設(shè)計(jì)研究.pdf
- 如何解決應(yīng)用程序dll為無(wú)效的windows映像
- 智能手機(jī)應(yīng)用程序界面用戶(hù)體驗(yàn)設(shè)計(jì)研究.pdf
- gps應(yīng)用程序設(shè)計(jì)
- 基于老年人認(rèn)知的應(yīng)用程序界面圖標(biāo)設(shè)計(jì)研究.pdf
- windows server 2003 ad應(yīng)用程序目錄分區(qū)深入了解
- 手機(jī)閱讀類(lèi)應(yīng)用程序的界面視覺(jué)設(shè)計(jì)研究_66.pdf
- 用uml設(shè)計(jì)java應(yīng)用程序
- web應(yīng)用程序設(shè)計(jì)(aspnet)
- vfp應(yīng)用程序設(shè)計(jì)實(shí)例
- 智能手機(jī)應(yīng)用程序界面設(shè)計(jì)中的顯與隱
- web應(yīng)用程序設(shè)計(jì)專(zhuān)業(yè)
評(píng)論
0/150
提交評(píng)論