0

我正在尝试在 MFC 中创建一个包含 CListCtrl 的对话框,以显示带有关联图像的项目列表。但是,图像显示为空白的白色方块。他们在那里,或者至少,他们应该在的地方有一个空间。

我正在尝试从文件加载位图(尽管我也尝试从具有相同效果的资源 ID 加载)并将其存储在 CImageList 中。然后将该图像列表提供给 CListCtrl。我相当确定位图已正确加载,因为我已设法使用相同的代码在项目的其他地方成功加载了相同的位图。

我不确定这是否重要,但这是上下文菜单外壳扩展的一部分,当用户单击资源管理器上下文菜单中的一项时会引发对话框。另外,我对 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"));

知道我做错了什么吗?

4

1 回答 1

0

尝试更改 create 语句,使您放置的大小小于图像大小

image_list.Create(31, 31, ILC_COLOR4, 0, 3);

尝试将插入项的掩码参数设置为:

InsertItem(LVIF_TEXT | LVIF_IMAGE,...
于 2013-03-13T14:54:15.330 回答