没有找到问题所在的问题,关于绘图

gtsfreer 2009-09-07 11:07:53
最近将rdesktop中关于远程桌面显示的代码翻译到windows下,在我自己的电脑上可以正常运行,图像都正确,在同事的电脑上就有部分的图像显示异常,两台电脑的配置相当,应该可以排除硬件的影响,编译采用的静态编译方式,排除缺少dll的情况了,用boundschecker检查后有一些内存泄漏,但我认为应该不影响使用,GDI对象也没持续增加,问题应该也不再这儿。
于是我没辙了,向大家求救,程序流程仿照rdesktop 在进行绘图的时候的代码基本如下
	CBitmap  mybitmap;					
mybitmap.CreateBitmap(width , height, 1, 32 , tdata);
CDC dcMemory,dc;
HDC hdc;
hdc = ::GetDC(g_hWnd);
dc.Attach(hdc);
dcMemory.CreateCompatibleDC(&dc);
CBitmap *bitold = dcMemory.SelectObject(&mybitmap);
g_cdc.BitBlt(x , y , cx , cy , &dcMemory , 0 , 0 , SRCCOPY);
dcMemory.SelectObject(bitold);
dcMemory.DeleteDC();
mybitmap.DeleteObject();
dc.Detach();
dc.DeleteDC();
ReleaseDC(g_hWnd,hdc);
RECT rect;
SetRect(&rect,x,y,x+width,y+height);
InvalidateRect(g_hWnd,&rect,FALSE);
...全文
226 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lambochan 2009-09-07
  • 打赏
  • 举报
回复
两台机器的系统色深一样吗?
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
...... 楼上讲的很有道理......
不过同事也在工作,我们PC搭建的环境不同,他无法到我PC上工作啊 ?
他是XP的系统,远程访问的话就不用想了
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
求解决方案啊? 大家遇到类似问题一般怎么样来定位BUG?
dirdirdir3 2009-09-07
  • 打赏
  • 举报
回复
在你同事的机上调试.......
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
这个不是在onpaint中实现的,这个是在一个线程中,调用InvalidateRect(g_hWnd,&rect,FALSE);是为了刷新,g_cdc也是个内存DC,在onpaint 中将g_cdc中的内容复制到设备上去
youyifang 2009-09-07
  • 打赏
  • 举报
回复
看不出什么问题,这个是你onpaint里面的实现代码?
是的话,不能调用InvalidateRect(g_hWnd,&rect,FALSE);函数.
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
大家谁有好的建议或者测试方法哈?
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
找到问题的地方了,因为大量调用绘图,每个之后都有 InvalidateRect(g_hWnd,&rect,FALSE);
来进行刷新,似乎当每秒的刷新数量比较高的时候就处理不好了,原因暂时不明,解决方案我是这么做的
我取消所有的刷新语句,然后设置一个定时器进行刷新,图象OK
gtsfreer 2009-09-07
  • 打赏
  • 举报
回复
都是32位的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧