日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC让文档/视图结构程序支持滚动条

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC让文档/视图结构程序支持滚动条 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????
MFC讓文檔/視圖結構程序支持滾動條
2009-06-30 09:26要通過滾動條顯示文檔,還必須知道文檔滾動到了什么位置;一旦用戶拖動滾動條時要告訴視圖改變在文檔中

的位置。所有這些,由MFC的CSrollView類來完成。而程序員要做的工作是:

1、從CScrollView類中派生自己的視圖類,以支持滾動條

2、提供文檔大小,確定滾定范圍和設置初始值

3、協調文檔位置和屏幕坐標

一、有CScrollView類派生視圖類

使用AppWizard創建應用程序框架時,在第6步時,可以選擇CScrollView類作為視圖類的基類。另外在程序中

也可以手工設置:在視圖類 *view的頭文件和資源文件中,搜索CView,將其替換為CScrollView即可。

二、確定滾動那個范圍,設置初始值

滾動窗口創建時,必須設置客戶窗口的總尺寸。使用CWnd成員函數SetScrollSizes()可以設置滾動窗口的尺

寸。該操作必須在客戶窗口創建前完成,因此需要重載視圖類的OnInitialUpdate()函數。如下代碼:

void CCh10Demo3View::OnInitialUpdate()
{
?CScrollView::OnInitialUpdate();
?SIZE size={3000,1500};
?SetScrollSizes(MM_TEXT,size);//滾動窗口的最大區域/
}

三、協調文檔位置與屏幕坐標

在Windows中,文檔坐標系成為邏輯坐標系,視圖坐標系成為設備坐標系。在視圖滾動后,如果用戶在視圖

中單擊坐標,那么會得到鼠標位置的設備(視圖)坐標。在使用這一個數據處理文檔(如點線)時,需要把

它轉化為文檔坐標。當調用MFC繪圖函數繪圖時,Windows自動將文檔轉化為視圖坐標,然后再繪圖。

CDC提供了了兩個成員函數LPToDP()和DPToLP()完成之間的轉換工作。對于本例而言,在鼠標消息響應

函數中,其獲取的坐標是設備坐標,因此需要使用DPTOLP()轉為文檔坐標。而在OnDraw()函數中文檔坐標

轉為視圖坐標進行繪圖是系統自動完成的。

另外,視圖坐標和文檔坐標還存在原點的匹配問題。如果視圖的滾動條沒有滾動則原點是重合的,如果滾動

了則不一致,這就需要我們調整視圖坐標。CScrollView視圖類提供了一個函CScrollView::OnPrepareDC()

成員函數,完成視圖設備上下文坐標原點的匹配。

需要在鼠標及按鍵消息響應中添加如下代碼:


?CClientDC dc(this);//獲取客戶窗口DC
?OnPrepareDC(&dc);//進行坐標原點的匹配
?dc.DPtoLP(&point);//將視圖坐標轉換為文檔作標

?

類別:c++學習 | 添加到搜藏 | 瀏覽(296) | 評論 (1)

上一篇:MFC中指定對話框中的文件類型 下一篇:VC++應用程序類之間的關系

總結

以上是生活随笔為你收集整理的MFC让文档/视图结构程序支持滚动条的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。