我要打开一张图片,然后图片的各个像素用网格格点显示:
我自定义了一个类去描述网格格点(格点的左上角坐标,宽度以及颜色),这个类中的Draw函数去画这个格点,然后我用一个列表容器去储存指向这个类的对象的指针,然后按钮消息(打开)中,用这个类实现这些消息的功能,每画一个格点我就用一个函数AddGrid把这个类的对象储存到列表容器中,然后在视图的OnDraw中取出这些对象,然后用这些对象的Draw函数实现图片网格格点的显示。
遇到的问题:
假如我的视图的高是300,当我的格点区域的高是400,那么一打开图片,视图区域显示的就是图片上部分的(300),当我滚动条滚动到下面去看剩下的100的时候,视图区域显示了下面的100以及200的背景,当我把滚动条滚到原始位置时,视图区域显示的是最上面的100以及200的背景,就好像滚动条在下面的时候显示的图片是下面的300,滚到上面的时候就显示了最上面的100,原本显示的被擦掉了,和从上面滚到下面情况一样。
疑问:
要怎么解决这个问题?是哪里出了问题,是因为没重写滚动条事件,还是其他?
我自定义了一个类去描述网格格点(格点的左上角坐标,宽度以及颜色),这个类中的Draw函数去画这个格点,然后我用一个列表容器去储存指向这个类的对象的指针,然后按钮消息(打开)中,用这个类实现这些消息的功能,每画一个格点我就用一个函数AddGrid把这个类的对象储存到列表容器中,然后在视图的OnDraw中取出这些对象,然后用这些对象的Draw函数实现图片网格格点的显示。
遇到的问题:
假如我的视图的高是300,当我的格点区域的高是400,那么一打开图片,视图区域显示的就是图片上部分的(300),当我滚动条滚动到下面去看剩下的100的时候,视图区域显示了下面的100以及200的背景,当我把滚动条滚到原始位置时,视图区域显示的是最上面的100以及200的背景,就好像滚动条在下面的时候显示的图片是下面的300,滚到上面的时候就显示了最上面的100,原本显示的被擦掉了,和从上面滚到下面情况一样。
疑问:
要怎么解决这个问题?是哪里出了问题,是因为没重写滚动条事件,还是其他?
for(int i=0;i<50;i++)
for(int j=0;j<60;j++)
{
xxx.color=rgb();
xxx.point.x=i*网格宽度;
xxx.point.y=j*网格宽度;
xxx.Draw(pDC);
}
这样有什么问题吗?
CPoint pt1 = GetScrollPosition( );
for(int i=0;i<50;i++)
for(int j=0;j<60;j++)
{
xxx.color=rgb();
xxx.point.x=i*网格宽度;
xxx.point.y=j*网格宽度;
xxx.point += pt1;
xxx.Draw(pDC);
}
建议用内存DC,最后,只要贴图即可!包括网格,都是在内存中画即可!
你滚动的时候,刚开始还能正常显示,后面就不行了,是不是这样?
xxx.Draw(&memDC);再pDC->Bitblt()在这里,这个要选入的位图的长宽不好确定啊,因为在OnDraw里你还不知道你要展示的区域是哪一块!
ondraw所做的事,就是贴出来!根据具体的情况,从内存DC里面贴对应的位置即可!
这个nWidth,nHeight要怎么去得到,比如我容器中存的是CBitmap的对象的指针pBitmap,
我用pBitmap->Attach去关联了BITMAP BMP,再用BMP.bmWidth,BMP.bmHeight去得到这2个值确是失败了