MFC 中怎么重绘OnNMCustomdrawListInsideInfo
时间: 2024-03-14 09:48:25 浏览: 163
在 MFC 中,可以通过调用 CListCtrl 控件的 Invalidate() 函数来触发重绘,从而使 OnNMCustomdrawListInsideInfo 事件函数得到调用。具体的步骤如下:
1. 在 CListCtrl 控件的头文件中添加事件处理函数声明:
```
afx_msg void OnNMCustomdrawListInsideInfo(NMHDR *pNMHDR, LRESULT *pResult);
```
2. 在该控件的源文件中添加事件处理函数的实现:
```
void CMyListCtrl::OnNMCustomdrawListInsideInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW lpNMCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
*pResult = CDRF_DODEFAULT;
// 在这里实现对子项的绘制样式、颜色等的自定义设置
}
```
3. 在 CMyListCtrl 控件的初始化过程中注册事件处理函数:
```
BOOL CMyListCtrl::OnInitDialog()
{
CListCtrl::OnInitDialog();
// 注册事件处理函数
m_listCtrl.SetExtendedStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT);
m_listCtrl.ModifyStyle(0, LVS_REPORT);
m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
m_listCtrl.SetCallbackMask(LVIS_SELECTED | LVIS_FOCUSED | LVIS_STATEIMAGEMASK);
m_listCtrl.EnableGroupView(FALSE);
m_listCtrl.SetCustomDraw(FALSE);
m_listCtrl.SetMsgHandled(FALSE);
m_listCtrl.SetRedraw(TRUE);
m_listCtrl.EnableWindow(TRUE);
m_listCtrl.SetItemCountEx(0, LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);
m_listCtrl.SetItemCountEx(m_listCtrl.GetItemCount(), LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);
m_listCtrl.SetCallbackMask(LVIS_SELECTED | LVIS_FOCUSED | LVIS_STATEIMAGEMASK);
m_listCtrl.SetCustomDraw(TRUE);
m_listCtrl.SetMsgHandled(TRUE);
m_listCtrl.SetRedraw(TRUE);
m_listCtrl.EnableWindow(TRUE);
return TRUE;
}
```
4. 在需要重绘的时候调用 Invalidate() 函数:
```
m_listCtrl.Invalidate();
```
这样就可以触发 OnNMCustomdrawListInsideInfo 事件函数的调用,从而实现对列表控件的个性化定制。
阅读全文