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()
。