MFC CSCrollview卷轴无法正常工作

MFC CScrollView scrolls not working

本文关键字:常工作 工作 CSCrollview MFC      更新时间:2023-10-16

我是与MFC scrollview合作的新手,我在scrollview类的功能上显示大图。这是遵循代码的初始更新功能

void CCenterImageView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();
    // TODO: Add your specialized code here and/or call the base class
    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = m_matImage.cols;
    sizeTotal.cy = m_matImage.rows;
    SetScrollSizes(MM_TEXT, sizeTotal,sizeTotal);
}
void CCenterImageView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
    CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
    //Invalidate();
}
void CCenterImageView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
    CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
    UpdateData();
    //Invalidate();
}
void CCenterImageView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: Add your message handler code here
    // Do not call CView::OnPaint() for painting messages
    if(m_CVvImageObj.GetImage())
    {       
        //this function blit the bitmap on the screen height and width are more than 1000 pixels
        m_CVvImageObj.Show(dc.GetSafeHdc(),0,0,m_CVvImageObj.Width(),m_CVvImageObj.Height());
    }

}

通过使用此http://www.functionx.com/visualc/views/scrollview.htm,我可以看到垂直和水平滚动,但按下它们不会在视图上更改任何内容。请指导我如何在用户点击上移动滚动并更改视图?

cscrollview的作用,好像您是在大型画布上绘画的那样,您使用setScrollsizes确定其尺寸。您设置的大小通常是整个图像的大小,最有可能大于显示的窗口。

然后,当您处理OnDraw时,您可以像完成的那样绘制整个图像,也可以仅绘制所显示的零件,您可以从GetClipbox中查找。后者仅对于效率是必要的,因为CSCrollview会夹住不可见的零件。

您根本不需要ONXSCroll处理程序。您应该将它们删除,然后让cscrollview处理滚动,如果您为滚动而做的一切。

如果您的图像尺寸为> = 2^15,则会有问题,但这听起来不像您的情况。

您的代码看起来可疑(第三个参数)。但是,如果它与在32k上方滚动的问题有关,请参见知识库文章" PRB:CSCROLLVIEW滚动范围限制为32K"(文章ID:166473)。