1:在基于对话框的MFC工程中进行区域动态贴图,已经实现,实现方式是通过timer()在timer中postmessage(wm_paint)进行从新绘制,但是,上次绘制的图片还会存在,怎样能够擦除(本次绘制没有绘到而上次绘制到的地方)
2:静态的对话框重载OnCtlColor进行了Edit控件的背景色和字体颜色的设置,该Edit控件右侧存在滚动条,在Edit控件刷新的时候,控件的在边框模式和滚动条两头的小箭头(点击滚动条就滚动哪个)会被背景色覆盖,而Edit控件的窄边框(选择了带边框控件)刷新的时候窄边框会消失,上面的两个问题,在鼠标焦点在边框上或在滚动条的小箭头部位时会完成在边框和滚动条箭头的正确绘制。
以上:
1题40,2题60

解决方案 »

  1.   

    1、对话框中有个消息WM_ERASEBKGND,用于响应对话框背景擦出。消息响应函数是OnEraseBkgnd();
    postmessage(wm_erasebkgnd);
    postmessage(wm_paint);2、应该是你填充的区域有问题,对话框的背景区域应该是除去标题栏和右(或左)侧滚动条以外的区域。
      

  2.   

    感觉移动窗体的方法不好,而最小化后再最大化和设焦点setfoucs都试过达不到效果,
      

  3.   

    1、对话框中有个消息WM_ERASEBKGND,用于响应对话框背景擦出。消息响应函数是OnEraseBkgnd();
    postmessage(wm_erasebkgnd);
    postmessage(wm_paint);
    这个试过重载OnErasebkgnd函数,没有效果,感觉跟你说的是一个,不过我在尝试下这种。2、应该是你填充的区域有问题,对话框的背景区域应该是除去标题栏和右(或左)侧滚动条以外的区域。
    这个没有想到有可能会是区域问题,我回去试一下
      

  4.   

    你更改为之后将整个窗口重绘一次就不会出现上次绘制的图片还会存在了。
     你那个绘图的位置需要根据Timer()改变  
      

  5.   

    1. 调用函数InvalidateRect拭除掉上次绘图,InvalidateRect( OldPicRect, true ); OldPicRect就是上次绘图的矩形区域
      

  6.   

    1、时钟消息里用Invalidate,而且你要确保OnPaint中使用的是CPaitnDC
    2、这个问题不太好解决,建议自绘edit,自己的控制度大一些,参考
    http://blog.csdn.net/mirage520/article/details/7316440