#include "atlimage.h" Hicon toicon (int cx,int cy) {CImage img;img. Load ("cap.bmp");//Can be jpg,png,gif format picture int w = img. GetWidth (); int h = img. GetHeight (); CDC * dc = Cdc::fromhandle (GETWINDOWDC (GetDesktopWindow ())); CDC MDC;MDC. CreateCompatibleDC (DC); CBitmap bmp;bmp. CreateCompatibleBitmap (Dc,cx,cy); Hbitmap holdbmp = (HBITMAP) MDC. SelectObject (BMP); img. StretchBlt (mdc.m_hdc,0,0,cx,cy,0,0,w,h,srccopy); Hbitmap hbmp = (hbitmap) bmp.m_hobject;iconinfo Iconinfo;memset (&iconinfo,0,sizeof (ICONINFO)); Iconinfo.fIcon = 1; Iconinfo.hbmcolor = Hbmp;iconinfo.hbmmask = Hbmp;iconinfo.xhotspot = 0;iconinfo.yhotspot = 0; Hicon Hicon = Createiconindirect (&iconinfo);//Get Hicon/*if (hicon) {Dc->drawicon (0,0,hicon);} */img. Detach (); Pictdesc Pictdesc;memset (&pictdesc,0,sizeof (PICTDESC));p ictdesc.cbsizeofstruct = sizeof (PICTDESC); Pictdesc.pictype = Pictype_icon;pictdesc.icon.hicon = hicon;ipicture * Ppic = null;int ret = olecreatepictureindirect (&am p;pictdesc,iid_ipicture,1, (lpvoid*) &ppic); Lpstream PStream = 0; CreateStreamOnHGlobal (0,true,&pstream); LONG size = 0;ppic->saveasfile (pstream,true,&size);//This step is very important/////////////////////////////////////////////// Large_integer Li; Li. Highpart = 0; Li. LowPart = 0; Ularge_integer Ulnewpos; Pstream->seek (Li,stream_seek_set,&ulnewpos);///////////////////////////////////////////////handle hFile = CreateFile ("1.ico", generic_all,0,0,create_always,0,0);//Generate ICO file if (hfile) {char * buf = new Char[size];memset (buf,0, size); ULONG nread = 0;pstream->read (Buf,size,&nread); ULONG nwrited = 0; WriteFile (hfile,buf,nread,&nwrited,0); CloseHandle (hfile);} return hicon;}
MFC converts a picture to an ICO file