関連する画像を含むアイテムのリストを表示する CListCtrl を含むダイアログを MFC で作成しようとしています。ただし、画像は空白の白い正方形として表示されています。彼らはそこにいる、あるいは少なくとも、彼らがいるべき場所がある。
ファイルからビットマップを読み込もうとしていますが (同じ効果を持つリソース ID から読み込もうとしましたが)、それを CImageList に保存しています。次に、このイメージ リストが CListCtrl に渡されます。同じコードを使用してプロジェクトの他の場所で同じビットマップを正常にロードできたので、ビットマップが正しくロードされていることはかなり確信しています。
これが重要かどうかはわかりませんが、これはコンテキスト メニューのシェル拡張機能の一部であり、ユーザーがエクスプローラーのコンテキスト メニューの項目の 1 つをクリックすると、ダイアログが表示されます。また、私は MFC に比較的慣れていないので、本当に明らかなことを見逃していたら申し訳ありません。
以下は、レポート ビューで CListCtrl を初期化するための私のコードで、2 つの列と 1 つの項目があり、最初の列に画像があり、2 番目の列にテキストが含まれている必要があります。
// 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"));
私が間違っていることは何か分かりますか?