usingSystem;usingSystem.ComponentModel;// CancelEventArgsを使用するためusingSystem.Drawing;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;staticclassMyIconUtil{staticclassNativeMethods{[DllImport("user32.dll",CharSet=CharSet.Auto)]publicexternstaticboolDestroyIcon(IntPtrhandle);}publicstaticIconCreateIcon(byte[,]iconDot){Bitmapbmp=newBitmap(iconDot.GetLength(0),iconDot.GetLength(1));using(Graphicsg=Graphics.FromImage(bmp)){g.Clear(Color.White);}for(inty=0;y<iconDot.GetLength(1);y++){for(intx=0;x<iconDot.GetLength(0);x++){if(iconDot[x,y]!=0){bmp.SetPixel(x,y,Color.Black);}}}IntPtrHicon=bmp.GetHicon();returnIcon.FromHandle(Hicon);}publicstaticvoidDestroyIcon(Iconicon){NativeMethods.DestroyIcon(icon.Handle);}}classTaskTrayTest{staticreadonlyintW=16;staticreadonlyintH=16;NotifyIcontrayIcon;byte[,]iconDot;// each byte value is 0 or 1System.Windows.Forms.Timertimer;TaskTrayTest(){trayIcon=newNotifyIcon();iconDot=newbyte[W,H];ResetBoardData();IcontmpIcon=MyIconUtil.CreateIcon(iconDot);trayIcon.Icon=tmpIcon;trayIcon.Visible=true;trayIcon.Text="LifeGame";varmenu=newContextMenuStrip();varmenuItem=newToolStripMenuItem();menu.Items.AddRange(newToolStripMenuItem[]{newToolStripMenuItem("E&xit",null,(s,e)=>{timer.Stop();Application.Exit();},"Exit")});trayIcon.Click+=(s,e)=>{ResetBoardData();};trayIcon.ContextMenuStrip=menu;timer=newSystem.Windows.Forms.Timer();timer.Interval=200;//mstimer.Tick+=(sender,e)=>{UpdateBoard();};timer.Start();}voidResetBoardData(){varrand=newSystem.Random((int)System.Environment.TickCount);for(inty=0;y<H;y++){for(intx=0;x<W;x++){iconDot[x,y]=(byte)(rand.Next()%2);}}}voidUpdateBoard(){vara=iconDot;// oldvarb=newbyte[W,H];// newfor(inty=0;y<H;y++){intym=(y-1+H)%H;intyp=(y+1)%H;for(intx=0;x<W;x++){intxm=(x-1+W)%W;intxp=(x+1)%W;intc=a[xm,ym]+a[x,ym]+a[xp,ym]+a[xm,y]+a[xp,y]+a[xm,yp]+a[x,yp]+a[xp,yp];if(a[x,y]==0){b[x,y]=(byte)((c==3)?1:0);}else{b[x,y]=(byte)((c==2||c==3)?1:0);}}}iconDot=b;IconoldIcon=trayIcon.Icon;trayIcon.Icon=MyIconUtil.CreateIcon(iconDot);MyIconUtil.DestroyIcon(oldIcon);}[STAThread]staticvoidMain(string[]args){Console.WriteLine("Main() Start.");newTaskTrayTest();Console.WriteLine("Instance is created.");Application.Run();Console.WriteLine("Main() End.");}}
↧
C# - タスクトレイアイコンでライフゲームやってみた
↧