派生static类添加滚动条,却无法拖动?

sunxuan526 2008-10-10 03:56:16
在对话框上添加一个static控件,派生CScrollStatic类,该类内添加一个初始化函数,添加了一横一纵两个Scrollbar为成员变量,继承了对WM_VSCROLL和WM_HSCROLL的响应函数但未做处理,在OnPaint函数中判断Scrollbar位置并显示位图。
在对话框类中添加派生类的变量,并使之显示指定的位图。

当前问题为,初始时位图显示正常,但是不管怎么拖动滚动条,位图显示并未发生变化,仿佛读回来的ScrollPos始终为0.而且只要一松鼠标左键,滚动条就回到了初始位置,百思不得其解,望明白人指点!~~~
...全文
332 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunxuan526 2008-10-13
  • 打赏
  • 举报
回复
发现问题了,很低级,SetScrollRange的时候图像宽高没设置,相当于没有初始化,太低级了!
感谢LS各位的提醒,散分
sunxuan526 2008-10-13
  • 打赏
  • 举报
回复
恩,我也知道CScrollview更容易些,原来用过
不过这次是要求派生出一个static的类出来,只好研究一下啦。

还有SetScrollRange我也调过了啊,还是不对呢。。。。
VsirSoft 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cnzdgs 的回复:]
你该不会是没SetScrollRange吧?
[/Quote]

估计是没 首先要给定一个范围 用断点调试pos的值
cnzdgs 2008-10-10
  • 打赏
  • 举报
回复
你该不会是没SetScrollRange吧?
zgl7903 2008-10-10
  • 打赏
  • 举报
回复
虽然加了滚动条,但是显示区域的映射关系、坐标原点等都没有变化 自然不会有什么变化
从CScrollView派生可能会更容易些
sunxuan526 2008-10-10
  • 打赏
  • 举报
回复
跟这个好像没关系吧?
我把你这部分代码加上了,还是老样子~~~很奇怪
cnzdgs 2008-10-10
  • 打赏
  • 举报
回复
要判断nSBCode的值来分别处理。MSDN中的例子:
void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
// Get the minimum and maximum scroll-bar positions.
int minpos;
int maxpos;
pScrollBar->GetScrollRange(&minpos, &maxpos);
maxpos = pScrollBar->GetScrollLimit();

// Get the current position of scroll box.
int curpos = pScrollBar->GetScrollPos();

// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
curpos = minpos;
break;

case SB_RIGHT: // Scroll to far right.
curpos = maxpos;
break;

case SB_ENDSCROLL: // End scroll.
break;

case SB_LINELEFT: // Scroll left.
if (curpos > minpos)
curpos--;
break;

case SB_LINERIGHT: // Scroll right.
if (curpos < maxpos)
curpos++;
break;

case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);

if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
}
break;

case SB_PAGERIGHT: // Scroll one page right.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);

if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
}
break;

case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
curpos = nPos; // of the scroll box at the end of the drag operation.
break;

case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
curpos = nPos; // position that the scroll box has been dragged to.
break;
}

// Set the new position of the thumb (scroll box).
pScrollBar->SetScrollPos(curpos);

CView::OnHScroll(nSBCode, nPos, pScrollBar);
}
sunxuan526 2008-10-10
  • 打赏
  • 举报
回复
在OnVScroll中GetScrollPos,得到始终为0,若直接将参数SetScrollPos,不成功,GetLastError错误值为5,拒绝访问。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧