求教:如何让OnDraw对WM_SIZE消息作出不同的响应 绘制的图形太复杂了,在改变窗口大小的时候后会出现不连贯的现象,所以我想干脆在调整窗口大小的时候让OnDraw用单色的矩形代替那些复杂的绘图过程。请问如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想到一个变通的方法,在OnDraw里面设置一个变量bDraw判断是否需要重绘,在OnSize里面将该bDraw = falseOnDraw(..){ if(!m_bDraw) return; //绘图操作}OnSize(..){ m_bDraw = false; KillTimer(m_nTimer); m_nTimer = SetTimer(1,100,0);}OnTimer(UINT nIDEvent) { m_bDraw = true; OnDraw();} 你用过CAD或者PhotoShop之类的软件么?再复杂的图形,也不会因为太复杂而产生“改变窗口大小的时候后会出现不连贯的现象”,只要你正确使用了双缓冲。正确使用双缓冲的意思是:所有绘制的内容只在需要的时候绘制到内存位图中,比如内容修改时;在刷新时只需要将内存位图blt到界面DC中,因为只有这一个动作,再怎么刷新也不会有闪烁、不连贯的现象;在WM_ERASEBKGND中不绘制背景,所有背景都绘制的内存位图中并全部覆盖界面DC。还有刷新时用Invalidate(FALSE)而不是Invalidate(TRUE);等剩下一种情况,就是你频繁改动内容,那么就和窗口大小的改变引起的刷新没有关系了。 除了楼上说的,需要在内存DC中绘制完成后,再BLT到目标DC上,还需要主要的是:在刷新之前,最好通过尺寸的计算,把不需要重新绘制的部分从默认的剪切区去掉。这样才能避免不必要的刷新,比如你左上角不变,只是缩小右下角,如果不要求图像大小变化的话那显然是不需要重新绘制的。 VS2010里MFC的accelerator添加问题 VS2010生成的MFC基于对话框工程 钱能的《c++程序设计教程》(第二版)上的一个小问题 vc写的ocx,在html中用object调用时总是出错,请高手指点一下. 请教如何在控件上显示unicode编码的字符,如CEdit等。。。 如何产生特别随机数的问题 为什么数据库不能执行Update、AddNew等函数 时间比较 网络编程高手请进! 谁能给详细的讲讲什么是原码,反码,补码,它们之间是怎么回事? 关于OnPaint() 一个关于基于TCP传文件的问题
OnDraw(..)
{
if(!m_bDraw)
return;
//绘图操作
}
OnSize(..)
{
m_bDraw = false;
KillTimer(m_nTimer);
m_nTimer = SetTimer(1,100,0);
}OnTimer(UINT nIDEvent)
{
m_bDraw = true;
OnDraw();
}
所有绘制的内容只在需要的时候绘制到内存位图中,比如内容修改时;
在刷新时只需要将内存位图blt到界面DC中,因为只有这一个动作,再怎么刷新也不会有闪烁、不连贯的现象;
在WM_ERASEBKGND中不绘制背景,所有背景都绘制的内存位图中并全部覆盖界面DC。
还有刷新时用Invalidate(FALSE)而不是Invalidate(TRUE);
等剩下一种情况,就是你频繁改动内容,那么就和窗口大小的改变引起的刷新没有关系了。
在刷新之前,最好通过尺寸的计算,把不需要重新绘制的部分从默认的剪切区去掉。
这样才能避免不必要的刷新,比如你左上角不变,只是缩小右下角,如果不要求图像大小变化的话
那显然是不需要重新绘制的。