1 // TODO: 在此添加额外的初始化代码 2 m_list.SetExtendedStyle( 3 LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); //特别注意最后一个属性。 4 m_list.InsertColumn(0, TEXT("文件名"), 0, 200); 5 m_list2.InsertColumn(0, TEXT("文件名"), 0, 200); 6 static HIMAGELIST nHiml = { 0 };//图标列表 7 static SHFILEINFO nPsfi = { 0 };//文件信息 8 static BOOL nOn = FALSE; 9 if (!nOn) 10 { 11 nOn = !nOn; 12 nHiml = ImageList_Create(32, 32, ILC_COLOR32, 0, 0);//订制图标框架 13 ImageList_SetBkColor(nHiml, m_list.GetBkColor());//设置图标列表底色 14 m_list.SendMessage(LVM_SETIMAGELIST, 1, (LPARAM)nHiml);//设置超级列表显示图标 15 } 16 17 //int nListNum = m_list.GetItemCount(); 18 19 ImageList_SetImageCount(nHiml, 2); 20 21 22 23 // SHFILEINFO nPsfi = { 0 };//文件信息 24 CString a = "D:\\code\\cpp\\ConsoleApplication1\\ConsoleApplication3\\python.exe"; 25 26 DWORD nFileAttributes = SHGFI_SYSICONINDEX | SHGFI_SMALLICON;//获取文件信息 27 SHGetFileInfo(a.GetBuffer(), nFileAttributes, &nPsfi, sizeof(SHFILEINFO), SHGFI_ICON); 28 29 /*HICON hIcon = LoadIcon(NULL, IDI_APPLICATION); 30 HBITMAP a1=ConvertIconToBitmap(nPsfi.hIcon); 31 HICON b=CreateIcon1(a1);*/ 32 //SaveIconAsBitmap(b, TEXT("1.bmp")); 33 34 35 //ImageList_ReplaceIcon(nHiml, 0, nPsfi.hIcon); 36 //DestroyIcon(nPsfi.hIcon); 37 //m_list.InsertItem(0,"3333"); 38 // m_list.SetItem(0, 0, 2, TEXT(""), 0, 0, 0, 0, SRCCOPY); 39 40 /*HDC hDcMem = CreateCompatibleDC(0); 41 HBITMAP hBmpMem = ::CreateCompatibleBitmap(0, 32, 32); 42 ::SelectObject(hDcMem, hBmpMem); 43 CPaintDC dc(this); 44 CBitmap bitmap; 45 dc.DrawIcon(0, 0, nPsfi.hIcon); 46 dc.SelectObject(bitmap); 47 char* buff = new char[0x10000] {}; 48 bitmap.GetBitmapBits(0x10000, buff);*/ 49 50 HDC hdc = ::GetDC(nullptr); 51 52 // 将图标绘制到内存中 53 ICONINFO iconInfo; 54 ::GetIconInfo(nPsfi.hIcon, &iconInfo); 55 56 BITMAP bitmap; 57 GetObject(iconInfo.hbmColor, sizeof(BITMAP), &bitmap); 58 59 HDC memDC = CreateCompatibleDC(hdc); 60 HBITMAP hBitmap = CreateCompatibleBitmap(hdc, bitmap.bmWidth, bitmap.bmHeight); 61 HBITMAP hBitmapOld = (HBITMAP)SelectObject(memDC, hBitmap); 62 63 DrawIconEx(memDC, 0, 0, nPsfi.hIcon, bitmap.bmWidth, bitmap.bmHeight, 0, nullptr, DI_NORMAL); 64 65 BITMAP bitmap1; 66 GetObject(iconInfo.hbmMask, sizeof(BITMAP), &bitmap1); 67 68 HDC memDC1 = CreateCompatibleDC(hdc); 69 HBITMAP hBitmap1 = CreateCompatibleBitmap(hdc, bitmap1.bmWidth, bitmap1.bmHeight); 70 HBITMAP hBitmapOld1 = (HBITMAP)SelectObject(memDC, hBitmap1); 71 72 DrawIconEx(memDC1, 0, 0, nPsfi.hIcon, bitmap1.bmWidth, bitmap1.bmHeight, 0, nullptr, DI_NORMAL); 73 // dcMem.DrawIcon(0, 0, nPsfi.hIcon); 74 //dcMem.DrawIcon(0, 0, (HICON)nPsfi.iIcon); 75 //dcMem.BitBlt(0, 0, 32, 32,dc, 0, 0, SRCCOPY); 76 77 // uint32_t nDataLen = 32 * 32 * 4; 78 // uint8_t* pScrData = new uint8_t[nDataLen]{}; 79 //::GetBitmapBits(hBitmap,nDataLen, pScrData); 80 81 //m_list.InsertItem(0, "3333"); 82 //m_list.SetItem(0, 0, 2, TEXT(""), 0, 0, 0, 0, SRCCOPY); 83 84 //HBITMAP hBitmap1 = CreateCompatibleBitmap(hdc, bitmap.bmWidth, bitmap.bmHeight); 85 //SetBitmapBits(hBitmap1,nDataLen, pScrData); 86 //m_list.SetBkImage(bmpMem1.GetSafeHandle()); 87 //m_list.SetBkImage(, 0, 0, 0); 88 CImage imgTemp; 89 // // CImage是MFC中的类。 90 // imgTemp.Attach(hBitmap); 91 //imgTemp.Save("1.png"); 92 93 imgTemp.Attach(hBitmap1); 94 imgTemp.Save("2.bmp"); 95 imgTemp.Detach(); 96 imgTemp.Attach(hBitmap); 97 imgTemp.Save("3.bmp"); 98 //HANDLE hBitMap = ::LoadBitmap(0, IDB_BITMAP1); 99 //CBitmap bitmap11; 100 CBitmap bitmap11{}; 101 //AFX_MANAGE_STATE(AfxGetStaticModuleState()); 102 //bitmap11.LoadBitmap("MFCAppTest.ico"); 103 bitmap11.Attach(hBitmap); 104 //bitmap11.LoadBitmapA(); 105 //CBitmap cbitmap; 106 //cbitmap.Attach(hBitmap1); 107 //cbitmap.SetBitmapBits(nDataLen, pScrData); 108 //cbitmap.LoadBitmapA(hBitmap1->unused,0); 109 110 //CImageList cimagelist; 111 //cimagelist.Add(hBitmap); 112 113 CBitmap bitmap112{}; 114 bitmap112.Attach(hBitmap1); 115 116 /*imgTemp.e 117 imgTemp.excludeIcon;*/ 118 119 CImageList image_list; 120 121 image_list.Create(32, 32, ILC_COLOR32, 0, 0); 122 // image_list.SetBkColor(m_list.GetBkColor()); 123 //m_list.SetImageList(&image_list, LVSIL_SMALL); 124 image_list.Add(nPsfi.hIcon/*&bitmap11, &bitmap112*/); 125 ImageList_ReplaceIcon(nHiml, 0, ConvertHBitmapToHIcon(hBitmap, hBitmap1)); 126 DestroyIcon(nPsfi.hIcon); 127 //m_list.SetImageList(&image_list, LVSIL_SMALL); 128 //image_list. 129 130 // ImageList_Add(nHiml, hBitmap1,0); 131 132 133 //m_list.InsertColumn(0, &column); 134 // m_list.InsertColumn(1, _T("Text"), LVCFMT_LEFT, 100); 135 int index = m_list.InsertItem(0, _T("111"), 0); 136 //m_list.SetItemText(0, 0, _T("My text")); 137 //m_list.SetItem(0, 0, 2, TEXT(""),0, 0, 0, 0); 138 //LVITEM Itemattr; 139 //Itemattr.iItem = 0; //指定哪一行 140 //Itemattr.mask = LVIF_IMAGE; 141 //Itemattr.iImage = 1; //要把当前图标改成m_Imagelist 中下标为 4 的图标。 142 //m_list.SetItem(&Itemattr); //更改成功。
1 #include <Gdiplus.h> 2 #pragma comment(lib,"Gdiplus.lib") 3 using namespace std; 4 using namespace Gdiplus; 5 HICON ConvertHBitmapToHIcon(HBITMAP hBitmap, HBITMAP hBitmap1) 6 { 7 ICONINFO iconInfo = { 0 }; 8 iconInfo.fIcon = TRUE; 9 iconInfo.hbmMask = hBitmap1; 10 iconInfo.hbmColor = hBitmap; 11 12 return CreateIconIndirect(&iconInfo); 13 }