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