我做了个activex控件,这个控件里由3个窗口组成,整个control的OnDraw里我什么都没做,只在每个子窗口(从CWindowImpl派生的)的OnPaint里绘画内容,在这些OnPaint函数里我画的方法都是创建另一个dc,在它上面画好后copy回当前dc,
LRESULT 
CMyWindow::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  CPaintDC dc(m_hWnd);
  CDC dcMem;
  dcMem.CreateCompatibleDC(dc);
  CBitmap bitmap;
  CBitmapHandle pOldBitmap;
  bitmap.CreateCompatibleBitmap(dc, rcClient.Width(), rcClient.Height());
  pOldBitmap = dcMem.SelectBitmap(bitmap);
  //
  //  作图
  //
  dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), dcMem, 0, 0,  SRCCOPY);
  dcMem.SelectBitmap(pOldBitmap);
  bHandled = false;
  return 0;
}
不明白为什么闪烁,在公司液晶显示器上好像还没这问题,回家看CRT显示器发现怎么闪的那么厉害,请高手指点,不胜感激

解决方案 »

  1.   

    OnEreaseBkGround(..)
      中返回一个空画刷
      

  2.   

    LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
          // TODO : Add Code for message handler. Call DefWindowProc if necessary.
          return 0;
    }怎么返回啊?
      

  3.   

    楼上说的空画刷可能是在CWnd中使用的方法。LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
          // TODO : Add Code for message handler. Call DefWindowProc if necessary.
          return 1;
    }把0改成1背景就不会自动擦除了。你先试试吧,也可能问题没有出在这里呢。
      

  4.   

    there is a chance that it takes too long to 作图 on your own machine, consider to buffer (maybe double buffering) the bitmap in memory, make changes to the buffer in your code somewhere else, and only do BitBlt in OnPaint
      

  5.   

    saucer你说的方法也就是我把左图写道函数里,在onpaint里调用,道理其实一样的阿
      

  6.   

    那就是你的绘画时间太长乐,按照那个5星用户的就可以解决了。把图片画到缓冲里,然后OnPaint直接从缓冲拷到DC就快了
      

  7.   

    saucer应该是说要使用内存位图。
      

  8.   

    画图时间应该没关系把,我试着都改成FillRect,就调用这一个画图函数都闪烁,我的窗口布局是这样的整个control由一个垂直分割条,分割条左边是Left Window, 右边又是一个水平分割条,上面是RightTop Window, 下面是Right Bottom window,水平分割条不能拖动,垂直的分割条可以拖动位置。每个window的OnPaint里我相应OnPaint的做法基本一样,control自己得OnDraw里我什么都不画。
      

  9.   

    如果你用(CMyWindow)的是继承与视图,那么闪烁是不好解决的。
    你可以改为从CWnd继承,就ok了!
    class CMyWindow: public CWnd
    {
    };
    祝你好运!
      

  10.   

    五星用户就是牛,回答问题都用English