我有一个自绘的Listctrl,想把它应用到Listview里,上网查了一下说是把listctrl中的处理直接搬到listview中就可以了
现在的问题就是:listctrl的处理是在drawitem函数里,可是listview里没有这个虚函数啊,而且listview里也没有WM_DRAWITEM消息,我手动在listview里重载这个虚函数(drawitem函数)也不好使,不会被调用。
查了一下listctrl调用drawitem的过程,是由OnChildNotify函数接收到WM_DRAWITEM消息后调用的,然后我重载了listview的OnChildNotify函数,但他从未接收过WM_DRAWITEM消息。如果我不加判断(判断是否是WM_DRAWITEM消息)的调用drawitem函数,运行程序就会直接报错
请问高人们这个问题如何解决?
现在的问题就是:listctrl的处理是在drawitem函数里,可是listview里没有这个虚函数啊,而且listview里也没有WM_DRAWITEM消息,我手动在listview里重载这个虚函数(drawitem函数)也不好使,不会被调用。
查了一下listctrl调用drawitem的过程,是由OnChildNotify函数接收到WM_DRAWITEM消息后调用的,然后我重载了listview的OnChildNotify函数,但他从未接收过WM_DRAWITEM消息。如果我不加判断(判断是否是WM_DRAWITEM消息)的调用drawitem函数,运行程序就会直接报错
请问高人们这个问题如何解决?
现在的问题就是想把它移植到listview中去,但是listview类中没有这个虚函数3楼的朋友,我现在用的是listview,不是listctrl控件,我的自绘listctrl控件是可以接收WM_DRAWITEM消息的
请教我如何设置能让listview成为自绘风格?
{
DECLARE_DYNCREATE(CListView)// Construction
public:
CListView();// Attributes
public:
CListCtrl& GetListCtrl() const;// Overridables
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);protected:
void RemoveImageList(int nImageList);
virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*);public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //{{AFX_MSG(CListView)
afx_msg void OnNcDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs)
{
// default is report view and full row selection
cs.style &= ~LVS_TYPEMASK;
cs.style |= LVS_REPORT | LVS_OWNERDRAWFIXED;//这里LVS_OWNERDRAWFIXED
m_bFullRowSel = TRUE; return(CListView::PreCreateWindow(cs));
}