CScrollView的使用

转载 2013年12月04日 16:31:37

CScrollView这个类用于需要滚动条的场合。我们可以直接用向导生成,在选择视图类的基类时选择CScrollView即可。

如果我们的程序原来用的是CView类,此时想改成CScrollView类,需要稍微做一下修改。

CView-->CScrollView


利用ClassWizard,在CxxView類別中,建立OnInitialUpdate( ) member function

void CxxView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

SetScrollSizes(MM_TEXT, CSize( 800, 600 ) );
}

cpp中:
IMPLEMENT_DYNCREATE(CxxView, CScrollView)
BEGIN_MESSAGE_MAP(CxxView, CScrollView)

 

 

如何在对话框中使用CScrollview类( 转 )

CRect rectWindow;
GetWindowRect(rectWindow);
CRuntimeClass *pViewClass = RUNTIME_CLASS(CMyScrollView);
CCreateContext * pContext;
pContext = new CCreateContext;
pContext->m_pCurrentDoc = NULL;
pContext->m_pCurrentFrame = NULL;
pContext->m_pLastView = NULL;
pContext->m_pNewDocTemplate =NULL;
pContext->m_pNewViewClass = pViewClass;
CWnd * pWnd = NULL;
pWnd = DYNAMIC_DOWNCAST(CWnd,pViewClass->CreateObject());
pWnd ->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,0,pContext);
delete pContext;
CMyScrollView * pScollView = DYNAMIC_DOWNCAST(CMyScrollView,pWnd);
pScollView->SetScrollSizes( MM_TEXT, CSize(rectWindow.right - rectWindow.left-20,
rectWindow.bottom -rectWindow.top-100) );
pScollView->MoveWindow(rectWindow.left,rectWindow.top,rectWindow.right - rectWindow.left-20,
rectWindow.bottom -rectWindow.top-100,TRUE);

 

在VC中如何使用CScrollView类,即让视图具有滚动的功能;
方法 一:新生成的视图类,必须继承CScrollView类,
如下所示:
class CImageProcessingView : public CScrollView
{
    ……;
}
然后在C*****View中,修改OnInitialUpdate()成员的代码,其中要进行矩形长、宽的设置,如下:
sizeTotal.cx = sizeTotal.cy = 4000;
这边要注意的是,其值不能太小,若太小了,在显示图像时,当图像的规格大小所设置的值时,便无法实现滚动的功能。
void CImageProcessingView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();
    CImageProcessingDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = sizeTotal.cy = 4000;
    SetScrollSizes(MM_TEXT, sizeTotal);

方法二:此方法中,以上面的操作大同小异。就是有关于sizeTotal的设置采取了更“自由”的方法,这主要是在面向图像方面的。应用如下:
    SetScrollSizes(MM_TEXT,GetDocument()->GetDocSize());
这里将较详细地介绍下GetDocSize()方法,它返回的是一个CSize变量。
    CSize GetDocSize() const
        { return m_sizeDoc; }//m-sizeDoc是声明在C*****Doc类的变量,GetDocSize()也是//C*****Doc类中的成员函数。
    //
提取图像的大小,
设置文档大小
    m_sizeDoc = CSize((int) ::DIBWidth(lpDIB), (int) ::DIBHeight(lpDIB));

CScrollView双缓冲绘图

笔者曾经在做一个多文档编辑器的时候需要用到CScrollView,为避免绘图闪烁需要用到双缓冲绘图,但是CScrollView的双缓冲与之前做Dialog程序时使用的双缓冲是有区别的, 因为在拖动滚动...
  • pcradio
  • pcradio
  • 2015年07月01日 13:43
  • 843

CScrollView中双缓冲画图

CScrollView中双缓冲画图,采用裁剪区提高画图效率。
  • yan_auvtech
  • yan_auvtech
  • 2010年09月26日 10:29
  • 2428

MFC-CScrollView类详解

CScrollView是带滚动功能的视图的基类。可从CScrollView派生出视图类,实现自动滚动功能。       带滚动功能的视图的基类。可从CScrollView派生出视图类,实现自动滚...
  • mimixiao345
  • mimixiao345
  • 2014年07月11日 22:31
  • 1202

MFC中CScrollView类的使用以及CScrollView的双缓冲绘图

昨天遇到一个问题,把从CView继承的视图类,改成基类为CScrollView。 说明:CScrollView这个类用于需要滚动条的场合。我们可以直接用向导生成,在选择视图类的基类时选择CScr...
  • lijunfeng262
  • lijunfeng262
  • 2014年08月26日 14:55
  • 707

[MFC]ScrollDemo程序:CScrollView滚动视图的应用

1. CView的各种派生类:     1) MFC为了方便,还从CView派生出一些具有特殊功能的视图供程序员使用;     2) 其中最常用的有CScrollView、CListView、CTre...
  • Lirx_Tech
  • Lirx_Tech
  • 2015年10月11日 16:26
  • 2819

在mfc中将CView类改为CScrollView类,使得出现下拉条

在mfc中将CView类改为CScrollView类,使得出现下拉条
  • Chunfengyanyulove
  • Chunfengyanyulove
  • 2016年03月10日 15:32
  • 495

在对话框中应用CScrollView显示图像

1、用vs2008创建一个基于对话框的工程DialogView;2、添加一个新类CMyDocument,基类为CDocument;3、添加一个新类CMyView,基类为CScrollView;4、修改...
  • fengbingchun
  • fengbingchun
  • 2011年07月18日 17:32
  • 4523

MFC CScrollView 对大视图出现滚动条回滚问题的解决

CScrollView类中,若视图尺寸很大。 如100000*100000;void CLOView::OnInitialUpdate(){ CScrollView::OnInitialUpdate(...
  • xiaji2007
  • xiaji2007
  • 2010年07月18日 12:19
  • 1904

MFC窗口滚动功能 CScrollView类

在利用MFC AppWizard生成工程时,在创建向导的第六步可以吧视类的基类选择为CScrollView。这样,视图窗口就具有滚动功能,当图形在窗口中不能完全显示时,可以通过拖动滚动条来浏览整个窗口...
  • luch192
  • luch192
  • 2014年12月05日 15:28
  • 1270

删除CScrollView中滚动条

在OnSize中增加如下: void CXXXXView::OnSize(UINT nType, int cx, int cy) { CScrollView::OnSize(nType,...
  • cay22
  • cay22
  • 2013年01月10日 09:49
  • 813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CScrollView的使用
举报原因:
原因补充:

(最多只允许输入30个字)