在单文本框里画了图(用双缓存已解决闪烁和重绘问题),又新建了个按钮。我主要做的是TCP服务器端,现在我给服务器发数据时,速度发快了后,图形不闪烁,但按钮闪烁很厉害,求解.......
int CMyview1::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; m_btn1.Create("远程操作",WS_VISIBLE | BS_DEFPUSHBUTTON, CRect(0,0,90,40),this,IDC_MYBUTTON);//创建按钮 return 0;
}
请问闪烁原因?如何解决?如果要把上述代码写进双缓存,如何写?
谢谢大家了!

解决方案 »

  1.   

    我的意思是你将要绘制图形的区域和button所在的区域重叠?即你的button覆盖了你的绘图区域的一部分,既是你的button的遮挡问题?
    InvlidateRect()重新计算你的刷新区域,将Button区域排除在外
      

  2.   

    我的意思是你将要绘制图形的区域和button所在的区域重叠?即你的button覆盖了你的绘图区域的一部分,既是你的button的遮挡问题?
    InvlidateRect()重新计算你的刷新区域,将Button区域排除……
    [/Quote]
    哦,没有覆盖的,button在绘制的图的上方
      

  3.   

    哦,没有覆盖的,button在绘制的图的上方。
    还有请问你说的InvlidateRect()是不是打错了?怎么百度不到啊?怎么用这个函数啊?
      

  4.   

    BOOL InvalidateRect(  HWND hWnd,           // handle to window
      CONST RECT* lpRect,  // rectangle coordinates
      BOOL bErase          // erase state);InvalidateRect();就是指定你将要刷新的区域,看第二个参数
      

  5.   

    用InvalidateRgn,从裁剪rgn中扣除button所占的rect区域,这样不会闪烁。
      

  6.   

    请问如何得到button所占的rect区域?
      

  7.   

    CRect rect;
    m_btn1.GetWindowRect(&rect);  // 屏幕坐标表示的rect
    ScreenToClient(&rect);   // 映射到当前客户区下面可以创建CRgn了,然后从client的rgn中扣除,再调用CDC::SelectClipRgn
      

  8.   

    再调用CDC::SelectClipRgn  或InvalidateRgn
      

  9.   

    你说的那些全写在int CMyview1::OnCreate(LPCREATESTRUCT lpCreateStruct)  
    这个函数里吗?
      

  10.   

    方法一、在OnDraw里面调用CDC::SelectClipRgn重绘客户区
    方法二、在任何需要的地方调用InvalidateRgn更新rgn
      

  11.   

    我真的很菜哈,我还是有些不明白。
    方法一中,在OnDraw里我用的双缓存,再调用CDC::SelectClipRgn,可以吗?还有去哪里写CDC::SelectClipRgn这个函数啊?
    方法二中,什么叫需要的地方?怎么更新rgn哦?
    也许我问的问题对你来说很简单,但对我来说不好理解哈,谢谢回答了。因为你们说的这些还是让我无从下手....