我利用发消息的方式模拟滚动
SendMessage(WM_HSCROLL,MAKEWPARAM(SB_LINEUP, 0),NULL)
这样每次实际上只用重画滚动更新的那部分图就可以了我的图是在将数据直接变成DDB位图格式显示的问题是,如果有其它的视窗遮挡住滚动图形的视窗
就要重画被遮挡住的那部分区域嘛,那我的重画就跟不上滚动速度了
以致于用GetClipBox得到重画区域显示错误的图象,
或者根本不重画,就空白的有没有什么办法呀,谢谢提供
SendMessage(WM_HSCROLL,MAKEWPARAM(SB_LINEUP, 0),NULL)
这样每次实际上只用重画滚动更新的那部分图就可以了我的图是在将数据直接变成DDB位图格式显示的问题是,如果有其它的视窗遮挡住滚动图形的视窗
就要重画被遮挡住的那部分区域嘛,那我的重画就跟不上滚动速度了
以致于用GetClipBox得到重画区域显示错误的图象,
或者根本不重画,就空白的有没有什么办法呀,谢谢提供
因为如果整屏重画的显示图形,由数据转成DDB位图再显示到屏幕上,好费时,
即时我用双缓存还是会有明显的闪烁
所以我想像上述做就只用重画更新的滚动出来的很小的区域,就不会有闪烁
void C**View::OnDraw(CDC* pDC)
{ CRect rect;
pDC->GetClipBox (&rect); int nStartDDB = rect.left;
int nEndDDB = rect.right;
…… for(int i=nStartDDB; i<nEndDDB; i++)
{
iter==指针指向相应的数据;
DrawDDB(pDC,i,……);//将数据形成DDB位图显示出来
}
……
}而且我把每次SB_LINEUP的消息响应设为滚动一行,
这样我形成DDB的时候,就DrawDDB()时,实际是画一个宽为1,长m的位图
因为DDB是是从上到下,从左向右画的嘛,
那我顺序读数据就可以直接显示成图嘛,不用重新排列我的数据所以要是有遮挡,我重画的就不只一个宽1长m的位图了,
而且还牵涉到指针往回移动找正确的数据位好累呀,我自己都讲糊涂了