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中加入最后的自绘代码:

原文地址:https://www.cnblogs.com/hgy413/p/3693700.html