按钮自绘时判断参数大概是这样,仅供参考:
if (lpDrawItemStruct->itemAction & ODA_DRAWENTIRE) {
    if (lpDrawItemStruct->itemState & ODS_SELECTED) {
        // 按下
    } else if (lpDrawItemStruct->itemState & ODS_DISABLED) {
        // 禁用
    } esle {
        // 常规
    }
}
if (lpDrawItemStruct->itemAction & ODA_FOCUS) {
    if (lpDrawItemStruct->itemState & ODS_FOCUS) {
        // 获得焦点
    }
}
而鼠标经过和离开在这里是没办法获知的,可能是因为按钮自绘这个功能出现时还没有 XP 主题,当时 Windows 2000 的经典主题下并没有鼠标经过效果,这个需要自己判断。

解决方案 »

  1.   

    没有获取焦点不算离开啊?我认为鼠标悬浮在按钮上方就是获取焦点,不知道我这种理解对不对?
    还有就是我看很多人都直接用if (lpDrawItemStruct->itemState & ODS_FOCUS),没有用外面那层lpDrawItemStruct->itemAction & ODA_FOCUS
      

  2.   

    ODA_FOCUS 这个确实不用判断也行,据我观察这个标志位几乎始终有。这个焦点与鼠标焦点不一样,你只能去自己检测鼠标消息判断鼠标悬浮状态。
      

  3.   

    打错了,ODS_FOCUS 这个确实不用判断也行,据我观察这个标志位几乎始终有。
      

  4.   

    我刚刚也测试了下,lpDrawItemStruct->itemAction和lpDrawItemStruct->itemState的各种状态真是把我搞晕了,完全看不懂了