首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

内存dc绘图的有关问题:屏幕不能及时刷新。请

2012-05-09 
内存dc绘图的问题:屏幕不能及时刷新。请高手指点在派生于CScrollView 的视图里面,用内存dc的方式画图。我想

内存dc绘图的问题:屏幕不能及时刷新。请高手指点
在派生于CScrollView 的视图里面,用内存dc的方式画图。我想在当前view上画一条直线,滚动条滚动的时候,直线的位置保持不变。

以下是代码,拷贝到OnDraw可以直接运行出效果(在新建vc工程的时候从CScrollView派生)。
CDC m_MemDC;
CBitmap m_MemBitmap;
m_MemDC.CreateCompatibleDC(NULL);
CRect rect;
GetClientRect(&rect);
int iwidth=rect.right-rect.left;//当前视图窗口的大小
int iheight=rect.bottom-rect.top;
CSize sizeTotal;//设置滚动条的范围大小
sizeTotal.cx = 3000;
sizeTotal.cy = 3000;
SetScrollSizes(MM_TEXT, sizeTotal);
int m_icurhorz=GetScrollPos(SB_HORZ);//当前水平滚动条滑块的位置
int m_icurvert=GetScrollPos(SB_VERT);//当前垂直滚动条滑块的位置,在这里使用 pDC->BitBlt(m_icurhorz,m_icurvert,..,..)
CClientDC dc(this);
if(m_MemBitmap.m_hObject)
m_MemBitmap.DeleteObject();
m_MemBitmap.CreateCompatibleBitmap(&dc,iwidth,iheight);//创建一个屏幕这么大的位图
m_MemDC.SelectObject(&m_MemBitmap); //选入内存DC
m_MemDC.FillSolidRect(0,0,iwidth,iheight,RGB(0,0,255));//给赋值颜色为green

m_MemDC.MoveTo(0,0);//绘制一条对角线
m_MemDC.LineTo(iwidth,iheight);

pDC->BitBlt(m_icurhorz,m_icurvert,iwidth,iheight,&m_MemDC,0,0,SRCCOPY );//把内存dc拷贝到屏幕dc,我想现在实现效果是:上下滚动,视图显示的内容不变
m_MemBitmap.DeleteObject();



[解决办法]
你的问题是什么?
现在直线位置变了?
那就根据滚动条的消息调整一下绘制坐标
[解决办法]
放到ON_paint里面试试?你可以自己刷新嘛
[解决办法]
图片看不了。。。有需要的话发我邮箱好了:156019000@qq.com 有时间帮你调下,滚动条我接触的并不多

热点排行