从CCtrlView派生的View, 加入的滚动条无法滚动,请高人指点啊

lineuser 2007-04-05 11:21:18
我从CtrlView派生了一个CXTabView,功能类似Property Sheet的那种,一个View里面有好几个页面。但该视图没有滚动条,我在Create()里面添加了Style |= WS_VSCROLL|WS_HSCROLL. 运行后出现了滚动条,但是滚动条压根就滚动不了,在此View里面无法收到滚动消息, 添加了WM_VSCROLL和WM_HSCROLL的消息处理函数也就无法运行,怎么回事啊?
...全文
526 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lineuser 2007-07-21
  • 打赏
  • 举报
回复
根本就没解决这个问题
Hankuu 2007-04-17
  • 打赏
  • 举报
回复
你在CXTabView::OnInitialUpdate()之中加入
SetScrollSizes( MM_TEXT, CSize(2000,2000) );
滚动条应该可以滚动了
CSize的具体大小可以根据你程序的需求动态调整
super_strong 2007-04-16
  • 打赏
  • 举报
回复
应该不会这样吧,没见过
lineuser 2007-04-15
  • 打赏
  • 举报
回复
问题是滚动条已经有了,就是滚动条拖动不了啊。。
Hankuu 2007-04-13
  • 打赏
  • 举报
回复
你要根据内容设置view的scrollrange,不然窗口默认是未超过显示范围,因此没有滚动条出现,你可以通过SetScrollRange来设置窗口的滚范围
Tolirry 2007-04-13
  • 打赏
  • 举报
回复
假设滚动条的范围都是0到100;
void CXTabView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int nPrevPos = GetScrollPos(SB_HORZ);
switch(nSBCode)
{
case SB_LEFT: // Scroll to far left.
nPrevPos = 0;
break;
case SB_ENDSCROLL: // End scroll.
break;
case SB_LINELEFT: // Scroll left.
nPrevPos -= 1;
break;
case SB_LINERIGHT: // Scroll right.
nPrevPos += 1;
break;
case SB_PAGELEFT: // Scroll one page left.
nPrevPos -= 10;
break;
case SB_PAGERIGHT: // Scroll one page right.
nPrevPos += 10;
break;
case SB_RIGHT: // Scroll to far right.
nPrevPos = 100;
break;
case SB_THUMBPOSITION: // Scroll to absolute position. The current position is specified by the nPos parameter.
nPrevPos = nPos;
break;
case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is specified by the nPos parameter.
nPrevPos = nPos;
break;
default :
break;
}

SetScrollPos(SB_HORZ, nPrevPos);
CCtrlView::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CXTabView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int nPrevPos = GetScrollPos(SB_VERT);
switch(nSBCode)
{
case SB_BOTTOM: // Scroll to bottom.
nPrevPos = 100;
break;
case SB_ENDSCROLL: // End scroll.
break;
case SB_LINEDOWN: // Scroll one line down.
nPrevPos += 1;
break;
case SB_LINEUP: // Scroll one line up.
nPrevPos -= 1;
break;
case SB_PAGEDOWN: // Scroll one page down.
nPrevPos += 10;
break;
case SB_PAGEUP: // Scroll one page up.
nPrevPos -= 10;
break;
case SB_THUMBPOSITION: // Scroll to the absolute position. The current position is provided in nPos.
nPrevPos = nPos;
break;
case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is provided in nPos.
nPrevPos = nPos;
break;
case SB_TOP: // Scroll to top.
nPrevPos = 0;
break;
default:
break;
}

SetScrollPos(SB_VERT, nPrevPos);
CCtrlView::OnVScroll(nSBCode, nPos, pScrollBar);
}
可以调节数字改变滚动条滚动的速度!
然后,根据滚动条的位置,来调节窗体的滚动效果,可以用MoveWindow来移动子窗体,或者,OnPaint来移动自绘部分。
CathySun118 2007-04-12
  • 打赏
  • 举报
回复
不知道,帮顶
lineuser 2007-04-12
  • 打赏
  • 举报
回复
解决一下这个问题啊,各位大虾
还是很有难度的
lineuser 2007-04-08
  • 打赏
  • 举报
回复
TO: 风之羽翼
我用的这个和你这个很相似,你的应该也不能滚动吧。怎样才能加上滚动条阿??一定要帮帮忙阿
lineuser 2007-04-08
  • 打赏
  • 举报
回复
谢谢各位阿,继续关注阿!
  这个CXTabView是从CCtrlView派生的呀,它的基类就是CView,不是CFormView啊,和楼上 风之羽翼 说的这个很相似 。
我已经在这个基础上写了很多代码了,暂时不会考虑重新用ScrollView来做了。就是希望我加上滚动条以后,能拖动那个滚动条就行,我再自己处理WM_VSCROLL和WM_HSCROLL消息滚动界面就OK了,问题就是加上了滚动条后它压根就拖不了滚动条。
同样的做法用CView,就可以拖动滚动条(但是窗口也是不能滚动),会收到WM_VSCROLL和WM_HSCROLL消息,我就是希望能够达到这种效果就行了。
高手指点指点阿!
mynamelj 2007-04-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/mynamelj/archive/2006/10/09/1327652.aspx
蒋晟 2007-04-06
  • 打赏
  • 举报
回复
CFormView上面放Tab不行么
在Tab上放滚动条也可以
huofen2005 2007-04-06
  • 打赏
  • 举报
回复
这个似乎还挺麻烦的!
好象要添不少东西.

建议ScrollView派生,要添加控件的话,再上面嵌个子窗口好了!

15,979

社区成员

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

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