我正在尝试在MFC中创建一个包含CListCtrl的对话框,以显示包含相关图像的项目列表。但是,图像显示为空白方块。他们在那里,或者至少,他们应该有一个空间。
我正在尝试从文件加载位图(虽然我也尝试从具有相同效果的资源ID加载)并且我将其存储在CImageList中。然后将该图像列表提供给CListCtrl。我很确定位图正在正确加载,因为我已经设法使用相同的代码在我的项目的其他地方成功加载相同的位图。
我不确定这是否重要,但这是上下文菜单shell扩展的一部分,当用户单击资源管理器上下文菜单中的某个项目时会引发对话框。此外,我对MFC相对较新,如果我错过了一些非常明显的东西,我会道歉。
以下是我在报告视图中初始化CListCtrl的代码,其中包含两列和一个项目,其中第一列中的图像和第二列中的一些文本:
// Get reference to list control
CListCtrl m_list_control = (CListCtrl*)GetDlgItem(IDC_LISTCONTROL);
// Create image list
CImageList image_list;
image_list.Create(32, 32, ILC_COLOR4, 0, 3);
HANDLE hBitMap = ::LoadImage(0, L"E:\pathtomybitmap\bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
CBitmap bitmap;
bitmap.Attach((HBITMAP)hBitMap);
image_list.Add(&bitmap, RGB(255, 0, 255));
// Add the image list to the list control
// (LVSIL_NORMAL didn't seem to show anything at all)
m_list_control->SetImageList(&image_list, LVSIL_SMALL);
// Add columns
LVCOLUMN column;
column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_IMAGE;
column.fmt = LVCFMT_LEFT | LVCFMT_IMAGE;
column.cx = 100;
column.pszText = (LPWSTR)&L"Image";
column.iImage = 0;
m_list_control->InsertColumn(0, &column);
m_list_control->InsertColumn(1, _T("Text"), LVCFMT_LEFT, 100);
int index = m_list_control->InsertItem(0, _T(""), 0);
m_list_control->SetItemText(0, 1, _T("My text"));
知道我做错了吗?
答案 0 :(得分:0)
尝试更改create语句,以便放置的尺寸小于图像尺寸
image_list.Create(31, 31, ILC_COLOR4, 0, 3);
尝试将insert item的mask参数设置为:
InsertItem(LVIF_TEXT | LVIF_IMAGE,...