//按下按钮并弹起               IDC_BUTTON1                     1001
/*
Button:WindowProc():message=0x20 ,  WPARAM=1879210944 , HLPARAM =513 ,  LWPARAM =1
Button:WindowProc():message=0x87 ,  WPARAM=1 ,          HLPARAM =5 ,    LWPARAM =976        WM_GETDLGCODE   后跟消息函数OnGetDlgCode()
鼠标按下
Button:WindowProc():message=0x201 ,WPARAM=1 ,           HLPARAM =20 ,   LWPARAM =33         WM_LBUTTONDOWN
Button:WindowProc():message=0xf3 ,  WPARAM=1 ,          HLPARAM =0 ,    LWPARAM =0          BM_SETSTATE     后跟重载函数OnDrawItem()
Button:WindowProc():message=0x87 ,  WPARAM=1 ,          HLPARAM =5 ,    LWPARAM =976        WM_GETDLGCODE   后跟消息函数OnGetDlgCode()
鼠标移动
Button:WindowProc():message=0x200 ,WPARAM=1 ,           HLPARAM =20 ,   LWPARAM =33         WM_MOUSEMOVE
Button:WindowProc():message=0xf3 ,  WPARAM=1 ,          HLPARAM =0 ,    LWPARAM =0          BM_SETSTATE     @此处f3后没有跟重装函数OnDrawItme()
Button:WindowProc():message=0x119 ,WPARAM=1 ,           HLPARAM =16 ,   LWPARAM =0
Button:WindowProc():message=0x119 ,WPARAM=10 ,          HLPARAM =16 ,   LWPARAM =0
Button:WindowProc():message=0x119 ,WPARAM=2 ,           HLPARAM =16 ,   LWPARAM =0
Button:WindowProc():message=0x87 ,  WPARAM=0 ,          HLPARAM =5 ,    LWPARAM =976        WM_GETDLGCODE   后跟消息函数OnGetDlgCode()
 
鼠标弹起
Button:WindowProc():message=0x202 ,WPARAM=0 ,           HLPARAM =20 ,   LWPARAM =33         WM_LBUTTONUP
Button:WindowProc():message=0xf3 ,  WPARAM=0 ,          HLPARAM =0 ,    LWPARAM =0          BM_SETSTATE     后跟重载函数OnDrawItem()
Button:WindowProc():message=0x215 ,WPARAM=0 ,           HLPARAM =0 ,    LWPARAM =0          WM_CAPTURECHANGED
 
分析得出重装函数DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)只在按下和弹起 f3消息后调用一次
分析: 鼠标按下后f3消息wparam为1,调用DrawItem;
        鼠标移动后f3消息wparam扔为1,没有改变状态,没调用DrawItem;
        鼠标弹起后f3消息wparam改为0,调用DrawItem;
 
网络: OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct );:
        当自绘按钮(owner-draw button),下拉列表框(combo box),
        列表框(list box)视觉属性,或者菜单发生变化时,框架为他们的owner调用该函数。本例没产生WM_DRAWITEM(0x002B)消息
        OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,
        而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,
        顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,
        例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,
        但象菜单,按钮等的自画则会调用OnDrawItem。
        OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,
        凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。
        来自:http://www.cnblogs.com/sqzxcv/archive/2009/12/06/1618117.html
??: 消息函数OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct );是在父窗口中调用,对子控件处理?
        在子控件类中不会有控制自己的WM_DRAWITEM消息?不会调用OnDrawItem( int , LPDRAWITEMSTRUCT  )?
         
        在子控件自身类中调用重载函数DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
最后:1    在对话框中添加自绘按钮,如果设置owner draw属性为真,按下、弹起按钮,父对话框会接收到WM_DRAWITEM消息,
        并会调用对话框的OnDrawItem函数,可在函数或消息中对按钮进行处理。
        其中lpDrawItemStruct->CtlID,nIDCtl两个参数表明按钮的ID,
        对于自绘按钮类自身,按下弹起会调用重载函数DrawItem()
        其中LPDRAWITEMSTRUCT.itemState 按下等于17,弹起等于16
    2   如果owner draw消息设置为假,则,父窗口不会收到WM_DRAWITEM消息,也不会调用OnDrawItem()函数
        按钮自身类也不会调用重载的DrawItem()函数。
        按钮的自绘效果都会不起作用,表现出来一个白框框样子的标准MFC控件
        但owner draw为假的情况下,自绘按钮类对WM_PAINT/WM_ERASEBKGND消息或OnPaint/OnEraseBkgnd的重载仍起作用
        可以改变按钮的初始样子,只能看不能用,点一次按钮后就恢复为标准的MFC控件按钮了。
        仍有0x00f3消息
        */