gpt4 book ai didi

visual-c++ - 如何在 MFC 中启用/禁用 CGridCtrl 上的复选框

转载 作者:行者123 更新时间:2023-12-05 08:00:55 25 4
gpt4 key购买 nike

我在我的项目中使用 MFC 网格控件 2.27 ( http://www.codeproject.com/Articles/8/MFC-Grid-control-2-27 )。我想在 CGridCtrl 上启用/禁用复选框。我找不到禁用复选框的直接方法。事实上,当我编写以下行时,它禁用了显示复选框的网格单元格,而复选框保持启用状态。

m_Grid2.GetCell(row,col)->SetState(GVIS_READONLY);

请建议任何在运行时禁用/启用复选框和网格单元格的方法。

最佳答案

我的建议是向控件添加第二个图像列表。此图像列表会禁用(灰色)您的图像版本。

CGridCtrl header 中添加:

void SetDisabledImageList(CImageList* pList) { m_pDisabledImageList = pList; }
CImageList* GetDisabledImageList() const { return m_pDisabledImageList; }

然后添加变量,就在现有的 m_pImageList 之后:

CImageList* m_pDisabledImageList;

现在您需要为自己准备图像的禁用版本并填充 CImageList(超出此答案的范围 - 只需要图像资源的灰度版本)。然后,您只需使用新的 SetDisabledImageList 方法传递该图像列表。


最后,您修改CGridCellBase::Draw 方法并像这样修改代码:

CImageList *pImageListToUse = nullptr;
if (!pGrid->IsWindowEnabled())
pImageListToUse = pGrid->GetDisabledImageList();

if(pImageListToUse == nullptr)
pImageListToUse = pGrid->GetImageList();

因此,只要您将单元格设置为只读,就像在您的原始代码中一样,它会使用禁用的图像列表图标呈现图标。

以上对我来说没问题。

关于visual-c++ - 如何在 MFC 中启用/禁用 CGridCtrl 上的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16516588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com