OnVScroll 垂直滚动条的默认最小值在最上面 最大值在最下面,滑块在最上面。如何改成最大值在最上面 最小值在最上面 滑块在在下面。改了半天总是不成功
.........................................
...............................
m_nVMaxPos = (int)(m_nMaxGray-m_nYw*m_fVScal);
m_VScrollCtrl.SetScrollRange(0,m_nVMaxPos); //垂直滚动值范围
m_VScrollCtrl.SetScrollPos(m_nVScroll);
............................
..............
void CUsbCCDDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int iMax,iMin; int nVScroll=m_VScrollCtrl.GetScrollPos();
m_VScrollCtrl.GetScrollRange(&iMin,&iMax); switch(nSBCode)
{
case SB_PAGEUP:
nVScroll=max(iMin,nVScroll-(iMax-iMin)/4);
break;
case SB_PAGEDOWN:
nVScroll=min(iMax,nVScroll+(iMax-iMin)/4);
break;
case SB_LINEDOWN:
nVScroll=max(nVScroll-1,iMin);
break;
case SB_LINEUP:
nVScroll=min(nVScroll+1,iMax);
break;
// case SB_THUMBPOSITION:
case SB_THUMBPOSITION:
nVScroll=nPos;
break;
}
m_VScrollCtrl.SetScrollPos(nVScroll);
.........................
.........................
设置之后能保证 滚动条的上下小箭头能根据我想的那么移动,(点上+1 点下-1) 但是滑块总是反向运动 (点小箭头向上滑块向下轴,点小箭头向下滑块向上走。托动滑块向下数值越来越大,向上越来越小)如何解决啊。谢谢
.........................................
...............................
m_nVMaxPos = (int)(m_nMaxGray-m_nYw*m_fVScal);
m_VScrollCtrl.SetScrollRange(0,m_nVMaxPos); //垂直滚动值范围
m_VScrollCtrl.SetScrollPos(m_nVScroll);
............................
..............
void CUsbCCDDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int iMax,iMin; int nVScroll=m_VScrollCtrl.GetScrollPos();
m_VScrollCtrl.GetScrollRange(&iMin,&iMax); switch(nSBCode)
{
case SB_PAGEUP:
nVScroll=max(iMin,nVScroll-(iMax-iMin)/4);
break;
case SB_PAGEDOWN:
nVScroll=min(iMax,nVScroll+(iMax-iMin)/4);
break;
case SB_LINEDOWN:
nVScroll=max(nVScroll-1,iMin);
break;
case SB_LINEUP:
nVScroll=min(nVScroll+1,iMax);
break;
// case SB_THUMBPOSITION:
case SB_THUMBPOSITION:
nVScroll=nPos;
break;
}
m_VScrollCtrl.SetScrollPos(nVScroll);
.........................
.........................
设置之后能保证 滚动条的上下小箭头能根据我想的那么移动,(点上+1 点下-1) 但是滑块总是反向运动 (点小箭头向上滑块向下轴,点小箭头向下滑块向上走。托动滑块向下数值越来越大,向上越来越小)如何解决啊。谢谢
解决方案 »
- [GDI]为什么画出的字体都变模糊了?
- MFC 基于dialog类的绘图问题
- 找VC高手在第三方框架代码上二次开发类似Visio的程序(需要2人)
- 简单问题 我想把一个类的声明和实现部分分开,把cpp部分做成dll动态库形式,怎么实现 谢谢?
- 回调函数和消息响应函数有什么区别?
- 在Access表中存入声音文件(wav格式),如何调用播放器播放?
- 我{ }这种括号用多了, 找不到哪个和哪个是相对的了.对VC哪个调试工具找到相对的呢??
- "试图执行系统不支持的操作"是怎么引起的?请大家帮忙解决。。。。。
- 问一下程序不能调试,是怎么回事?
- 关于SYSTEMTIME时间的问题.
- Firebug,IE Developer Toolbar 鼠标悬停时选中元素的实现方法?
- 模板类导出DLL没有LIB文件?
下面是我自己写的控件的滚动代码
switch (nSBCode)
{
case SB_LINEDOWN:
if (scrollPos < m_nVScrollMax)
{
int yScroll =ROWHEIGHT*2;
SetScrollPos32(SB_VERT, scrollPos + yScroll);
if (GetScrollPos32(SB_VERT) == scrollPos) break; // didn't work rect.top =SROLLTOP + yScroll;
ScrollWindow(0,-yScroll, rect);
rect.top = rect.top - yScroll;
//this->SetRedraw(FALSE);
InvalidateRect(rect);
//SetRedraw(TRUE);
}
break; case SB_LINEUP:
if (scrollPos > 0)
{
int yScroll =ROWHEIGHT*2;
SetScrollPos32(SB_VERT, max(0,scrollPos - yScroll));
rect.top =SROLLTOP;
ScrollWindow(0, yScroll, rect);
// rect.right = rect.left + xScroll;
InvalidateRect(rect);
}
break; case SB_PAGEDOWN:
if (scrollPos < m_nVScrollMax)
{
rect.top = SROLLTOP;
int offset = rect.Height();
int pos = min(m_nVScrollMax, scrollPos + offset);
//scrollPos=pos;
SetScrollPos32(SB_VERT, pos);
rect.top = SROLLTOP;
InvalidateRect(rect);
}
break; case SB_PAGEUP:
if (scrollPos > 0)
{
rect.top = SROLLTOP;
int offset = -rect.Height();
int pos = max(0, scrollPos + offset);
SetScrollPos32(SB_VERT, pos);
rect.top = SROLLTOP;
InvalidateRect(rect);
}
break; case SB_THUMBPOSITION:
case SB_THUMBTRACK:
{
scrollPos=nPos>0 ? nPos*ROWHEIGHT: GetScrollPos32(SB_VERT, TRUE);
SetScrollPos32(SB_VERT, scrollPos);
rect.top = SROLLTOP;
InvalidateRect(rect);
}
break; case SB_TOP:
if (scrollPos > 0)
{
SetScrollPos32(SB_VERT, 0);
Invalidate();
}
break; case SB_BOTTOM:
if (scrollPos < m_nVScrollMax)
{
SetScrollPos32(SB_VERT, m_nVScrollMax);
Invalidate();
}
break;
default: break;
}
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_POS;
si.nPos = nPos;
return SetScrollInfo(nBar, &si, bRedraw);
}
int CMoldGunterDraw::GetScrollPos32(int nBar, BOOL bGetTrackPos )
{
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
if (bGetTrackPos)
{
if (GetScrollInfo(nBar, &si, SIF_TRACKPOS)) return si.nTrackPos;
}
else
{
if (GetScrollInfo(nBar, &si, SIF_POS)) return si.nPos;
}
return 0;
}