为什么CDialog的滚动条不能象ListView等视图的滚动条一样随着RANGE的变化滚动条的大小发生相应变化??我应该怎么做啊? 为什么CDialog的滚动条不能象ListView等视图的滚动条一样随着RANGE的变化滚动条的大小发生相应变化??我应该怎么做啊?谢谢大家! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在OnSize 里边自己写代码处理! 变通的方法是 从 CScrollDialog继承,就会有同样的效果 在对话框的OnInitDialog()中加入:SetScrollRange(SB_HORZ, 0, nMax, TRUE);响应WM_HSCROLL消息,在其中加入:CYourDlg::OnHScroll(...){ SCROLLINFO scrollInfo; GetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); switch (nSBCode) { case SB_LINELEFT: scrollInfo.nPos -= 1; if (scrollInfo.nPos < scrollInfo.nMin) { scrollInfo.nPos = scrollInfo.nMin; break; } SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); ScrollWindow(10, 0); break; case SB_LINERIGHT: scrollInfo.nPos += 1; if (scrollInfo.nPos > scrollInfo.nMax) { scrollInfo.nPos = scrollInfo.nMax; break; } SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); ScrollWindow(-10, 0); break; case SB_LEFT: ScrollWindow((scrollInfo.nPos - scrollInfo.nMin) * 10, 0); scrollInfo.nPos = scrollInfo.nMin; SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); break; case SB_RIGHT: ScrollWindow(-(scrollInfo.nMax - scrollInfo.nPos) * 10, 0); scrollInfo.nPos = scrollInfo.nMax; SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); break; case SB_PAGELEFT: scrollInfo.nPos -= 5; if (scrollInfo.nPos < scrollInfo.nMin) { scrollInfo.nPos = scrollInfo.nMin; break; } SetScrollInfo(SB_HORZ,&scrollInfo,SIF_ALL); ScrollWindow(10 * 5, 0); break; case SB_PAGERIGHT: scrollInfo.nPos += 5; if (scrollInfo.nPos > scrollInfo.nMax) { scrollInfo.nPos = scrollInfo.nMax; break; } SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); ScrollWindow(-10 * 5, 0); break; case SB_ENDSCROLL: break; case SB_THUMBPOSITION: break; case SB_THUMBTRACK: ScrollWindow((scrollInfo.nPos - nPos)*10, 0); scrollInfo.nPos = nPos; SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL); break; } } 网络结构,求解决方案? 如何设置静态控件的背景和文字的颜色大小等 windows下如何检测某个设备的驱动安装与否 不能将参数1从"char*"转换为"CFile *"怎么办?!@_@ 怎样使鼠标移到pop menu的item上时,在status bar上显示解释语句? 高手指教:如何用vc画出一幅给定的毛笔字画 怎么向combobox里面添加内容? 高分求 ListBox的小例程 关于cwnd的问题 关于CSerialPort类大容量接收数据和下发数据时异常 对话框模板加滚动条的问题 怎么给属性页加上滚动条?
SetScrollRange(SB_HORZ, 0, nMax, TRUE);
响应WM_HSCROLL消息,在其中加入:
CYourDlg::OnHScroll(...)
{
SCROLLINFO scrollInfo;
GetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
switch (nSBCode)
{
case SB_LINELEFT:
scrollInfo.nPos -= 1;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(10, 0);
break;
case SB_LINERIGHT:
scrollInfo.nPos += 1;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(-10, 0);
break;
case SB_LEFT:
ScrollWindow((scrollInfo.nPos - scrollInfo.nMin) * 10, 0);
scrollInfo.nPos = scrollInfo.nMin;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
case SB_RIGHT:
ScrollWindow(-(scrollInfo.nMax - scrollInfo.nPos) * 10, 0);
scrollInfo.nPos = scrollInfo.nMax;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
case SB_PAGELEFT:
scrollInfo.nPos -= 5;
if (scrollInfo.nPos < scrollInfo.nMin)
{
scrollInfo.nPos = scrollInfo.nMin;
break;
}
SetScrollInfo(SB_HORZ,&scrollInfo,SIF_ALL);
ScrollWindow(10 * 5, 0);
break;
case SB_PAGERIGHT:
scrollInfo.nPos += 5;
if (scrollInfo.nPos > scrollInfo.nMax)
{
scrollInfo.nPos = scrollInfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
ScrollWindow(-10 * 5, 0);
break;
case SB_ENDSCROLL:
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
ScrollWindow((scrollInfo.nPos - nPos)*10, 0);
scrollInfo.nPos = nPos;
SetScrollInfo(SB_HORZ, &scrollInfo, SIF_ALL);
break;
}
}