禁用 CListCtrl 自定义绘制函数中的行或将其显示为灰色
Disable or greyout rows in CListCtrl Customdraw function
我在MFC对话框中有一个CListCtrl。我要做的就是根据条件禁用某些项目,以便用户无法选择它。到目前为止,我已经改变了颜色,但这不是合适的解决方案。我的代码如下所示:
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() 吗?请帮忙。
绘制和禁用行是不同的。
若要禁用行,使其无法选择,请使用 LVN_ITEMCHANGING。检查状态是否从未选中更改为已选中(比较 uNewState 和 uOldState 关于对LVIS_SELECTED的更改)。如果不想允许选择此项,只需将 TRUE 返回到WM_NOTIFY消息。
关于将数据关联到列表视图中的项目,使用自由 lParam 字段很容易。在这里,您可以存储一些用户数据,这些数据可能指向您拥有的内部结构。您还可以在绘图例程中访问此字段。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- 禁用 CListCtrl 自定义绘制函数中的行或将其显示为灰色
- OpenGL 反射着色器仅显示灰色
- 渲染到帧缓冲区时,灰色材质显示为深色
- eclipse(stm32)Why中的项目资源管理器中,一些stderivi文件显示为灰色
- 显示“是/否”提示框,其中“否”显示为灰色
- cvLoadImage() + cvShowImage()从openCV显示灰色框
- 为什么从Project Tango Tablet中提取的图像显示为灰色
- Visual Studio下拉菜单中显示为灰色的类方法