2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章Windows應(yīng)用程序界面的設(shè)計,鄒昆Email:cszoukun@foxmail.com,2,第6章 Windows應(yīng)用程序界面的設(shè)計,凡是對Windows應(yīng)用程序有一定了解的人都知道,Windows應(yīng)用程序界面具有大量的窗口和對話框。應(yīng)用程序的窗口設(shè)計得好壞會直接影響到應(yīng)用程序的質(zhì)量。,3,本章主要內(nèi)容,SDI界面和MDI界面。SDI界面窗口的樣式。拆分窗口及其顯示的同步更新。帶有滾動條窗口的創(chuàng)建。,4,6.1 SD

2、I和MDI界面,SDI(單文檔界面)MDI(多文檔界面)MDI框架窗口是CMDIFrameWnd派生類對象框架窗口中的子窗口是CChildFrame派生類的對象,5,6.2 SDI界面窗口的樣式,使用MFC可以設(shè)計多種樣式的應(yīng)用程序窗口。設(shè)計時,既可以在向?qū)FC AppWizard的各個對話框中以選項的方式確定程序的窗口樣式,也可以在框架窗口類的成員函數(shù)PreCreateWindow中用代碼來選擇程序的窗口樣式。,6,6.2.3

3、 可拆分為小窗口的SDI界面,作用:從不同位置觀察大文檔;針對同一文檔提供不同視圖。注意:在MFC中只有具有文檔/視圖結(jié)構(gòu)的應(yīng)用程序才可以設(shè)計可拆分窗口的界面,因為只有在這種結(jié)構(gòu)中才能對同一文檔對象建立多個視圖對象。方法:通過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 提高拆分窗口更新效率的方法,全部更新的潛在問題:效率低,可能引起閃爍解決方法:只更新被修改的部分1. 理解視圖類的成員函數(shù)InvalidateRect無效顯示區(qū):需要重繪的矩形區(qū)域void InvalidateRect( LPCRECT lpRect, BOOL bE

5、rase = TRUE );,9,6.3.2 提高拆分窗口更新效率的方法,2. 理解文檔類的成員函數(shù)UpdateAllViews本視圖更新使用InvalidateRect來提高效率但其余視圖還得通過UpdateAllViews(this)問題:如何讓其他視圖也僅對無效區(qū)域重繪呢?其實文檔類的成員函數(shù)UpdateAllViews之所以能夠通知與文檔對象對應(yīng)的所有視圖進行顯示更新,是因為在UpdateAllViews函數(shù)中調(diào)用了各個

6、視圖的成員函數(shù)OnUpdate:virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );,10,6.3.2 提高拆分窗口更新效率的方法,圖6-13程序員應(yīng)該設(shè)計一個以CObject為基類的類,在該類中封裝無效區(qū)域的相關(guān)數(shù)據(jù)及算法,然后創(chuàng)建這個類的對象,并以這個對象的指針作為實參調(diào)用函數(shù)UpdateAllViews,然后在函數(shù)OnUpdate中計算出無

7、效區(qū)域的矩形后,再調(diào)用InvalidateRect函數(shù)來觸發(fā)OnDraw對無效區(qū)域進行重繪。,11,6.3.2 提高拆分窗口更新效率的方法,例6-3 編寫一個帶有可拆分窗口的SDI應(yīng)用程序,當(dāng)鼠標(biāo)單擊窗口用戶區(qū)時,可以在鼠標(biāo)位置出現(xiàn)一個直徑大小隨機的圓。要求使用無效區(qū)進行窗口顯示的同步更新。,12,6.4 創(chuàng)建帶有滾動條的窗口,為了使程序員可以很方便地創(chuàng)建各種不同形式的程序界面,MFC以CView類為基類派生了一些具有增強功能的派生

8、類。在程序框架向?qū)FC Wizard的第6步進行選擇。,13,6.4 創(chuàng)建帶有滾動條的窗口,兩種方法創(chuàng)建帶滾動條窗口:方法一:創(chuàng)建工程時在MFC AppWizard-Step 6中選擇CScrollView類為應(yīng)用程序視圖類的基類。滾動條在哪里?方法二:手動修改,將視圖類的源文件和頭文件中的CView全部替換為CScrollView。為何會出錯?,14,6.4 創(chuàng)建帶有滾動條的窗口,CView::OnInitialUpd

9、ate virtual void OnInitialUpdate( ); 該函數(shù)只在生成視圖對象且與文檔結(jié)合時,被程序框架調(diào)用一次,因此這是初始化滾動條參數(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)建帶有滾動條的窗口,例6-4把例6-3的程序界面改為一個帶有滾動條的窗口,文檔的寬為3000,高為2000,滾動頁為50,滾動行為10.邏輯坐標(biāo):CDC的作圖函數(shù)均使用邏輯坐標(biāo)設(shè)備坐標(biāo):消息響應(yīng)函數(shù)均使用設(shè)備坐標(biāo),16,6.4 創(chuà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)用視圖類的成員函數(shù)InvalidateRect()或Invalidate()啟動OnDraw()函數(shù)以更新顯示。文檔/視圖類型的應(yīng)用程序可以實現(xiàn)一個文

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論