国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Visual C .NET編程講座之三(6)
Visual C++.NET編程講座之三(6)
3. 直接控制文本的輸出

  圖形和文本的繪制需要用到MFC的CDC類,它是一個設(shè)備環(huán)境類。所謂設(shè)備環(huán)境,就好比我們寫字用的紙那樣,顯示時指的是屏幕,打印時指的是打印機(jī)。實(shí)際上,MFC的CDC類還為一些特殊的設(shè)備環(huán)境提供相應(yīng)的派生類。例如,CClientDC是一個窗口客戶區(qū)的設(shè)備環(huán)境類。

  CDC為我們提供了四個輸出文本的函數(shù):TextOut、ExtTextOut、TabbedTextOut和DrawText,分別用于不同的場合。如果想要繪制的文本需要支持Tab符,那么采用TabbedTextOut函數(shù),可以使繪制出來的文本效果更佳;如果要在一個矩形區(qū)域內(nèi)繪制多行文本,那么采用DrawText函數(shù),會更富于效率;如果文本和圖形結(jié)合緊密,字符間隔不等,并要求有背景顏色或矩形裁剪特性,那么ExtTextOut函數(shù)就將是最好的選擇。如果沒有什么特殊要求,那使用TextOut函數(shù)就顯得簡練了。在本例中,我們使用TabbedTextOut函數(shù)來繪制文本,它的函數(shù)原型如下:

CSize TabbedTextOut( int x, int y, const CString& str,
int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );

  該函數(shù)用當(dāng)前字體在指定位置 (x,y) 處顯示一個由str指定的文本,且根據(jù)指定的制表停止位設(shè)置相應(yīng)字符位置。函數(shù)成功時返回文本的大小。參數(shù)中,nTabPositions表示lpnTabStopPositions數(shù)組的大小,lpnTabStopPositions表示多個遞增的停止位(邏輯坐標(biāo))的數(shù)組,nTabOrigin表示制表停止位x方向的起始點(diǎn)(邏輯坐標(biāo))。

  具體步驟如下:

  (1) 重新創(chuàng)建一個新的單文檔應(yīng)用程序項(xiàng)目Viewer,在向?qū)У?生成的類"頁面中將CViewerView的基類CView改成CScrollView。CScrollView類是一個用來提供自動滾動或縮放功能的視圖結(jié)構(gòu)。

  (2) 按文檔數(shù)據(jù)的讀操作,在CViewerDoc類中,添加保存文檔數(shù)據(jù)的CStringArray類對象m_strContent,并添加相應(yīng)的操作代碼。

  (3) 文本內(nèi)容的輸出代碼一般是添加在視圖類的OnDraw函數(shù)中,但為了調(diào)用的方便,我們這里在視圖類中添加一個成員函數(shù)DispContent。

  (4) 將解決方案管理器窗口切換到"類視圖",展開所有的類,右擊類名"CViewerView",從彈出的快捷菜單中選擇"添加"->"添加函數(shù)",彈出"添加成員函數(shù)向?qū)?對話框,在"返回類型"框中輸入void,在"函數(shù)名"框中輸入DispContent,在"參數(shù)類型"框中輸入CDC*,在"參數(shù)名"框中輸入pDC,然后單擊"添加"按鈕,結(jié)果如圖14所示。單擊"完成"按鈕。


                              圖14 添加成員函數(shù)DispContent

  (5) 在DispContent函數(shù)中添加如圖15所示的代碼。


                                圖15 DispContent函數(shù)代碼

  SetScrollSizes()是CScrollView類的成員函數(shù),用來設(shè)置相應(yīng)的坐標(biāo)映射模式和邏輯滾動窗口的大小。所謂"邏輯滾動窗口",是在指定的坐標(biāo)映射模式下的一個"虛擬窗口"。當(dāng)虛擬窗口超過視圖客戶區(qū)(可稱為"顯示窗口")的大小時,視圖客戶區(qū)中就會自動出現(xiàn)滾動條,供用戶滾動瀏覽。若虛擬窗口比顯示窗口小,則視圖客戶區(qū)中不會出現(xiàn)滾動條。MM_TEXT是"文本"坐標(biāo)映射模式。在該模式下,x坐標(biāo)從左向右遞增,y坐標(biāo)自上而下遞增,坐標(biāo)以像素為單位,這也是MFC的默認(rèn)坐標(biāo)模式。

  (6) 在CViewerView::OnDraw函數(shù)添加DispContent調(diào)用代碼,如圖16所示的加框部分。OnDraw()是視圖類中非常有用的一個函數(shù),當(dāng)應(yīng)用程序中的窗口狀態(tài)或大小發(fā)生改變時,系統(tǒng)均會調(diào)用此函數(shù)重新繪制視圖窗口的客戶區(qū)。因此,我們應(yīng)該將一些圖形繪制添加到此函數(shù)中。


                                 圖16 DispContent的調(diào)用

  (7) 運(yùn)行程序,打開當(dāng)前文件夾下的ReadMe.txt文件,結(jié)果如圖17所示。


                                   圖17 文本繪制的結(jié)果

  評述:這種方法雖然較復(fù)雜一點(diǎn),但是卻能控制每行文本的行距,并可使用CDC類的其他文本和文字處理函數(shù),使得文本表現(xiàn)更具豐富力。另外,由于繪制的代碼過程是添加在OnDraw中,因此該方法能使默認(rèn)的打印和打印預(yù)覽功能有效。缺點(diǎn)是,顯示的速度表現(xiàn)欠佳。

  結(jié)束語

  本講中,通過MFC的文檔讀過程討論了文檔的讀操作及不同的文檔數(shù)據(jù)顯示方法和技巧,在下一講中,我們將通過菜單和工具欄來改變文本顯示的字體和顏色,并討論它們與狀態(tài)欄這三者之間的相互關(guān)系。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
OnPaint函數(shù)工作原理
使用VC++能否實(shí)現(xiàn)輸入數(shù)據(jù)表單界面與打印效果一樣
Windows定義8種映射方式
函數(shù)OnPaint、OnPrint和OnDraw間的區(qū)別聯(lián)系zz
Android 中 更新視圖的函數(shù)ondraw() 和dispatchdraw()的區(qū)別
MFC繪圖總結(jié)(2):客戶區(qū)大小和DC | 求索閣
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服