【问题标题】:Disable Checkbox (LVITEM) in the CListCtrl禁用 CListCtrl 中的复选框 (LVITEM)
【发布时间】:2017-11-28 07:53:13
【问题描述】:

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

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

【问题讨论】:

  • 至少显示一些代码,否则你的问题不清楚而且太宽泛。

标签: mfc clistctrl


【解决方案1】:

已禁用复选框没有状态。

但是您可以阻止LVN_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;

还有机会实现您自己的图形和复选框处理。您可以将自己的图像列表分配给列表视图,并且您可以使用自己的状态图像处理 LVIS_STATEIMAGEMASKINDEXTOSTATEIMAGEMASK

【讨论】:

  • 实现您自己的图形和复选框处理 - 这就是我会做的(并且已经做过)。唯一棘手的部分是为复选框状态创建图像列表(以匹配当前主题)。这可以使用GetThemePartSize()DrawThemeBackground()iPartIdBP_CHECKBOXiStateIdCBS_... 来完成。如果您需要支持早于 Win 8 的 Windows 版本,“经典”外观有 DrawFrameControl()
猜你喜欢
  • 2020-01-20
  • 2017-05-01
  • 2013-05-10
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多