使用自绘按钮的时候,为什么将自绘过程写在DrawItem里面,而给对话框设置背景的时候却写在Onpaint里面?为什么两个不是写在一个地方呢?DrawItem什么时候会被调用?

解决方案 »

  1.   

    楼主去多了解下控制的自绘等相关知识帖子。
    http://blog.csdn.net/xiexievv/article/details/6598696
      

  2.   

    Onpaint 后是 DrawItem (自绘的话)
      

  3.   

    不同的窗口、控件,需要在不同的地方绘制.
    1.按钮(Button)、菜单、标签、列表框(ListBox)、TabCtrl等,在WM_DRAWITEM绘制
    2.列表视图(ListCtrl)在WM_NOTIFY(NM_CUSTOMDRAW)绘制
    3.单选按钮(RADIOBUTTON)多选按钮(CHECKBOX)在WM_NOTIFY(NM_CUSTOMDRAW)绘制
    4.顶级窗口、以及其他一些控件,可以在WM_ERASEBKGND、WM_PAINT绘制
    5.非客户区(标题栏、边框)在WM_NCPAINT绘制
    6.WM_DRAWITEM、WM_NOTIFY是发送给控件父窗口的
    7.WM_ERASEBKGND、WM_PAINT、WM_NCPAINT是发给窗口/控件自身的部分控件自绘样式(使用SetWindowLong修改):
    1.按钮(Button)-------- BS_OWNERDRAW
    2.标签(Static)-------- SS_OWNERDRAW
    3.菜单---------------- MF_OWNERDRAW
    4.列表框(ListBox)----- LBS_OWNERDRAWFIXED、LBS_OWNERDRAWVARIABLE
    5.列表视图(ListCtrl)-- LVS_OWNERDRAWFIXED