- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 CImageList 的 CListCtrl,因此我可以在我的列表中显示 HBITMAP(只是纯色矩形)。我希望能够替换一种颜色。例如,如果我在列表中选择了一些颜色,然后点击替换,颜色就会改变。我使用以下代码:
int nItem = 0;
list<CustomColor>::iterator listCopyIter = pListCopy->begin();
while( nItem<pListCtrl->GetItemCount() && listCopyIter!=pListCopy->end() )
{
if (pListCtrl->GetItemState(nItem, LVIS_SELECTED) == LVIS_SELECTED)
{
HBITMAP hBitmap = CreateBitmap(); //Just some function I use
//IMAGEINFO* pItmData = (IMAGEINFO*)pListCtrl->GetItemData(nItem);
//pItmData->hbmImage = hBitmap;
//pListCtrl->SetItemData(nItem, (DWORD_PTR)pItmData);
pImageList->Replace(nItem, CBitmap::FromHandle(hBitmap), RGB(0,0,0));
*listCopyIter = color;
return;
}
else
{
nItem++;
listCopyIter++;
}
}
其中 pListCopy 是我的 std::list< CustomColor >* ,pListCtrl 我的 CListCtrl* 和 pImageList 我的 ImageList*。
问题是,有时,我的 CListCtrl 不使用与 ImageList 相同的位置(例如,CListCtrl pos 3 中的项目可以使用 ImageList pos 6 中的图像)。在那种情况下,替换的 HBITMAP 是错误的。这就是为什么我尝试注释中的代码:尝试获取 ItemData,将其转换为 IMAGEINFO,更改 HBITMAP 的值,然后将其设置回来。但这给了我一个写访问冲突......
我忽略了什么?有没有办法直接更改 HBITMAP?我知道我总是可以从 ImageList 中获取每个 HBITMAP 值并重新定位它们,以便它们与 CListCtrl 同步,但这不会非常有效且非常难看。
最佳答案
问题是我错误地使用了 GetItemData。 GetItemData 返回 DWORD_PTR(32 位值)。而且我以前从未使用过 SetItemData。现在,在创建项目时,我使用这个:
int nItemPos = pListCtrl->InsertItem(pos, string, imgpos);
pListCtrl->SetItemData(nItemPos, imgpos);
然后在我的其他函数中,我只是将 GetItemData 转换为 int 以检索图像位置,如下所示:
int pItmPos = (int)pListCtrl->GetItemData(nItem);
pImageList->Replace(pItmPos, CBitmap::FromHandle(hBitmap), RGB(0,0,0));
pListCtrl->RedrawItems(nItem, nItem);
关于c++ - CListCtrl和CImageList访问HBITMAP进行修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312761/
我有一个CListCtrl(报告样式),可以在其中清除列表并在特定时间重新填充它。在执行此操作时,我想保持垂直滚动位置。我发现有两种方法看起来很有希望: EnsureVisible() GetScro
如何更改 Clistctrl 项(报 TableView )的文本颜色? 最佳答案 您需要处理 NM_CUSTOMDRAW消息并更改该处理程序中的文本颜色。 有关示例,请参阅 this article
我有一个 CListCtrl,其中包含大约 2500 个不同的元素,其中包含一个 48x48 的图标和文本。 由于数据量大,我将其实现为提供的虚拟列表 ON_NOTIFY(LVN_GETDISPINF
如何保持CListCtrl的水平滚动条位置?我会定期转储并重新填充列表控件的内容,因此无需显式记住旧位置并将其恢复,滚动只返回到左上角。 我早些时候问了一个相关的问题CListCtrl: How to
我有一个显示多个系统的多个数据的 clistctrl。不同系统只能选择 1 个项目。 最初,clistctrl 会加载从不同系统的控件中选择的第一个项目。 但是当我在更改模型中的数据并设置选择后通过单
我在图标 View 中使用 CListCtrl,但它会水平滚动: 1 3 5 7 --> 2 4 6 8 --> 我宁愿它水平滚动: 1 2 3 4 5 6 | | V V 有办法吗? 最佳答案 将设
我正在为 Windows Mobile 创建 MFC 应用程序,但不知道如何为列表控件 (CListCtrl) 启用多选。在属性面板中 Single Selection 设置为 False 但仍然无法
我必须根据 CListViewCtrl 中的值启用/禁用对话框上的按钮。基于所选行。我做到了这一点: NOTIFY_HANDLER(IDC_LIST, LVN_ITEMCHANGED, OnMyLis
我需要在 MFC 中创建一个 ListControl,每行具有不同的列数。我该怎么做? 最佳答案 那是不可能的。解决方法很简单,只是不要在子项中放置任何文本。 关于c++ - 自定义 CListCtr
如何使用标题文本获取项目的索引号?我正在使用 MFC 的 CListCtrl 类。我有项目的标题文本,我可以获取该项目的索引然后更新其文本吗?如果您能提供示例,将会很有帮助。 最佳答案 CListCt
CMyListCtrl 处于虚拟数据模式和所有者绘制。当控件需要数据时,将发送一个 LVN_GETDISPINFO 通知。 下面的代码工作正常,除了它多次显示每一行。 文档说如果我设置项目的掩码的 L
有一个CListCtrl带有SetExtendedStyle (LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT),单选是false。我希望能够用鼠标选择多行。从空白区域
我有一个包含多个列的 CListCtrl,所有列都可以作为排序依据。我想添加 up 和 down 图标,以便清楚当前按哪一列排序以及朝哪个方向排序;很像 Windows 资源管理器。我的想法是向列名添
我正在使用 CListCtrl 控件在我的 MFC 应用程序中显示信息。目前,我在 SetExtendedStyle 中设置了 LVS_EX_CHECKBOXES,因此控件中的所有行旁边都有一个复选框
我目前有 NM_CUSTOMDRAW 消息调用一个函数来在报告模式下为 listctrl 的行着色。我可以检测何时选择了一行并自己为其着色,但是不会为选定的单元格调用此方法,因此我无法为该单元格着色。
谁能帮我知道,CListCtrl::GetItemData() 在 MFC、VC++ 中有什么用? 我查阅了 MSDN 描述,但不够清楚。 如果有人可以提供简短的解释和一些示例,那就太好了并且会有很大
如何使 CListCtrl 自动调整其列的宽度?通常,当列表中的项目太长时,后端会从 View 中消失,用户必须手动调整相应列的宽度。有没有办法通过代码来做到这一点? 最佳答案 自动调整列大小很容易:
我想将 CListCtrl 控件的任何单元格的字体更改为粗体。任何人都可以告诉如何为 CList Ctrl 做到这一点。 我已经为 CTreeCtrl 做了这个,就像这样 pTC->SetItemSt
我想为列表的任何列使用 CListCtrl.EditLabel()。我该如何实现这样的功能? 最佳答案 这是可行的,但它确实需要大量填充鼠标点击和焦点事件。 简而言之,您捕获鼠标左键按下消息并将其转换
我想将特定列的背景颜色更改为对话框的颜色(灰色)。我怎样才能实现它? void CUcsOpTerminalDlg::OnCustomdrawFeatureList(NMHDR *pNMHDR, LR
我是一名优秀的程序员,十分优秀!