程序是别人编的。
初始化后显示第一页,如果此时向下滚动一行,屏幕会滚动两行
如果继续滚动屏幕,屏幕会滚动一行。
如果向上滚动屏幕也是第一次滚动两行,而后面每次滚动一行。
谁知道是怎么回事?
初始化后显示第一页,如果此时向下滚动一行,屏幕会滚动两行
如果继续滚动屏幕,屏幕会滚动一行。
如果向上滚动屏幕也是第一次滚动两行,而后面每次滚动一行。
谁知道是怎么回事?
解决方案 »
- 关于MFC拖拽功能的问题
- xml schema 能实现属性和元素相互约束吗?
- error C2039: 'get_nodeTypedvalue' : is not a member of 'IXMLDOMNode'怎么回事啊
- 想监视打印机的状态,类似于系统自带的'打印机和传真',如果没纸,上面会显示缺纸了,等等,看了N多方法,如使用GetPrinter等等,都不行~
- 很有挑战的问题,VC高手讲进...............
- 有谁能提供关于随机数产生的算法?
- _variant_t((IDispatch*)m_pConnection,true) 这段代码怎么理解?
- 请大侠指教:关于编译错误的提示
- 用OpenGL显示三维汉字
- 请告诉我何种水平才能做软件开发?
- 为什么在打开数据库时有这样的提示?
- socket下怎样用ipx协议实现多播?
鼠标中键?
pagedown,pageup?
方向键?
space?说清楚三
-----------------------------------------------这种说法也很有道理,是一个可以复现的又合理的Bug.
UINT nSBCode,
UINT nPos,
CScrollBar* pScrollBar
)
{
// TODO: Add your message handler code here and/or call default
if(m_IsUseVScroll == FALSE)
goto PrarentVScroll; long nWidth,nHeight;
GetClientArea(&nWidth,&nHeight);
SetUnitType(2);
nWidth = nHeight / this->GetRowHeight(1) - 1;
SetUnitType(0); SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
switch (nSBCode)
{
case SB_BOTTOM:
//ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax));
scrollinfo.nPos = scrollinfo.nMax - scrollinfo.nPage;
ViewTable(scrollinfo.nPos ,scrollinfo.nMax);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_TOP:
//ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin));
scrollinfo.nPos = scrollinfo.nMin;
ViewTable(scrollinfo.nPos,nWidth);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_LINEUP:
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
ViewTable(scrollinfo.nPos,nWidth);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_LINEDOWN:
scrollinfo.nPos += 1;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax - scrollinfo.nPage;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ViewTable(scrollinfo.nPos ,nWidth); //ScrollWindow(0,-1);
break;
case SB_PAGEUP:
scrollinfo.nPos -= scrollinfo.nPage;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
ViewTable(scrollinfo.nPos ,nWidth);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
//ScrollWindow(0,10*5);
break;
case SB_PAGEDOWN:
scrollinfo.nPos += scrollinfo.nPage;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax - scrollinfo.nPage;
break;
}
ViewTable(scrollinfo.nPos ,nWidth);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
//ScrollWindow(0,-1*5);
break;
case SB_ENDSCROLL:
// MessageBox("SB_ENDSCROLL");
break;
case SB_THUMBPOSITION:
// ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
// scrollinfo.nPos = nPos;
// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_THUMBTRACK:
//ScrollWindow(0,(scrollinfo.nPos-nPos)/*10*/);
scrollinfo.nPos = nPos;
ViewTable(scrollinfo.nPos ,nWidth);
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}
PrarentVScroll:
CSpreadSheet::OnVScroll(nSBCode,nPos,pScrollBar);
}
就是这一段代码实现了滚动
{
CString strField;
long row = 1,
RowHeight = GetRowHeight(row);
ClearnAllCell(); m_set.SetAbsolutePosition(nStart); int rows;
while(row < count && !m_set.IsEOF( ) )
{
for(int i =0;i<m_set.GetODBCFieldCount();i++)
{
m_set.GetFieldValue(i,strField);
SetCellContect(i,row,strField);
}
SetRowHeight(row,RowHeight);
m_set.MoveNext();
row++;
rows = GetMaxRows();
if(row > GetMaxRows() && row < count)
{
SetMaxRows(row);
this->SetRowHeight(row,RowHeight);
}
}
return TRUE;
}
这段实现了显示页面的工作