使用 WS_EX_LAYERED样式以后所有的动作所产生的绘图操作都是在一个缓存图片上进行的处理 最后用UpdateLayeredWindow贴图
当缓存图片高宽都很小的话效率非常高 
但是最大化以后如果缓存图片中有部分内容改变(子控件更新) 则需要在一次使用UpdateLayeredWindow将缓存图片更新到窗口上
这样的话如果改变一个像素都需要重新贴图一次 效率非常低 特别是图片越大效率也就越低
请教一下在这种模式下 如果进行局部刷新呢?

解决方案 »

  1.   

    可以这样解决:
    将背景图片设置成全局HDC变量,在初始化时绘制一次,以后每次刷新时直接贴图。如:
    HDC hdcBackground;//全局变量,在初始化时绘制一次背景图片。
    如果只一个背景图片的话,在刷新前调用BitBlt贴图:
    BitBlt(hdcMemory, 0, 0, rc.Width(), rc.Height(), hdcBackground, 0, 0, SRCCOPY);
    然后在hdcMemory上绘制需要刷新的图片。如果有多个背景图片就要选用AlphaBlend函数进行混合然后再图。