Mfc 在CListCtrl中禁用复选框(LVITEM)

Mfc 在CListCtrl中禁用复选框(LVITEM),mfc,clistctrl,Mfc,Clistctrl,我有自己的CListCtrl实现,带有复选框(LVITEM)及其子项。我可以禁用子项但我不知道如何禁用复选框 当项目为LVITEM时,如何使CListCtrl中的禁用项目变为灰色?没有禁用复选框的状态 但是您可以在LVN\u ITEMCHANGING中阻止状态更改。此通知在应用对列表视图的任何更改之前发送 void CWzProjectStatistic_User::OnItemchangingLcData(NMHDR* pNMHDR,LRESULT* pResult) { LPNMLIS

我有自己的
CListCtrl
实现,带有复选框(
LVITEM
)及其子项。我可以禁用子项但我不知道如何禁用复选框


当项目为
LVITEM
时,如何使
CListCtrl
中的禁用项目变为灰色?

没有禁用复选框的状态

但是您可以在
LVN\u ITEMCHANGING
中阻止状态更改。此通知在应用对列表视图的任何更改之前发送

void CWzProjectStatistic_User::OnItemchangingLcData(NMHDR* pNMHDR,LRESULT* pResult) 
{
  LPNMLISTVIEW pNMLV= reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

  // clear result (accept changes)
  *pResult = 0;

  // Only if the state changes
  if ((pNMLV->uNewState&LVIS_STATEIMAGEMASK)!=(pNMLV->uOldState&LVIS_STATEIMAGEMASK))
  {
    if (IfThisIsADisabledEntry(pMLV))
      *pResult = 1;
void CWzProjectStatistic\u用户::OnItemchangingLcData(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMLISTVIEW pNMLV=重新解释铸件(pNMHDR);
//清除结果(接受更改)
*预设值=0;
//只有当状态改变时
如果((pNMLV->uNewState&LVIS_statemagemask)!=(pNMLV->uOldState&LVIS_statemagemask))
{
如果(如果此为禁用(pMLV))
*预设值=1;

您还可以实现自己的图形和复选框处理。您可以将自己的imagelist分配给列表视图,并且您可以使用自己对状态图像的处理与
LVIS_stateMageMask
indextateMageMask

禁用的复选框没有状态

但您可以在
LVN\u ITEMCHANGING
中阻止状态更改。此通知在应用对列表视图的任何更改之前发送

void CWzProjectStatistic_User::OnItemchangingLcData(NMHDR* pNMHDR,LRESULT* pResult) 
{
  LPNMLISTVIEW pNMLV= reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

  // clear result (accept changes)
  *pResult = 0;

  // Only if the state changes
  if ((pNMLV->uNewState&LVIS_STATEIMAGEMASK)!=(pNMLV->uOldState&LVIS_STATEIMAGEMASK))
  {
    if (IfThisIsADisabledEntry(pMLV))
      *pResult = 1;
void CWzProjectStatistic\u用户::OnItemchangingLcData(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMLISTVIEW pNMLV=重新解释铸件(pNMHDR);
//清除结果(接受更改)
*预设值=0;
//只有当状态改变时
如果((pNMLV->uNewState&LVIS_statemagemask)!=(pNMLV->uOldState&LVIS_statemagemask))
{
如果(如果此为禁用(pMLV))
*预设值=1;

也有机会实现您自己的图形和复选框处理。您可以将自己的imagelist分配给列表视图,您可以使用自己对状态图像的处理,使用
LVIS\u stateMageMask
indextoStateMageMask

显示至少一些代码,否则您的问题不清楚且太广泛。显示在使用一些代码,否则您的问题就不清楚且过于宽泛。实现您自己的图形和复选框处理-这就是我会做的(并且已经做过的)。唯一棘手的部分是为复选框状态创建图像列表(以匹配当前主题)。这可以使用
GetThemePartSize()
DrawThemeBackground()完成
使用
BP\u CHECKBOX的
iPartId
CBS\u的
iStateId
如果您需要支持早于Win 8的Windows版本,有
DrawFrameControl()
用于“经典”外观。实现您自己的图形和复选框处理-这是我会做的(并且已经做了)。唯一棘手的部分是为复选框状态创建图像列表(以匹配当前主题)。这可以使用
GetThemePartSize()
DrawThemeBackground()完成
使用
BP\u复选框的
iPartId
CBS\u的
iStateId
如果您需要支持早于Win 8的Windows版本,则“经典”外观有
DrawFrameControl()