Click here to Skip to main content
Click here to Skip to main content

A lovely goldfish desktop pet (using alpha-PNG and GDI+)

, 9 Sep 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
Using alpha-PNG and GDI+ technology to implement a desktop pet fish!



This article demonstrates a very lovely goldfish desktop pet, using alpha-PNG and GD+. This cute goldfish can swim from one side to another of your desktop, and tries to escape when you try to catch it using your mouse.


After I posted these articles: A Cool Vista Sidebar Gadget Style CPUInfo Animate Control! (Fixed)A cool Vista-Sidebar-style clock control (4 style)(fixed)! many people asked me how to make a real alpha-transparent form using these controls. Now, this has become a reality! This is a real alpha-transparent form with animation, even in some none-Vista OSs such as XP!

Have fun! And, do not forget to vote! Smile | :)

Using the code

To make a form transparent, use this code to set an alpha-transparent PNG picture as its background:

public void SetBits(Bitmap bitmap)
    if (!haveHandle) return;
    if (!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat) || 
        throw new ApplicationException("The picture must be " + 
                  "32bit picture with alpha channel");
    IntPtr oldBits = IntPtr.Zero;
    IntPtr screenDC = Win32.GetDC(IntPtr.Zero);
    IntPtr hBitmap = IntPtr.Zero;
    IntPtr memDc = Win32.CreateCompatibleDC(screenDC);
        Win32.Point topLoc = new Win32.Point(Left, Top);
        Win32.Size bitMapSize = new Win32.Size(bitmap.Width, bitmap.Height);
        Win32.BLENDFUNCTION blendFunc = new Win32.BLENDFUNCTION();
        Win32.Point srcLoc = new Win32.Point(0, 0);
        hBitmap = bitmap.GetHbitmap(Color.FromArgb(0));
        oldBits = Win32.SelectObject(memDc, hBitmap);
        blendFunc.BlendOp = Win32.AC_SRC_OVER;
        blendFunc.SourceConstantAlpha = 255;
        blendFunc.AlphaFormat = Win32.AC_SRC_ALPHA;
        blendFunc.BlendFlags = 0;
        Win32.UpdateLayeredWindow(Handle, screenDC, ref topLoc, ref bitMapSize, 
                         memDc, ref srcLoc, 0, ref blendFunc, Win32.ULW_ALPHA);
        if (hBitmap != IntPtr.Zero)
            Win32.SelectObject(memDc, oldBits);
        Win32.ReleaseDC(IntPtr.Zero, screenDC);

OK, so simple! Now, you can use a timer control to implement the animation function.

Sorry for my poor English! Please see the source code for more details.

Points of Interest

  • Developing with GDI+ and C# is a very interesting thing!
  • PNG format is very good for drawing alpha pics!
  • For more code samples, please visit my personal web site.



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author


China China
No Biography provided

Comments and Discussions

GeneralMy vote of 5 [modified] PinmemberJJMatthews24-Oct-12 0:40 
Generalnice one Pinmembergeorge pradeep12-Mar-12 0:17 
QuestionC++ version Pinmembermrx_jims6-Mar-12 1:40 
GeneralMy vote of 5 Pinmembermanoj kumar choubey17-Feb-12 0:58 
GeneralMy vote of 5 PinmemberHarith Randika2-Feb-12 18:14 
GeneralMy vote of 5 PinmemberTushar_Patil28-Dec-11 1:09 
QuestionMy Vote of 4 PinmemberClark Kent12330-Nov-11 8:54 
GeneralMy vote of 5 PinmemberMMChandrasekar12-Nov-11 16:56 
GeneralMy vote of 5 Pingroupred_code20085-Sep-11 20:59 
GeneralMy vote of 5 Pinmemberjerviz_761-Feb-11 18:05 
Questionwitch part makes the fish stay on desktop? please tell me.thank you very much. [modified] Pinmemberluangeng21-Sep-10 18:10 
GeneralC++ version to David Wu contribution. [modified] Pinmemberhirohata13-Jul-10 4:22 
GeneralReally cute PinmemberBigdeak10-Jun-10 5:55 
GeneralVery beautiful Pinmemberkuyexing3-Jun-10 23:12 
GeneralGood job!,but it is CPU-bounded application. Pinmembernblijun3-Apr-10 17:22 
GeneralMy vote of 5 PinmemberSmithers-Jones8-Feb-10 1:10 
JokeRe: My vote of 5 PinmemberSmithers-Jones10-Feb-10 3:07 
GeneralTV Logo Pinmemberdivyesh14324-Feb-10 20:45 
Generalc++ code for the same PinmemberMember 35644839-Jan-10 21:14 
Generalgood job Pinmemberfei_cong9-Dec-09 19:43 
GeneralWOW. Pinmemberfrancis321-Sep-09 21:40 
GeneralLovely Pinmemberequipmentloannswguru5-Sep-09 1:08 
GeneralAmazing!!!! Pinmemberoe30e30e303e12-Aug-09 4:51 
QuestionWhere does the goldfish image come from? Pinmembergapman22-Jul-09 20:26 
Generalnice job Pinmemberpkfoo11-May-09 3:29 
General[Message Removed] PinmemberKatekortez25-Oct-08 10:08 
GeneralCool! Made some additions... [modified] PinmemberDon Kackman21-Sep-08 11:26 
Generalhi Pinmembersrk-61921-Sep-08 6:58 
GeneralNice Article PinmemberReese17-Sep-08 7:45 
GeneralNice Work! PinmemberShakeel Iqbal15-Sep-08 19:29 
Generalthanks ! PinmemberBillWoodruff15-Sep-08 18:05 
GeneralWonderful Pinmemberwangwenyu15-Sep-08 15:52 
QuestionExcellent but...! PinmemberVainsofJenna14-Sep-08 1:17 
AnswerRe: Excellent but...! PinmemberDavidwu15-Sep-08 4:49 
GeneralRe: Excellent but...! Pinmemberluangeng21-Sep-10 18:13 
GeneralSize does mater ! PinmemberNicolas MEURET11-Sep-08 4:19 
GeneralRe: Size does matter ! PinmemberRVW19-Sep-08 5:47 
QuestionWhere is the executable or demo? PinmemberIlíon9-Sep-08 6:22 
AnswerRe: Where is the executable or demo? PinmemberDavidwu9-Sep-08 6:43 
GeneralRe: Where is the executable or demo? PinmemberIlíon9-Sep-08 7:54 
Generalnice work! Pinmembergodviser9-Sep-08 4:58 
NewsProblem with website referenced in code Pinmembertlhintoq9-Sep-08 4:47 
GeneralRe: Problem with website referenced in code PinmemberDavidwu9-Sep-08 6:09 
Generalwonderful. 5 star PinmemberTim Aderson9-Sep-08 3:33 
GeneralWow PinmemberJobsFunny9-Sep-08 2:17 
GeneralVery nice job! Pinmemberdomz20089-Sep-08 2:10 
GeneralNice looking fish, but... PinmvpDave Kreskowiak9-Sep-08 1:20 
GeneralRe: Nice looking fish, but... PinmemberJobsFunny9-Sep-08 2:31 
GeneralRe: Nice looking fish, but... PinmemberZagnar9-Sep-08 4:26 
GeneralRe: Nice looking fish, but... PinmemberSchmoo2k9-Sep-08 4:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.1411022.1 | Last Updated 9 Sep 2008
Article Copyright 2008 by Davidwu
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid