Solved

Save hicon to a .ico file

Posted on 2002-03-03
10
2,878 Views
Last Modified: 2013-12-03
Q: How to save an HICON to a .ico file

VC6, Needs to work on Win 95 and up. Can be MFC or Win API.

Ideally work for whatever the hicon contains, but failing that a version which works with 32X32 16 color icons would do.



BOOL MySaveIcon( hIcon, LPCSTR lpszFile )
{
// <-------what goes here
}


int main( int argc, char * argv[] )
{
HICON hIcon ;
// etc. etc. lots of stuff setting up hIcon

MySaveIcon( hIcon "c:\\example.ico" ) ;
}
0
Comment
Question by:Answers2000
  • 3
  • 3
  • 2
  • +2
10 Comments
 
LVL 30

Accepted Solution

by:
Axter earned 100 total points
Comment Utility
HANDLE hIcon; //handle to Icon
int nHandleSize = ::GlobalSize(hIcon);
LPSTR lpIcon = ::GlobalLock(hIcon);

//simply write nHandleSize bytes of the data in lpIcon to
// the file on the disk. Don't forget to do

::GlobalUnlock(hIcon);

0
 
LVL 6

Expert Comment

by:MichaelS
Comment Utility
0
 
LVL 86

Expert Comment

by:jkr
Comment Utility
0
 
LVL 86

Expert Comment

by:jkr
Comment Utility
Hum, that's actually pretty much what Axter described...
0
 
LVL 30

Expert Comment

by:Axter
Comment Utility
jkr,
It should be.
I copied it off one of your previous answers. :-) :-O
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 8

Author Comment

by:Answers2000
Comment Utility
Michael, nope, it needs to be ico format

Axter/JKR - if this work'd it be great - funny that I get 0 back for nHandleSize (in nAxter's ver), I'll go back and check the rest of the stuff to figure out if it's me or this method simply doesn't work in win32...  btw I'm testing on Win98 at the moment, but it needs to work on everything from 95 and NT4 upwards.

In case you're wondering, I'm adding a mini-icon editor to my prog (MFC) as a "hobby" (i.e. not much time to work on this) in between doing the real work on it. The darn thing only needs to work on 32X32 16 color icons, and this one last thing to solve.

0
 
LVL 86

Expert Comment

by:jkr
Comment Utility
>>It should be.
>>I copied it off one of your previous answers. :-) :-O

It'd better be one graded "A" :o)
0
 
LVL 30

Expert Comment

by:Axter
Comment Utility
Answers2000,
Can you post the code you have in the relevant section?
0
 
LVL 8

Author Comment

by:Answers2000
Comment Utility
Sorry for delay

I'm sure your answer is right.

The test program I have uses all this library of code (not by me!) to make the icon, and this is when I couldn't make it save.   The bug seems to be in the library, which I don't have time to debug - so I've shelved this hobby project for the time being.
0
 

Expert Comment

by:eliakaris
Comment Utility
I am trying to use this code in c# using .NET interop and this does not seem to be working.

I am using the Handle property of the icon.
All I receive from the GlobalSize call is zero...

here are my P/Invokes...
[DllImport("kernel32.dll")]
static extern bool GlobalUnlock(IntPtr hMem);

[DllImport("kernel32.dll")]
static extern uint GlobalSize(IntPtr hMem);

[DllImport("kernel32.dll")]
static extern IntPtr GlobalLock(IntPtr hMem);

Doesnt work with LocalLock either.

Elia
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This article shows how to make a Windows 7 gadget that accepts files dropped from the Windows Explorer.  It also illustrates how to give your gadget a non-rectangular shape and how to add some nifty visual effects to text displayed in a your gadget.…
What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now