[ANN] ÜberIcon v1.0 Final Release by Punk! Software

From the folks who brought you RocketDock... this is a pretty nifty app, I just tried it out for the first time yesterday.. Amazing work Punk! Software :)

ÜberIcon

ÜberIcon creates a more customizable atmosphere on your desktop by extending the Windows operating system to include new effects for your icons and folders. It is completely plugin based allowing the user to have control over the look and feel of their system. The program's name translates to "OverIcon" which we feel is perfect for a program that adds effects on top of the icons in your system.

Features:

* Extrememly efficient

* Plugin-based for complete customization

* Integrates with your Desktop, Explorer and most software

* Simple plugin SDK for creating new effects

* Included Plugins:

o iZoom

o iBounce

Supported Languages

* Bulgarian by theTAHK

* Czech by FutureMillennium

* Dutch by surfer

* French by Martin

* German by stenosis

* Italian by LazyBoy

* Japanese by keng0

* Norwegian by Truls 'Ozzy' Osmundsen

* Russian by SacRat

* Spanish by Edmundo Alvarez

* Swedish by P@itor

* Traditional Chinese by Nelson

Visit Here:

http://www.punksoftware.com/index.php?opti...d=78&Itemid=174

#308106

nice find, firecracker. pretty neat.

::goes searching for plugins::

#308108

if you find any more interesting plugins please let me know ;)

#308113

uhm thats neither related with me nor with my skills, but i must agree one... punks rawk! :D

#308150

Another EYE-POPPING Wonder to Behold from a talented and imaginative effort in this. Sweet as a peach and excellent effect!

#308157

Nice tool, but can someone notify these people that there's a leak in the effects?

				HDC BufferDC=CreateCompatibleDC(0);

HBITMAP BufferBM;

TempIconBitmap->GetHBITMAP(0,&BufferBM);

SelectObject(BufferDC,BufferBM);



SIZE BufferSize={TempIconBitmap->GetWidth(),TempIconBitmap->GetHeight()};

POINT SrcOrg={0,0};

BLENDFUNCTION Blend;

Blend.BlendOp=AC_SRC_OVER;

Blend.BlendFlags=0;

Blend.SourceConstantAlpha=255;//BYTE(255*alpha);

Blend.AlphaFormat=AC_SRC_ALPHA;



UpdateLayeredWindow(hWnd,0,&WindowOrg,&BufferSize,BufferDC,&SrcOrg,RGB(0,0,0),&Blend,ULW_ALPHA);



DeleteDC(BufferDC);

DeleteObject(BufferBM);

The old bitmap that was selected in the dc should be saved and selected back into it before deleting it.

#308164

@AndreasV

I believe you are incorrect about the leak. You see, there is no bitmap previously selected into the device context.

If you'd like to report a bug, please take the time to sign up on punksoftware.com and submit it officially, this way we can correct it without having to stumble onto a random forum post in some far-away distant forum :)

Thank you

#308189

You see, there is no bitmap previously selected into the device context.

Wrong. Try to see what SelectObject(dc, HBITMAP); returns. If the dc would not contain a bitmap already, NULL should be returned.

The general pattern is

// initialisation

HDC dc = CreateCompatibleDC(NULL);

HBITMAP ****itmap = CreateCompatibleBitmap(NULL, width, height);

HBITMAP oldBitmap = (HBITMAP) SelectObject(dc, (HGDIOBJ) ****itmap);



// rendering



// freeing up

SelectObject(dc, (HGDIOBJ) oldBitmap);

DeleteObject((HGDIOBJ)****itmap);

DeleteDC(dc);

edit: ****ing word filter. ****itmap should read: new Bitmap (without the space)

#308191

I'm sorry, but you're still mistaken... the number you are retrieving from SelectObject() is the handle to a stock bitmap object to prevent people from accidently using the DC before selecting a bitmap onto it and causing a crash.

From MSDN:

When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high.

If you'll notice, this value is ALWAYS the same, and will not cause a leak...

From an example on MSDN:

hdcCompatible = CreateCompatibleDC(hdcScreen); 



// Create a compatible bitmap for hdcScreen.



hbmScreen = CreateCompatibleBitmap(hdcScreen,

GetDeviceCaps(hdcScreen, HORZRES),

GetDeviceCaps(hdcScreen, VERTRES));



if (hbmScreen == 0)

errhandler("hbmScreen", hwnd);



// Select the bitmaps into the compatible DC.



if (!SelectObject(hdcCompatible, hbmScreen))

errhandler("Compatible Bitmap Selection", hwnd);

Note the last two lines in this exerpt...

I know this is a very common misconception with the DC and DDB api's and in most situations what you are saying is good practice, but is in no way necessary here.

#308203

the number you are retrieving from SelectObject() is the handle to a stock bitmap object to prevent people from accidently using the DC before selecting a bitmap onto it and causing a crash.

It's a handle. The fact that's it's a stock bitmap isn't relevant, because this might change over time (well, because of backward compatibility it probably never will). You are relying on a leaky abstraction, which is, bad practice at least.

Anyways, the app is really nice, been playing with it for a while now :)

#308213

Thank you AndreasV, I'm glad you like it. I'm not relying on a leaky abstraction, I'm simply following the well-documented api, and example microsoft code, which I feel is good practice :P

Microsoft specifies how to clean up the DC, and they don't mention selecting the 1x1 default bitmap..

When you no longer need the memory DC, call the DeleteDC function.

***edit: ops, i pasted the wrong thing...silly me

Anyways, thank you for pointing it out to me. If you find anything else or would like to continue this conversation, it's much easier for me to keep track of on the punksoftware forums.

@everyone

Thanks for all of your kind comments, they are very much appritiated :D

Skunkie signing off :)

#308215