就是说使用Graphics绘制Image之前,能否使用透明(背景色)的刷子把将要绘制的区域clear?

解决方案 »

  1.   

    wangk(倒之) 
    你的方法在可以解决透明的问题,但是会出现闪烁的问题。
    比如有个主窗体,贴了个背景图片,然后在上面有个Button,这个Button也是个窗体,而且这个Button上贴了一张透明的png图片,作为不规则按钮。按钮3个状态的图片内容有可能不一样,所以就出现了我说的那个问题。如果按着wangk(倒之) 的说法,Button每次自己重绘的时候也通知其父窗体(也就是主窗体)重绘对应区域,的确可以解决重叠的问题,但是这个时候Button会出现闪烁的问题。这也是不能接受的。
      

  2.   

    重绘不一定要让其父窗体来进行,我们自己处理就可以了。
    闪烁可以用双缓冲绘图的方式,即MemDc里先重绘背景,然后贴图,最后才复制到Button的Dc。
      

  3.   

    你说的方法就是我前面说得那样:如果我不直接使用Graphics 画在窗体上的dc上,而是先画到Memory DC,然后再贴到窗体dc上去,就会在图片透明的部分呈现出黑色,没有透明效果。这样就没有透明的效果。
      

  4.   

    MemDc里先重绘背景,就是后面button的背景,然后在绘出图片。
      

  5.   

    MemDc里先重绘背景,就是后面button的背景,然后在绘出图片。
    ---------------------------------------------------------
    请问这里说说的背景是什么?如何绘制绘制?Button透明的地方应该看到的是主界面上的内容,所以我理解为应该是用透明的刷子刷一次,然后再在Button的窗体上贴新的png图片。
      

  6.   

    如果你主界面背景不是贴图的话,那么取其背景色刷一下即可,如果主界面背景是贴图的话就取出图的部分刷在MemDc里。
      

  7.   

    wangk(倒之):
    我明白你的意思了!我试试看,谢谢提示。
      

  8.   

    wangk(倒之):
    你的方法我刚才试了,取Parent Wnd的HDC是不行的,因为这个时候Parent Wnd的DC还保留着上个图片的信息。只能是直接取Parent Wnd背景图片的相应部分,但是这个时候如果这个时候主窗体的尺寸和BK的不一致(比如主窗体可以随意改变大小)就麻烦了,还要对图片区域进行对应的缩放才能刷。请问有没有其他的方法?
    谢谢!