1
我在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;
}
}
我无法找到任何有关如何禁用行的参考资料。
另一个问题,即使在管理disbling部分后,如何在此自定义绘图函数中获取与该项目相关的数据?可以使用pLVCD-> nmcd.lItemlParam来调用GetItemData()。请帮忙。
其实我不得不以某种方式让用户立即知道某些项目对于当前上下文无效。为此,我必须将这一行灰化。我可以改变颜色,但这不会阻止他们选择无效。像禁用OK按钮/内部处理无效的选择/警告弹出窗口的替代方法不是首选。 –