【发布时间】:2017-11-28 07:53:13
【问题描述】:
我有自己的 CListCtrl 实现,带有复选框 (LVITEM) 及其子项。我可以使子项禁用,但我不知道如何禁用复选框。
当CListCtrl 中的项目为LVITEM 时,如何使禁用的灰色 项目?
【问题讨论】:
-
至少显示一些代码,否则你的问题不清楚而且太宽泛。
我有自己的 CListCtrl 实现,带有复选框 (LVITEM) 及其子项。我可以使子项禁用,但我不知道如何禁用复选框。
当CListCtrl 中的项目为LVITEM 时,如何使禁用的灰色 项目?
【问题讨论】:
已禁用复选框没有状态。
但是您可以阻止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_STATEIMAGEMASK 和 INDEXTOSTATEIMAGEMASK
【讨论】:
GetThemePartSize() 和DrawThemeBackground() 与iPartId 的BP_CHECKBOX 和iStateId 的CBS_... 来完成。如果您需要支持早于 Win 8 的 Windows 版本,“经典”外观有 DrawFrameControl()。