关于OnDraw的小问题(不过分值可不少)

liefen 2000-07-04 09:24:00
有如下程序:
CMyView::OnLButton()
{ ......
InvalidateRect(&myRect1,TRUE);
.......
InvalidateRect(&myRect2,TRUE);
}

CMyView::OnDraw()
{
这里如何编程,使得两次调用时根据无效区的不同而采取不同的
画图方式。
}

请问对于无效区之外的画图,OnDraw()是怎么处理的?

...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
octaprodiqy 2000-07-05
  • 打赏
  • 举报
回复
1.这个思路不太好,实现叫困难。建议用davis_dai的方法,但是否使用“m_bDrawRec1=m_bDrawRec2=FALSE; //恢复原始值”可根据你的需要而定。
2.ondraw()只处理无效区以内的重画,具体细节可参看MFC源码。
茂奇软件 2000-07-05
  • 打赏
  • 举报
回复
windows will do it.
you have no need to find out which rect should be
redraw by yourself.
you just need write a completely redraw code.
jansen zhu
liefen 2000-07-05
  • 打赏
  • 举报
回复
感谢dzl,Davis_dai;正如dai兄所言:
CMyView::OnDraw()
{
if(m_bDrawRec1)
DoDrawRect();
if(m_bDrawRec2)
DoDrawRec2()
m_bDrawRec1=m_bDrawRec2=FALSE; //恢复原始值
}

结果正确,可是最小化窗口,然后最大化后,画面就多了几根大斜线,请问这是怎么回事?

dzl 2000-07-05
  • 打赏
  • 举报
回复

在CMyView::OnDraw()中什么也不用做,只管把该显示的东西全部画出来就行了。
因为当使用InvalidateRect或InvalidateRgn指定了无效区时,OnDraw会自动更新无效区的内容,而在无效区外的内容OnDraw不会把它们更新。
如果你在OnDraw中加入判断无效区,然后有选择地显示内容,这样做会使显示不正常,因为当系统需要刷新CMyView时(用户更改了窗口尺寸、窗体被别的窗体遮盖后恢复时),自动调用OnDraw函数,而这时OnDraw却有选择地显示出部分内容,其它内容就不见了。
其实这是个很简单的问题,写段简单的代码做个试验就可以了。
liefen 2000-07-05
  • 打赏
  • 举报
回复
这样的方法可能行,有没有更直接的办法呢?比方说GetClipBox()有没有用呢?

而且,请问对于无效区之外的画图,OnDraw()是怎么处理的?

Davis_Dai 2000-07-05
  • 打赏
  • 举报
回复
分别针对两个矩形区使用两个BOOL变量,并将初始值设置成FALSE,以后根据需要将其中一个设置成TRUE,根据这两个变量的值来控制重画。
如下所示:
//m_bDrawRec1,m_bDrawRec2为两个BOOL型成员变量,初始值为FALSE(可在OnInitialUpdate()中设定)
CMyView::OnLButton()
{ ......
m_bDrawRec1=TRUE;
InvalidateRect(&myRect1,TRUE);
.......
m_bDrawRec2=TRUE;
InvalidateRect(&myRect2,TRUE);
}

CMyView::OnDraw()
{
if(m_bDrawRec1)
DoDrawRect();
if(m_bDrawRec2)
DoDrawRec2()
m_bDrawRec1=m_bDrawRec2=FALSE; //恢复原始值
}

liefen 2000-07-05
  • 打赏
  • 举报
回复
虽然问题没有解决(最小化,然后最大化出现的图象与以前就不一样了),但十分感谢各位侠道热肠,希望以后还多加帮忙。
元明 2000-07-04
  • 打赏
  • 举报
回复
1.是否可以利用两个无效区域的坐标(left,top,right,bottom)来进行判断,然后做出相应的选择.
2.如果使用Win32SDK,可以调用GetDC().
hdc = GetDC(hwnd);
[others programs lines]
ReleaseDC(hwnd, hdc);
VC吗,由于我也是才学,哪有说错之处.......

magicwizard
magicwizard@km169.net

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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