zoukankan      html  css  js  c++  java
  • clistbox 和button的自绘

    1.自绘了CListBox:简记如下:

    在DrawItem中自绘,必须设定属性:LBS_OWNERDRAWFIXED |LBS_HASSTRINGS;

    如果不设定LBS_HASSTRINGS,那么GetText取得的将是乱码:

    三个难点,一是自绘属性加上LBS_OWNERDRAWFIXED后,必须同时重载DrawItem和MeasureItem,我第一次只重载了DrawItem,发现出现堆栈错误。
    二是自绘属性中必须有LBS_HASSTRINGS,不然GetText取得的将是乱码.
    三是自绘中 dc.Attach(lpDIS->hDC);必须有对应的dc.Detach();,我第一次没有加dc.Detach();结果发现只能显示一项

    listbox自绘非常简单:直接贴代码:

    2.自绘的button有三种状态,选中,停留,离开:

    绘制也很简单:

    一个难点:WM_MOUSELEAVE和WM_MOUSEHOVER不是标准的Windows消息函数,解决方法:可通过_TrackMouseEvent()函数来触发.具体可参看MSDN有详细说明

    1.在.h中加入:

    2.重载DrawItem和PreSubclassWindow;

    3.三个消息:
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg LRESULT OnMouseHover(WPARAM wParam,LPARAM lParam);
    afx_msg LRESULT OnMouseLeave(WPARAM wParam,LPARAM lParam);

    4.在PreSubclassWindow初始化各种变量,如

    5.在DrawItem中加入最后的自绘代码:

  • 相关阅读:
    runtime-给系统已有类添加属性
    解决自定义leftBarButtonItem返回手势失效的方法
    类和对象
    内存拷贝
    响应者链
    属性
    懒加载
    封装思想
    屏幕旋转
    block
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693700.html
Copyright © 2011-2022 走看看