MFC CScrollView свитки не работают

Я новичок в работе с MFC scrollview, я отображаю большое изображение в функции onPaint моего класса 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 Я могу видеть вертикальную и горизонтальную прокрутку, но нажатие на них ничего не меняет в представлении. Пожалуйста, сообщите мне, как я могу переместить прокрутку на клики пользователей и изменить вид?

1

Решение

CScrollView действует так, как будто вы рисуете на большом холсте, размер которого вы определяете с помощью SetScrollSizes. Заданный вами размер обычно равен размеру всего изображения, скорее всего, больше, чем окно, в котором оно отображается.

Затем, когда вы обрабатываете OnDraw, вы можете либо нарисовать все изображение, как вы это сделали, либо вы можете нарисовать только ту часть, которая показывает, которую вы можете узнать из GetClipBox. Последнее необходимо только для эффективности, так как CScrollView будет обрезать части, которые не видны.

Вам не нужны обработчики OnXScroll вообще. Вы должны удалить их и позволить CScrollView обрабатывать прокрутку, если это все, что вы делаете в ответ на прокрутку.

Будут проблемы, если размеры вашего изображения> = 2 ^ 15, но это не похоже на вашу ситуацию.

1

Другие решения

Ваш код выглядит подозрительно (3-й аргумент). Однако, если это связано с проблемой прокрутки выше 32 КБ, см. Статью базы знаний «PRB: диапазон прокрутки CScrollView, ограниченный 32 КБ» (ID статьи: 166473).

0

По вопросам рекламы [email protected]