MFC 대화 상자에 CListCtrl이 있습니다. 내가해야 할 일은 사용자가 그 선택을 할 수 없도록 조건에 따라 몇 가지 항목을 없애는 것입니다. 지금은 색상을 변경했지만 적절한 해결책은 아닙니다. 내 코드는 다음과 같습니다.CListCtrl Customdraw 함수에서 행을 비활성화하거나 회색으로 표시합니다.
void CSomeDialog::OnCustomdrawElementList(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = 0;
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
COLORREF crText;
//Here I want to do disable based on some condition of the data related to the item//
if ((pLVCD->nmcd.dwItemSpec % 2) == 0)
crText = RGB(255,0,0);
else if ((pLVCD->nmcd.dwItemSpec % 2) == 1)
crText = RGB(0,255,0);
// Storing the color back
pLVCD->clrText = crText;
*pResult = CDRF_DODEFAULT;
}
}
행을 비활성화하는 방법에 대한 참조를 찾을 수 없습니다.
또 다른 문제는이 사용자 지정 그리기 기능에서 항목과 관련된 데이터를 가져 오는 방법을 결정한 후에도 마찬가지입니다. pLVCD-> nmcd.lItemlParam을 사용하여 GetItemData()를 호출 할 수 있습니다. 도와주세요.
사실 나는 어떻게 든 사용자가 현재 항목에 대해 유효하지 않은 항목을 즉시 알게해야합니다. 그것을 위해 나는 줄을 회색으로해야합니다. 나는 색깔을 바꿀 수는 있지만, 그것이 군대를 선택하는 것을 막을 수는 없습니다. OK 버튼을 비활성화하거나 유효하지 않은 선택/경고 팝업을 내부적으로 처리하는 등의 대안은 바람직하지 않습니다. –