内存DC在绘制之前必须先选入一个位图。位图用CreateCompatibleBitmap产生。
解决方案 »
- 有个程服务程序用vs2008(vc)做的,现在想给它加个热键相应功能 在服务的哪里写代码?
- vc++ 在列表视图控件中插入Gif格式动画?
- 关于FormView 多视问题?如何实现?
- 得到窗口的消息并对他进行处理
- 有关CppUnit进行的软件测试!高手请进!
- 鼠标拖动在浏览器中选择的文字到word中,word能以原格式显示,如何实现?
- asp和vc结合用,vc用来做什么?有具体点关于asp编写时调用vc程序的过程
- =====高手来帮忙阿=====看看这个函数应该怎么写~~~
- 大家谁用过制作安装程序的wise?
- FTP客户端如何穿越代理服务器(换言之,代理服务器如何支持FTP协议)?(分数多得用不完,慢慢加)
- 是高手的请进,关于截图的问题。
- 为什么我写的文件中有乱码?
CDC *pDC = GetDC();
CDC memDC;
CBitmap memBmp, *pOldBmp;
CRect rc;
GetClientRect(rc);
memDC.CreateCompatibleDC(pDC);
memBmp.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
pOldBmp = memDC.SelectObject(&memBmp);
memDC.FillSolidRect(rc, RGB(0, 128, 0)); //绘制前先清理
....//在memDC上作图
pDC.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBmp);
memBmp.DeleteObject();
memDC.DeleteDC;
ReleaseDC(pDC);
如果你的View不经常变动的话,更好的办法是:
1。将memDC与memBitmap做成全局变量或成员变量;
2。在View初始化时(比如,OnInitUpdate),用CreateCompatibleXXX初始化memDC与memBitmap,并将后者选入前者;
3。在OnDraw中加入一句话,就是上面的BitBlt(当然,GetClientRect也必须有);
4。作图时,直接在memDC上绘制(绘制前可能需要用FillRect清理),然后GetDC,取到屏幕DC,然后调用OnDraw复制到屏幕上(当然也可以用BitBlt),最后ReleaseDC;
5。View销毁时,用DeleteDC与DeleteObject销毁memDC与memBitmap。
这样,额外增加了OnDraw处理的功能,使程序的绘制不会在重绘时丢失;而且不必每次OnTimer时都取得memDC、memBitmap,减少了系统开销。