<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>その他</title><link>http://blogs.wankuma.com/strangeworker/category/2083.aspx</link><description>その他関連</description><managingEditor>strangeworker@wankuma.com</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>.NETFrameworkから離れて</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/07/12/177409.aspx</link><pubDate>Sun, 12 Jul 2009 17:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/07/12/177409.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/177409.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/07/12/177409.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/177409.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/177409.aspx</trackback:ping><description>&lt;P&gt;PHP+MySQLでサイト構築をしました。&lt;/P&gt;
&lt;P&gt;自分のやりたいことしかやってないので使い勝手は微妙ですが、&lt;/P&gt;
&lt;P&gt;家計簿をつけるのがめんどくさいという方はぜひ。&lt;/P&gt;
&lt;P&gt;ちなみに主にauの携帯電話用なので、アカウント作成は携帯から行なってください。&lt;/P&gt;
&lt;P&gt;ぺこり。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallets.s5.pf-x.net/"&gt;http://wallets.s5.pf-x.net/&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/177409.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>コマンドプロンプトで動くアナログ時計を作る　その2</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169528.aspx</link><pubDate>Wed, 11 Mar 2009 22:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169528.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/169528.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169528.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/169528.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/169528.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://strangeworker.wankuma.com/site/special/2008/03/2_1372C/image.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="242" alt="image" src="http://strangeworker.wankuma.com/site/special/2008/03/2_1372C/image_thumb.png" width="233" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;見た目じゃない部分を修正したので、見た目は変わりません。&lt;/p&gt; &lt;p&gt;修正内容の肝は一つ前のブログのコメントでご指摘いただいた、Graphicsの開放と、&lt;/p&gt; &lt;p&gt;スレッドの制御部分です。以下に修正版を載せます。&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing.Drawing2D;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Threading;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Security.AccessControl;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ConsoleApplication93&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; MAX_SIZE = 110;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; DRAW_START = 40;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; DIGITAL_TIME_TOP = 65;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; FONT_SIZE = 15;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; LONG_SCALE = 40;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; SHORT_SCALE = 35;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; SCALE_LENGTH = 45;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; CIRCLE_WIDTH = 3;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; WINDOW_HEIGHT = 10;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; WINDOW_WIDTH = 24;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FONT_NAME = &lt;span class="str"&gt;"ＭＳ ゴシック"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TIME_FORMAT = &lt;span class="str"&gt;"HH:mm:ss"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// メイン&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="args"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// ウィンドウサイズを適切に設定&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            Console.WindowHeight = WINDOW_HEIGHT;&lt;/pre&gt;&lt;pre&gt;            Console.WindowWidth = WINDOW_WIDTH;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// 時計描画スレッド&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            var manualReset = &lt;span class="kwrd"&gt;new&lt;/span&gt; ManualResetEvent(&lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            var thread = &lt;span class="kwrd"&gt;new&lt;/span&gt; Thread(DrawClock);&lt;/pre&gt;&lt;pre class="alt"&gt;            thread.Start(manualReset);&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;while&lt;/span&gt; (&lt;span class="kwrd"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                Console.Write(&lt;span class="str"&gt;"終了しますか？[Y/N] : "&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="str"&gt;"Y"&lt;/span&gt; == Console.ReadLine().ToUpper())&lt;/pre&gt;&lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;pre&gt;                    manualReset.Set();&lt;/pre&gt;&lt;pre class="alt"&gt;                    thread.Join();&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;                }&lt;/pre&gt;&lt;pre&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;pre&gt;                    Console.CursorTop = 0;&lt;/pre&gt;&lt;pre class="alt"&gt;                    Console.Clear();&lt;/pre&gt;&lt;pre&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 時計描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawClock(&lt;span class="kwrd"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="rem"&gt;// コンソールのウィンドウハンドルから描画クラス取得&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            var process = Process.GetProcesses().ToList().Where(p =&amp;gt; p.MainWindowTitle == Console.Title).SingleOrDefault();&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var g = Graphics.FromHwnd(process.MainWindowHandle))&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="rem"&gt;// チラつき防止のためのバッファ領域&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;                var msGothicFont = &lt;span class="kwrd"&gt;new&lt;/span&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/pre&gt;&lt;pre class="alt"&gt;                var fontSize = g.MeasureString(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, msGothicFont);&lt;/pre&gt;&lt;pre&gt;                var bmp = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(MAX_SIZE + CIRCLE_WIDTH, MAX_SIZE + CIRCLE_WIDTH + DIGITAL_TIME_TOP + Convert.ToInt32(fontSize.Height));&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;using&lt;/span&gt; (var gBuffer = Graphics.FromImage(bmp))&lt;/pre&gt;&lt;pre&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;                    &lt;span class="rem"&gt;// 座標系の原点を変える&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;                    gBuffer.TranslateTransform((MAX_SIZE + CIRCLE_WIDTH) / 2, (MAX_SIZE + CIRCLE_WIDTH) / 2, MatrixOrder.Append);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                    var center = &lt;span class="kwrd"&gt;new&lt;/span&gt; Point(0, 0);&lt;/pre&gt;&lt;pre class="alt"&gt;                    var r = MAX_SIZE / 2;&lt;/pre&gt;&lt;pre&gt;                    var manualReset = obj &lt;span class="kwrd"&gt;as&lt;/span&gt; WaitHandle; &lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="kwrd"&gt;while&lt;/span&gt; (!manualReset.WaitOne(1000))&lt;/pre&gt;&lt;pre class="alt"&gt;                    {&lt;/pre&gt;&lt;pre&gt;                        var time = DateTime.Now;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                        &lt;span class="rem"&gt;// 時計の部品を描画する&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                        DrawClockBase(gBuffer, time);&lt;/pre&gt;&lt;pre&gt;                        DrawSecondLine(gBuffer, time, r, center);&lt;/pre&gt;&lt;pre class="alt"&gt;                        DrawMinuteLine(gBuffer, time, r, center);&lt;/pre&gt;&lt;pre&gt;                        DrawHourLine(gBuffer, time, r, center);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                        &lt;span class="rem"&gt;// 実描画&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                        g.DrawImage(bmp, &lt;span class="kwrd"&gt;new&lt;/span&gt; Point(DRAW_START, DRAW_START));&lt;/pre&gt;&lt;pre&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;                    manualReset.Close();&lt;/pre&gt;&lt;pre&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 秒針描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="time"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="r"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="center"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawSecondLine(Graphics gBuffer, DateTime time, &lt;span class="kwrd"&gt;int&lt;/span&gt; r, Point center)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var bluePen = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pen(Color.AliceBlue, 1))&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                var secAng = 2.0f * Math.PI * time.Second / 60.0f;&lt;/pre&gt;&lt;pre&gt;                var secHandLength = Convert.ToInt32(0.9f * r);&lt;/pre&gt;&lt;pre class="alt"&gt;                var secHand = &lt;span class="kwrd"&gt;new&lt;/span&gt; Point(Convert.ToInt32(secHandLength * Math.Sin(secAng)), Convert.ToInt32(-secHandLength * Math.Cos(secAng)));&lt;/pre&gt;&lt;pre&gt;                gBuffer.DrawLine(bluePen, center, secHand);&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 分針描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="time"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="r"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="center"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawMinuteLine(Graphics gBuffer, DateTime time, &lt;span class="kwrd"&gt;int&lt;/span&gt; r, Point center)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var greenPen = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pen(Color.LightGreen, 2))&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                var minAng = 2.0f * Math.PI * (time.Minute + time.Second / 60.0f) / 60.0f;&lt;/pre&gt;&lt;pre&gt;                var minHandLength = Convert.ToInt32(0.7f * r);&lt;/pre&gt;&lt;pre class="alt"&gt;                var minHand = &lt;span class="kwrd"&gt;new&lt;/span&gt; Point(Convert.ToInt32(minHandLength * Math.Sin(minAng)), Convert.ToInt32(-minHandLength * Math.Cos(minAng)));&lt;/pre&gt;&lt;pre&gt;                gBuffer.DrawLine(greenPen, center, minHand);&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 時針描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="time"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="r"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="center"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawHourLine(Graphics gBuffer, DateTime time, &lt;span class="kwrd"&gt;int&lt;/span&gt; r, Point center)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var redPen = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pen(Color.LightPink, 2))&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                var hourAng = 2.0f * Math.PI * (time.Hour + time.Minute / 60.0f) / 12.0f;&lt;/pre&gt;&lt;pre&gt;                var hourHandLength = Convert.ToInt32(0.5f * r);&lt;/pre&gt;&lt;pre class="alt"&gt;                var hourHand = &lt;span class="kwrd"&gt;new&lt;/span&gt; Point(Convert.ToInt32(hourHandLength * Math.Sin(hourAng)), Convert.ToInt32(-hourHandLength * Math.Cos(hourAng)));&lt;/pre&gt;&lt;pre&gt;                gBuffer.DrawLine(redPen, center, hourHand);&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 時計の針以外を描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="g"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawClockBase(Graphics gBuffer, DateTime time)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// 外円&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            DrawCircle(gBuffer);&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="rem"&gt;// 目盛り&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            DrawScale(gBuffer);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// デジタル時計&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            DrawDigitalTime(gBuffer, time);&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 外円描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawCircle(Graphics gBuffer)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var circlePen = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pen(Color.AliceBlue, CIRCLE_WIDTH))&lt;/pre&gt;&lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;pre&gt;                gBuffer.Clear(Color.Black);&lt;/pre&gt;&lt;pre class="alt"&gt;                gBuffer.FillEllipse(Brushes.AliceBlue, -2.5f, -2.5f, 5f, 5f);&lt;/pre&gt;&lt;pre&gt;                gBuffer.DrawEllipse(circlePen, -MAX_SIZE / 2, -MAX_SIZE / 2, MAX_SIZE, MAX_SIZE);&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// 目盛り描画&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawScale(Graphics gBuffer)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            var msGothicFont = &lt;span class="kwrd"&gt;new&lt;/span&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (var scalePen = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pen(Color.Aqua, 1))&lt;/pre&gt;&lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;pre&gt;                Enumerable.Range(1, 60).ToList().ForEach(i =&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;pre&gt;                    var angle = i * 6 * (Math.PI / 180);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="rem"&gt;// 見易いように5目盛りごとに長さを変える&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                    var length = 0 == i % 5 ? SHORT_SCALE : LONG_SCALE;&lt;/pre&gt;&lt;pre&gt;                    var x = Convert.ToInt32(Math.Sin(angle) * length);&lt;/pre&gt;&lt;pre class="alt"&gt;                    var y = -Convert.ToInt32(Math.Cos(angle) * length);&lt;/pre&gt;&lt;pre&gt;                    var x1 = Convert.ToInt32(Math.Sin(angle) * SCALE_LENGTH);&lt;/pre&gt;&lt;pre class="alt"&gt;                    var y1 = -Convert.ToInt32(Math.Cos(angle) * SCALE_LENGTH);&lt;/pre&gt;&lt;pre&gt;                    gBuffer.DrawLine(scalePen, x, y, x1, y1);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="rem"&gt;// 5目盛りごとに数字を表示&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (0 == i % 5)&lt;/pre&gt;&lt;pre&gt;                    {&lt;/pre&gt;&lt;pre class="alt"&gt;                        var timeText = (i / 5).ToString();&lt;/pre&gt;&lt;pre&gt;                        var fontSize = gBuffer.MeasureString(timeText, msGothicFont);&lt;/pre&gt;&lt;pre class="alt"&gt;                        gBuffer.DrawString(timeText, msGothicFont, Brushes.White, &lt;span class="kwrd"&gt;new&lt;/span&gt; PointF(x1 - fontSize.Width / 2, y1 - fontSize.Height / 2));&lt;/pre&gt;&lt;pre&gt;                    }&lt;/pre&gt;&lt;pre class="alt"&gt;                });&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// デジタル時計描画&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="gBuffer"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name="time"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DrawDigitalTime(Graphics gBuffer, DateTime time)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            var msGothicFont = &lt;span class="kwrd"&gt;new&lt;/span&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/pre&gt;&lt;pre class="alt"&gt;            var textSize = gBuffer.MeasureString(TIME_FORMAT, msGothicFont);&lt;/pre&gt;&lt;pre&gt;            gBuffer.DrawString(time.ToString(TIME_FORMAT), msGothicFont, Brushes.White, &lt;span class="kwrd"&gt;new&lt;/span&gt; PointF(-textSize.Width / 2, DIGITAL_TIME_TOP));&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;pre&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;以上です。とっちゃんさんありがとうございました。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/169528.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>コマンドプロンプトで動くアナログ時計を作る</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169490.aspx</link><pubDate>Wed, 11 Mar 2009 02:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169490.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/169490.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/03/11/169490.aspx#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/169490.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/169490.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://strangeworker.wankuma.com/site/special/2008/03/e8a693f4bd4f_1BF9/image.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=242 alt=image src="http://strangeworker.wankuma.com/site/special/2008/03/e8a693f4bd4f_1BF9/image_thumb.png" width=233 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;今までコマンドプロンプトでは描画処理をやったことがなかったので、試しに作ってみました。両方同じ動きをしますが、まずはソースを2種類載せます。 
&lt;P&gt;&lt;STRONG&gt;TimerCallbackを使用したバージョン.cs&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Collections.Generic;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Linq;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Text;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Threading;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Diagnostics;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Drawing;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Drawing.Drawing2D;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; ConsoleApplication88&lt;/PRE&gt;&lt;PRE class=alt&gt;{&lt;/PRE&gt;&lt;PRE&gt;    &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Program&lt;/PRE&gt;&lt;PRE class=alt&gt;    {&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Main(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] args)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// ウィンドウサイズを適切に設定&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            Console.WindowHeight = 10;&lt;/PRE&gt;&lt;PRE&gt;            Console.WindowWidth = 24;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 時計描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var timer = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Timer(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; TimerCallback(DrawClock), &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;, 0, 1000);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                Console.Write(&lt;SPAN class=str&gt;"終了しますか？[Y/N] : "&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=rem&gt;// 終了待ち&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=str&gt;"Y"&lt;/SPAN&gt; == Console.ReadLine().ToUpper())&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    timer.Dispose();&lt;/PRE&gt;&lt;PRE class=alt&gt;                    &lt;SPAN class=kwrd&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;                }&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;                {&lt;/PRE&gt;&lt;PRE class=alt&gt;                    Console.CursorTop = 0;&lt;/PRE&gt;&lt;PRE&gt;                    Console.Clear();&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// コンソールのウィンドウプロセスを取得&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; Process GetConsoleProcess()&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Process p &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; Process.GetProcesses())&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (p.MainWindowTitle == Console.Title)&lt;/PRE&gt;&lt;PRE class=alt&gt;                    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; p;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// 時計描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawClock(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; state)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// コンソールのウィンドウハンドルから描画クラス取得&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var g = Graphics.FromHwnd(GetConsoleProcess().MainWindowHandle);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// チラつき防止のためのバッファ領域&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            var bmp = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Bitmap(150, 150);&lt;/PRE&gt;&lt;PRE class=alt&gt;            var gBuffer = Graphics.FromImage(bmp);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// 座標系の原点を変える&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            gBuffer.TranslateTransform(110 / 2, 110 / 2, MatrixOrder.Append);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            var center = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(0, 0);&lt;/PRE&gt;&lt;PRE class=alt&gt;            var time = DateTime.Now;&lt;/PRE&gt;&lt;PRE&gt;            var r = Math.Min(110, 110) / 2;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 時計の部品を描画する&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            DrawClockBase(gBuffer, time);&lt;/PRE&gt;&lt;PRE&gt;            DrawSecondLine(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE class=alt&gt;            DrawMinuteLine(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE&gt;            DrawHour(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 実描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            g.DrawImage(bmp, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(40, 30));&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 秒針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawSecondLine(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var bluePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.AliceBlue, 1))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var secAng = 2.0f * Math.PI * time.Second / 60.0f;&lt;/PRE&gt;&lt;PRE&gt;                var secHandLength = Convert.ToInt32(0.9f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var secHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(secHandLength * Math.Sin(secAng)), Convert.ToInt32(-secHandLength * Math.Cos(secAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(bluePen, center, secHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 分針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawMinuteLine(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var greenPen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.LightGreen, 2))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var minAng = 2.0f * Math.PI * (time.Minute + time.Second / 60.0f) / 60.0f;&lt;/PRE&gt;&lt;PRE&gt;                var minHandLength = Convert.ToInt32(0.7f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var minHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(minHandLength * Math.Sin(minAng)), Convert.ToInt32(-minHandLength * Math.Cos(minAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(greenPen, center, minHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 時針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawHour(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var redPen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.LightPink, 2))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var hourAng = 2.0f * Math.PI * (time.Hour + time.Minute / 60.0f) / 12.0f;&lt;/PRE&gt;&lt;PRE&gt;                var hourHandLength = Convert.ToInt32(0.5f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var hourHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(hourHandLength * Math.Sin(hourAng)), Convert.ToInt32(-hourHandLength * Math.Cos(hourAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(redPen, center, hourHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 時計の針以外を描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="g"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawClockBase(Graphics gBuffer, DateTime time)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 円&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var circlePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.AliceBlue, 2))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                gBuffer.Clear(Color.Black);&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.FillEllipse(Brushes.AliceBlue, -2.5f, -2.5f, 5f, 5f);&lt;/PRE&gt;&lt;PRE class=alt&gt;                gBuffer.DrawEllipse(circlePen, -110 / 2, -110 / 2, 110, 110);&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// フォント指定&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var msGothicFont = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Font(&lt;SPAN class=str&gt;"ＭＳ ゴシック"&lt;/SPAN&gt;, 15, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// 目盛り&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var scalePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.Aqua, 1))&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                Enumerable.Range(1, 60).ToList().ForEach(i =&amp;gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    var k = i * 6 * (Math.PI / 180);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=rem&gt;// 見易いように5目盛りごとに長さを変える&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var length = 0 == i % 5 ? 35 : 40;&lt;/PRE&gt;&lt;PRE&gt;                    var x = Convert.ToInt32(Math.Sin(k) * length);&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var y = -Convert.ToInt32(Math.Cos(k) * length);&lt;/PRE&gt;&lt;PRE&gt;                    var x1 = Convert.ToInt32(Math.Sin(k) * 45);&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var y1 = -Convert.ToInt32(Math.Cos(k) * 45);&lt;/PRE&gt;&lt;PRE&gt;                    gBuffer.DrawLine(scalePen, x, y, x1, y1);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=rem&gt;// 5目盛りごとに数字を表示&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (0 == i % 5)&lt;/PRE&gt;&lt;PRE&gt;                    {&lt;/PRE&gt;&lt;PRE class=alt&gt;                        var timeText = (i / 5).ToString();&lt;/PRE&gt;&lt;PRE&gt;                        var fontSize = gBuffer.MeasureString(timeText, msGothicFont);&lt;/PRE&gt;&lt;PRE class=alt&gt;                        gBuffer.DrawString(timeText, msGothicFont, Brushes.White, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PointF(x1 - fontSize.Width / 2, y1 - fontSize.Height / 2));&lt;/PRE&gt;&lt;PRE&gt;                    }&lt;/PRE&gt;&lt;PRE class=alt&gt;                });&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;            var textSize = gBuffer.MeasureString(&lt;SPAN class=str&gt;"HH:mm:ss"&lt;/SPAN&gt;, msGothicFont);&lt;/PRE&gt;&lt;PRE&gt;            gBuffer.DrawString(time.ToString(&lt;SPAN class=str&gt;"HH:mm:ss"&lt;/SPAN&gt;), msGothicFont, Brushes.White, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PointF(-textSize.Width / 2, 65));&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;    }&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Thread.Abortによる強制終了を行うバージョン.cs&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Diagnostics;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Drawing;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Drawing.Drawing2D;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Linq;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Threading;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; ConsoleApplication92&lt;/PRE&gt;&lt;PRE class=alt&gt;{&lt;/PRE&gt;&lt;PRE&gt;    &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Program&lt;/PRE&gt;&lt;PRE class=alt&gt;    {&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; MAX_SIZE = 110;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; DRAW_START = 40;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; DIGITAL_TIME_TOP = 65;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; FONT_SIZE = 15;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; LONG_SCALE = 40;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; SHORT_SCALE = 35;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; SCALE_LENGTH = 45;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; CIRCLE_WIDTH = 3;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; WINDOW_HEIGHT = 10;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; WINDOW_WIDTH = 24;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; FONT_NAME = &lt;SPAN class=str&gt;"ＭＳ ゴシック"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; TIME_FORMAT = &lt;SPAN class=str&gt;"HH:mm:ss"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// メイン&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="args"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Main(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] args)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// ウィンドウサイズを適切に設定&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            Console.WindowHeight = WINDOW_HEIGHT;&lt;/PRE&gt;&lt;PRE class=alt&gt;            Console.WindowWidth = WINDOW_WIDTH;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// 時計描画スレッド&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            var thread = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Thread(DrawClock);&lt;/PRE&gt;&lt;PRE class=alt&gt;            thread.Start();&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// 入力待ちメインスレッド&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                Console.Write(&lt;SPAN class=str&gt;"終了しますか？[Y/N] : "&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=rem&gt;// 終了待ち&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=str&gt;"Y"&lt;/SPAN&gt; == Console.ReadLine().ToUpper())&lt;/PRE&gt;&lt;PRE&gt;                {&lt;/PRE&gt;&lt;PRE class=alt&gt;                    ThreadStop(thread);&lt;/PRE&gt;&lt;PRE&gt;                    thread.Join();&lt;/PRE&gt;&lt;PRE class=alt&gt;                    &lt;SPAN class=kwrd&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;                }&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;                {&lt;/PRE&gt;&lt;PRE class=alt&gt;                    Console.CursorTop = 0;&lt;/PRE&gt;&lt;PRE&gt;                    Console.Clear();&lt;/PRE&gt;&lt;PRE class=alt&gt;                }&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// スレッド中止&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="thread"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; ThreadStop(Thread thread)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                thread.Abort();&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;catch&lt;/SPAN&gt; (ThreadAbortException)&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=rem&gt;// あえてスルーする&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// 時計描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawClock()&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// コンソールのウィンドウハンドルから描画クラス取得&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var process = Process.GetProcesses().ToList().Where(p =&amp;gt; p.MainWindowTitle == Console.Title).SingleOrDefault();&lt;/PRE&gt;&lt;PRE&gt;            var g = Graphics.FromHwnd(process.MainWindowHandle);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// チラつき防止のためのバッファ領域&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var msGothicFont = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/PRE&gt;&lt;PRE&gt;            var fontSize = g.MeasureString(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Empty, msGothicFont);&lt;/PRE&gt;&lt;PRE class=alt&gt;            var bmp = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Bitmap(MAX_SIZE + CIRCLE_WIDTH, MAX_SIZE + CIRCLE_WIDTH + DIGITAL_TIME_TOP + Convert.ToInt32(fontSize.Height));&lt;/PRE&gt;&lt;PRE&gt;            var gBuffer = Graphics.FromImage(bmp);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 座標系の原点を変える&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            gBuffer.TranslateTransform((MAX_SIZE + CIRCLE_WIDTH) / 2, (MAX_SIZE + CIRCLE_WIDTH) / 2, MatrixOrder.Append);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            var center = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(0, 0);&lt;/PRE&gt;&lt;PRE&gt;            var r = MAX_SIZE / 2;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                var time = DateTime.Now;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=rem&gt;// 時計の部品を描画する&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                DrawClockBase(gBuffer, time);&lt;/PRE&gt;&lt;PRE&gt;                DrawSecondLine(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE class=alt&gt;                DrawMinuteLine(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE&gt;                DrawHourLine(gBuffer, time, r, center);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                &lt;SPAN class=rem&gt;// 実描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                g.DrawImage(bmp, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(DRAW_START, DRAW_START));&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;                &lt;SPAN class=rem&gt;// 一秒置き&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;                Thread.Sleep(1000);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 秒針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawSecondLine(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var bluePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.AliceBlue, 1))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var secAng = 2.0f * Math.PI * time.Second / 60.0f;&lt;/PRE&gt;&lt;PRE&gt;                var secHandLength = Convert.ToInt32(0.9f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var secHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(secHandLength * Math.Sin(secAng)), Convert.ToInt32(-secHandLength * Math.Cos(secAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(bluePen, center, secHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 分針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawMinuteLine(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var greenPen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.LightGreen, 2))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var minAng = 2.0f * Math.PI * (time.Minute + time.Second / 60.0f) / 60.0f;&lt;/PRE&gt;&lt;PRE&gt;                var minHandLength = Convert.ToInt32(0.7f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var minHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(minHandLength * Math.Sin(minAng)), Convert.ToInt32(-minHandLength * Math.Cos(minAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(greenPen, center, minHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 時針描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="r"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="center"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawHourLine(Graphics gBuffer, DateTime time, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; r, Point center)&lt;/PRE&gt;&lt;PRE&gt;        {&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var redPen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.LightPink, 2))&lt;/PRE&gt;&lt;PRE&gt;            {&lt;/PRE&gt;&lt;PRE class=alt&gt;                var hourAng = 2.0f * Math.PI * (time.Hour + time.Minute / 60.0f) / 12.0f;&lt;/PRE&gt;&lt;PRE&gt;                var hourHandLength = Convert.ToInt32(0.5f * r);&lt;/PRE&gt;&lt;PRE class=alt&gt;                var hourHand = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Point(Convert.ToInt32(hourHandLength * Math.Sin(hourAng)), Convert.ToInt32(-hourHandLength * Math.Cos(hourAng)));&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawLine(redPen, center, hourHand);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 時計の針以外を描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="g"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawClockBase(Graphics gBuffer, DateTime time)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// 外円&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            DrawCircle(gBuffer);&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=rem&gt;// 目盛り&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;            DrawScale(gBuffer);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=rem&gt;// デジタル時計&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;            DrawDigitalTime(gBuffer, time);&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 外円描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawCircle(Graphics gBuffer)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var circlePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.AliceBlue, CIRCLE_WIDTH))&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.Clear(Color.Black);&lt;/PRE&gt;&lt;PRE class=alt&gt;                gBuffer.FillEllipse(Brushes.AliceBlue, -2.5f, -2.5f, 5f, 5f);&lt;/PRE&gt;&lt;PRE&gt;                gBuffer.DrawEllipse(circlePen, -MAX_SIZE / 2, -MAX_SIZE / 2, MAX_SIZE, MAX_SIZE);&lt;/PRE&gt;&lt;PRE class=alt&gt;            }&lt;/PRE&gt;&lt;PRE&gt;        }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// 目盛り描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawScale(Graphics gBuffer)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            var msGothicFont = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;            &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (var scalePen = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pen(Color.Aqua, 1))&lt;/PRE&gt;&lt;PRE class=alt&gt;            {&lt;/PRE&gt;&lt;PRE&gt;                Enumerable.Range(1, 60).ToList().ForEach(i =&amp;gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                {&lt;/PRE&gt;&lt;PRE&gt;                    var angle = i * 6 * (Math.PI / 180);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=rem&gt;// 見易いように5目盛りごとに長さを変える&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var length = 0 == i % 5 ? SHORT_SCALE : LONG_SCALE;&lt;/PRE&gt;&lt;PRE&gt;                    var x = Convert.ToInt32(Math.Sin(angle) * length);&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var y = -Convert.ToInt32(Math.Cos(angle) * length);&lt;/PRE&gt;&lt;PRE&gt;                    var x1 = Convert.ToInt32(Math.Sin(angle) * SCALE_LENGTH);&lt;/PRE&gt;&lt;PRE class=alt&gt;                    var y1 = -Convert.ToInt32(Math.Cos(angle) * SCALE_LENGTH);&lt;/PRE&gt;&lt;PRE&gt;                    gBuffer.DrawLine(scalePen, x, y, x1, y1);&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;                    &lt;SPAN class=rem&gt;// 5目盛りごとに数字を表示&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;                    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (0 == i % 5)&lt;/PRE&gt;&lt;PRE&gt;                    {&lt;/PRE&gt;&lt;PRE class=alt&gt;                        var timeText = (i / 5).ToString();&lt;/PRE&gt;&lt;PRE&gt;                        var fontSize = gBuffer.MeasureString(timeText, msGothicFont);&lt;/PRE&gt;&lt;PRE class=alt&gt;                        gBuffer.DrawString(timeText, msGothicFont, Brushes.White, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PointF(x1 - fontSize.Width / 2, y1 - fontSize.Height / 2));&lt;/PRE&gt;&lt;PRE&gt;                    }&lt;/PRE&gt;&lt;PRE class=alt&gt;                });&lt;/PRE&gt;&lt;PRE&gt;            }&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// デジタル時計描画&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="gBuffer"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;        &lt;SPAN class=rem&gt;/// &lt;PARAM name="time"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;        &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DrawDigitalTime(Graphics gBuffer, DateTime time)&lt;/PRE&gt;&lt;PRE class=alt&gt;        {&lt;/PRE&gt;&lt;PRE&gt;            var msGothicFont = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Font(FONT_NAME, FONT_SIZE, FontStyle.Bold, GraphicsUnit.Pixel);&lt;/PRE&gt;&lt;PRE class=alt&gt;            var textSize = gBuffer.MeasureString(TIME_FORMAT, msGothicFont);&lt;/PRE&gt;&lt;PRE&gt;            gBuffer.DrawString(time.ToString(TIME_FORMAT), msGothicFont, Brushes.White, &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PointF(-textSize.Width / 2, DIGITAL_TIME_TOP));&lt;/PRE&gt;&lt;PRE class=alt&gt;        }&lt;/PRE&gt;&lt;PRE&gt;    }&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;基本構造はどちらも同じです。違うのはスレッドの扱いのみ。&lt;/P&gt;
&lt;P&gt;Thread.Abort版の方が無駄が少ないように思うので、もう少しいじってみようと思います。&lt;/P&gt;
&lt;P&gt;現時点ではここまで。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/169490.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>レンタルサーバー</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/01/31/167203.aspx</link><pubDate>Sat, 31 Jan 2009 21:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/01/31/167203.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/167203.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/01/31/167203.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/167203.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/167203.aspx</trackback:ping><description>&lt;p&gt;携帯のGPSを使ったWebアプリでも作ろうかなと思ったら、レンタルサーバーの必要性に思い至った。携帯実機で動作試験できたらそれなりに楽しかろうと思うのだけど、適当に検索した感じ、ASP.NET + SQLServerで無料のレンタルサーバーって、軒並み今募集中止してて、でも正式運用じゃなくて動作確認をするためだけにお金を出すのもなぁ（ケチンボ）と思ったりしております。実は以前PHP + MySQLで同様のWebアプリを作ったことがあるんだけど、その時使ってたレンタルサーバーが死んでしまって、もう一回環境構築するのも面倒だなぁと思って、折角だから移植を考えたんですけどね。ってブログってこんなに文章ぎちぎちにかくもの？使い方間違ってない？平気？&lt;/p&gt; &lt;p&gt;というわけで、一言で言うと、お金がないのでバナー広告付きとか全然文句言わないので、フリーのASP.NET + SQLServerレンタルサーバーないですかね？ってだけなんですけど。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/167203.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>URL短縮</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/01/24/166727.aspx</link><pubDate>Sat, 24 Jan 2009 01:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/01/24/166727.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/166727.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/01/24/166727.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/166727.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/166727.aspx</trackback:ping><description>&lt;p&gt;&lt;a title="http://zz.tc/" href="http://zz.tc/"&gt;http://zz.tc/&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/166727.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>Windows Live Writerのテスト！</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/01/19/166468.aspx</link><pubDate>Mon, 19 Jan 2009 18:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/01/19/166468.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/166468.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/01/19/166468.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/166468.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/166468.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://strangeworker.wankuma.com/site/special/2008/01/WindowsLiveWriter_100E4/ss.jpg"&gt;&lt;img title="ss" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="244" alt="ss" src="http://strangeworker.wankuma.com/site/special/2008/01/WindowsLiveWriter_100E4/ss_thumb.jpg" width="242" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;こんな感じでどうかな？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/166468.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>strangeworker@wankuma.com</dc:creator><title>ブログスペース</title><link>http://blogs.wankuma.com/strangeworker/archive/2009/01/18/166416.aspx</link><pubDate>Sun, 18 Jan 2009 22:18:00 GMT</pubDate><guid>http://blogs.wankuma.com/strangeworker/archive/2009/01/18/166416.aspx</guid><wfw:comment>http://blogs.wankuma.com/strangeworker/comments/166416.aspx</wfw:comment><comments>http://blogs.wankuma.com/strangeworker/archive/2009/01/18/166416.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/strangeworker/comments/commentRss/166416.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/strangeworker/services/trackbacks/166416.aspx</trackback:ping><description>　折角ブログスペースが手に入ったので、それとなく整備してみる。今まで一度もブログをやったことがないので、実際どの程度どうなのかさっぱりわからないので、テストも兼ねて日記を投稿！&lt;img src ="http://blogs.wankuma.com/strangeworker/aggbug/166416.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>