您的位置:程序门 -> vc/mfc -> 界面



表头绘图闪烁,双缓都不行


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


表头绘图闪烁,双缓都不行
发表于:2007-06-12 18:04:11 楼主
我自定义了一个cmyheaderctrl,子类化它为cmylistctrl的表头控件
cmyheaderctrl的外观是通过贴图实现的.画好后发现点击listctrl和拖动边框时会闪烁,双缓冲都没效果
我给出onpaint的简化版本给看看
onerasebkgnd(){return   true;}
onpaint()
{
      cpaintdc   dc(this);
      crect   rcclient,rcitem,rect;
      getclientrect(&rcclient);
   
      int   nwidth,nheight;
      nwidth=rcclient.width();
      nheight=rcclient.height();
      cdc*   pdc=getwindowdc();
      cdc   memdc;
      cbitmap   membitmap;
      memdc.createcompatibledc(null);
      membitmap.createcompatiblebitmap(pdc,nwidth,nheight);    
      cbitmap   *poldbit=memdc.selectobject(&membitmap);
      memdc.fillsolidrect(0,0,nwidth,nheight,rgb(255,255,255));

    bitmap     bmspan;
    m_bmpspan.getbitmap(&bmspan);

    for(int   v=0;   v <rcclient.width();   v++)
  {
rect.left=rcclient.left+2+(v*bmspan.bmwidth);
rect.top=0;
rect.right=rect.left+bmspan.bmwidth;
rect.bottom=rect.top+rcclient.height()+3;

drawstretch(memdc,&rect,(hbitmap)m_bmpspan);
    }
    pdc-> bitblt(0,0,nwidth,nheight,&memdc,0,0,srccopy);           membitmap.deleteobject();
        memdc.deletedc();

      cheaderctrl::onpaint();
}
发表于:2007-06-12 23:54:401楼 得分:0
up
发表于:2007-06-13 03:02:312楼 得分:0
//cheaderctrl::onpaint();
发表于:2007-06-13 10:04:083楼 得分:0
mackz,还是不行啊,好郁闷

我用同样的方法画dialogbar根本没问题,怎么画cheaderctrl就出问题了呢?好晕

现在问题是拖动边框(也就是连续响应onsize)的时候才出现闪烁
发表于:2007-06-13 14:37:594楼 得分:0
你可以lockwindow来试一试的,
然后resize后,unlockwindow
发表于:2007-06-13 14:39:005楼 得分:0
在onsize里面哈
发表于:2007-06-26 09:39:016楼 得分:0
该回复于2007-12-28 17:13:24被管理员或版主删除
发表于:2007-06-27 10:15:287楼 得分:0
把画背景的给蔽了。。
如下,
bool   cpage::onerasebkgnd(cdc*   pdc)  
{
return   true;
}


快速检索

最新资讯
热门点击