自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应
一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面:
1. 在 dialog 里面 加一个 list 列表

2. 然后 绑定这个列表

哈哈,那么恭喜你,你的自绘 CListCtrl 控件 重写的ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应的。
为什么呢? 自己想吧,其他不多说,只是 MFC 的机制很日怪!
给出正确的做法吧,在 dialog 里面 去掉 list, 在去掉 DDX_Control(pDX, IDC_LIST_Glass, m_glassListCtrl);
然后在 适当的地方加上,比如下面:
BOOL CPickingPanel::OnInitDialog()
{
CBackgroundDlg::OnInitDialog();
DWORD dwListStyle = WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_OWNERDRAWFIXED;
if (m_list.Create(dwListStyle, CRect(0, 0, 0, 0), this, 0) == -1)
return FALSE;
....
现在 你从 CMFCCtrlList 的子类 就可以 重绘了。

在MFC中使用自绘CListCtrl时,发现在对话框中绑定自定义类后,ON_WM_MEASUREITEM_REFLECT和DrawItem函数未被调用。原因是MFC的机制导致的。正确解决方案是不在对话框中直接添加列表,而是手动创建并设置风格,例如在OnInitDialog中创建。遵循此方法后,自定义的CMFCCtrlList子类能够正常进行重绘操作。
最低0.47元/天 解锁文章
1615

被折叠的 条评论
为什么被折叠?



