鸡啄米
VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)›评论
-
17. Spartacus:
还有我滑动ScrollBar是为了获取一个变化扼值,比如我调整 二值化 处理图像,那么需要在每个
case 下面都加上函数?有什么好的办法吗?
2014/9/10 17:09
-
16. Spartacus:
楼主你好,如果是两个ScrollBar怎么做?为什么我点击下面的一个变得却是上面的,这是什么原因?Spartacus 于 2014-9-10 15:51:14 回复还有为什么只能点击让它变化,不能拖动,如何能拖动它呢?2014/9/10 15:50
-
15. captainq:
第二段代码的倒数第四行
default:
SetDlgItemText(IDC_HSCROLL_EDIT, pos);
return;
为什么我编译会报错啊,error C2664: 'CWnd::SetDlgItemTextW' : cannot convert parameter 2 from 'int' to 'LPCTSTR'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast。求解2014/8/26 20:28
-
14. 滚动条窗口不动:
对话框做好之后添加的“标准滚动条”,
初始化
SCROLLINFO vinfo;
vinfo.cbSize = sizeof (SCROLLINFO) ;
vinfo.fMask = SIF_RANGE | SIF_PAGE ;
vinfo.nMin = 0 ;
vinfo.nMax = 150 ;
vinfo.nPage = 10 ;
SetScrollInfo(SB_VERT,&vinfo);
事件消息
void DEN3CALIBRATION::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
滚动条窗口不动 于 2014-8-16 9:03:24 回复switch (nSBCode)
{
case SB_BOTTOM: //滑块滚动到最底部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10);
scrollinfo.nPos = scrollinfo.nMax;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_TOP: //滑块滚动到最顶部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);
scrollinfo.nPos = scrollinfo.nMin;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
滚动条窗口不动 于 2014-8-16 9:04:59 回复case SB_LINEUP: //单击上箭头
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,10);
break;
case SB_LINEDOWN: //单击下箭头
scrollinfo.nPos += 1;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-10);
break;
case SB_PAGEUP: //单击滑块上方空白区域
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
滚动条窗口不动 于 2014-8-16 9:05:38 回复ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
滚动条可以滚动,但是,窗口不动?能帮忙看看啥原因吗?谢谢2014/8/16 09:02
-
13. 阴阳:
鸡啄米你好,一直看您的教程,感觉您讲的简洁易懂,非常适合初学者学习,大部分这方面的书或者教程都有个问题,不考虑读者的感受,或者说是没有以由浅入深的方式教给读者知识,您的教程让我觉得非常的好,谢谢啦
这一节我发现了一个问题:重载的OnHScroll函数中,我们所添加部分代码,也就是OnHScroll函数的第8行到第31行,程序执行过程中都没有执行到,也就是说,程序开始执行时,左右拖动滚动块,不论怎么拖动,我所说的这一段代码都没有执行到。貌似每次拖动滚动快,switch语句都会执行到这一行:
// 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值
case SB_THUMBPOSITION:
pos = nPos;
break;
而且,对于这两个分支:case SB_THUMBPOSITION:
pos = nPos;
break;
// 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值
default:
SetDlgItemInt(IDC_HSCROLL_EDIT, pos);
return;
貌似执行完一个分支之后程序继续执行另一个分支,不是说的switch中执行完一个分支之后,break会跳出switch语句吗?跳出来的话就应该执行switch语句之后的下一句,而不是执行这两个分支中的另一个,希望您有空的话解答一下我的疑惑,谢谢 2014/8/16 01:45
发表评论