MFC CListView响应HDN_ITEMCHANGING后改变列宽无法自动显示隐藏水平滚动条

2020-08-18 09:11发布

问题:

我想通过响应HDN_ITEMCHANGING,控制列表控件中列的最小宽度,但是在使用类向导创建了以后,不进行任何代码的修改,即以下代码:

void CMyView::OnHdnItemchanging(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
	*pResult = 0;
}

这个时候运行,大幅增大列宽后,水平滚动条不会因为列超出范围而出现(不响应该消息前,水平滚动条能正常自动地显示和隐藏),如图:

并且更换选中行,着色也会出现问题:

我找了好多资料想刷新滚动条都没找到,希望各位大佬能给个解决方法

回答1:

已解决:不要使用HDN_ITEMCHANGING,重写虚函数OnNotify

BOOL CMyView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
	HD_NOTIFY* pHDN = (HD_NOTIFY*)lParam;
	if ((pHDN->hdr.code == HDN_ITEMCHANGINGW || pHDN->hdr.code == HDN_ITEMCHANGINGA)
		&& pHDN->pitem->cxy < 80)
	{
		*pResult = TRUE;                // disable change
		return TRUE;                    // Processed message
	}
	return CListView::OnNotify(wParam, lParam, pResult);
}