我从CtrlView派生了一个CXTabView,功能类似Property Sheet的那种,一个View里面有好几个页面。但该视图没有滚动条,我在Create()里面添加了Style |= WS_VSCROLL|WS_HSCROLL. 运行后出现了滚动条,但是滚动条压根就滚动不了,在此View里面无法收到滚动消息, 添加了WM_VSCROLL和WM_HSCROLL的消息处理函数也就无法运行,怎么回事啊?
解决方案 »
- fscanf函数问题
- 关于CMemFile的detach问题
- 现在换工作还好换吗??????????
- Richedit里面怎么显示gif格式的图片,答对给500分
- 如何用CDatabase打开Sql server和oracle数据库?100分送上
- 我要做c++手机开发,请问那里有下载VC++ SP3补丁的?谢谢
- 请教高手,这样的功能能否实现--------在别人的程序上嵌入一个自己的功能?比如说在ie的address栏下面嵌入一个响应alt+w的快捷键。
- 动态加入菜单后不显示
- rle解压缩代码问题
- iswalnum、iswupper中的w是什么意思
- socket长连接(java)
- 请问:程序运行时如下提示什么意思?我按忽略后可以正常执行.
好象要添不少东西.建议ScrollView派生,要添加控件的话,再上面嵌个子窗口好了!
在Tab上放滚动条也可以
这个CXTabView是从CCtrlView派生的呀,它的基类就是CView,不是CFormView啊,和楼上 风之羽翼 说的这个很相似 。
我已经在这个基础上写了很多代码了,暂时不会考虑重新用ScrollView来做了。就是希望我加上滚动条以后,能拖动那个滚动条就行,我再自己处理WM_VSCROLL和WM_HSCROLL消息滚动界面就OK了,问题就是加上了滚动条后它压根就拖不了滚动条。
同样的做法用CView,就可以拖动滚动条(但是窗口也是不能滚动),会收到WM_VSCROLL和WM_HSCROLL消息,我就是希望能够达到这种效果就行了。
高手指点指点阿!
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来移动自绘部分。
SetScrollSizes( MM_TEXT, CSize(2000,2000) );
滚动条应该可以滚动了
CSize的具体大小可以根据你程序的需求动态调整