在响应函数里加入如下代码//画圆
Invalidate(TRUE);
CPaintDC dc(this);
dc.Ellipse(100,100,200,200);可以画出圆来,但把改为://画圆
CPaintDC dc(this);
dc.Ellipse(100,100,200,200);
Invalidate(TRUE);
则画不出圆来。好奇怪,请说说错在哪里?

解决方案 »

  1.   

    Invalidate(TRUE);
    是刷新屏幕,就又给擦了。如果你那些代码放在OnDraw,或者OnPaint就没事
      

  2.   

    你的代码放在了哪里啊?
    Invalidate(TRUE);就是更新你的视图,更新后如果没有重新调用你的代码也就不会画圆了。
      

  3.   

    代码放在单击左键的响应函数OnLButtonDown()里,
    调用Invalidate();只是刷新已有东西啊。
      

  4.   

    CWnd::Invalidate
    void Invalidate( BOOL bErase = TRUE );Parameters
    指定是否要擦除更新区域内的背景。 Res使CWnd的整个客户区无效。当产生下一个WM_PAINT消息时,客户区被标记为需要重画。也可以在产生WM_PAINT消息之前用ValidateRect或ValidateRgn成员函数使区域有效。 bErase参数指定了在处理更新区域的时候是否要擦除更新区域内的背景。如果bErase为TRUE,则当调用BeginPaint的时候,将擦除背景。如果bErase为FALSE,则背景保持不变。如果对于更新区域的任何部分bErase为TRUE,则整个区域的背景都会被擦除,而不仅是给定的部分。 每当CWnd的更新区域不为空,并且在应用程序的窗口消息队列中没有其它消息时,Windows就发送一条WM_PAINT消息。
      

  5.   

    你可以直接在OnLButtonDown()里调用Invalidate();通过它调用PAINT来画圆