本帖最后由 kofot2002 于 2010-10-21 12:35:12 编辑

解决方案 »

  1.   

    不要在OnEraseBkgnd里面绘图,把代码移到OnPaint中。在OnEraseBkgnd里面绘图肯定闪
      

  2.   


    一般绘制的动作都需要放到ondraw或者onpaint中了。
      

  3.   


    OnEraseBkgnd 其实也可以。
    总觉得你的这个函数写的有问题 ,问题还很大!Bitmap img(_T("H:\\project_vs\\test\\wtl03\\wtl03\\Debug\\images\\20091121152825234.png"));
    img需要定义成成员变量。
    你这样的话,每次都要读取图片,费时。
      

  4.   

    谢谢建议。
    我把代码放到OnPaint()中,无法显示图片唉~,我做了个输出ATLTRACE(_T("sssssssssssssssss onPaint:%d"),n++);
    我发现WM_PAINT一直在发送消息,控件也显示不出来了,但背景图还是没显示出来。
      

  5.   

    我现在,在OnInitDialog()中使用User32.DLL的SetLayeredWindowAttributes设置了对话框为透明效果,这样背景在拖动时,就不会保留原初始化的背景了,但是有一个新的问题,如下图:这张做背景的PNG图,周边是透明的,结果在显示的时候,是黑色,我该如果使这些原本在png中透明的地方在运行后变成完全透明?
      

  6.   

    好了,我找到办法了,我不在使用PNG图,而是改用bmp、jpg等图片,用PS给原PNG多加一层纯蓝色[RGB(0,0,255)]背景层,利用SetLayeredWindowAttributes,过滤掉掉该纯蓝色,不使用Graphics去DrawImage了,改用CImage来加载背景图,之后就可以像MSN或迅雷的浮动小窗口那样任意拖动而透明了,最后在这里还是要谢谢大家的帮助和建议。