图标

发布时间 2023-05-21 23:27:09作者: yhbb123
  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 }