.NET

wpfで、四角くないウインドウを作ってみたの。

ただ作るだけじゃ面白くないから以下でやってみたわ。

ウインドウタイトルを削ったり、円を描くのは wpf レイアウト側でやるの。
アナログ時計の時、Lineと Ellipse を使ったわよね。ちなみにネタ元は以下ね。

Lineは線、Ellipse は円を作るのね。ここでは Ellipse を使うわ。

<Window x:Class="circle1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="245" Width="230" WindowStyle="None"  AllowsTransparency="True" Background="{x:Null}">
    <Grid>
        <Ellipse Fill="Plum" Height="200" Width="200" MouseLeftButtonDown="mover" MouseRightButtonUp="Ellipse_MouseRightButtonUp" />
    </Grid>
</Window>

ウインドウの属性の説明

ウインドウタイトルなし
WindowStyle="None"
透明化
AllowsTransparency="True"
背景を消す
Background="{x:Null}"

Ellipseの属性の説明

Fill="Plum"
指定色で満たす(Fill)
MouseLeftButtonDown="mover"
マウス左ボタン押下→ mover を呼びだせ
MouseRightButtonUp="Ellipse_MouseRightButtonUp"
右クリック→ Ellipse_MouseRightButtonUp を呼び出せ

プログラム側

必須なのは、以下。読めばよかるけど重要なのは二行だけ。

       /// <summary>
       /// マウスでドラッグ
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void mover(object sender, MouseButtonEventArgs e)
       {
           this.DragMove();
       }

       /// <summary>
       /// 右クリックで終了
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void Ellipse_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
       {
           this.Close();
       }

必須でないのは、以下ね。ランダムに動かすやつ。

       Random cr292 = new System.Random();
       /// <summary>
       /// 指定時間ごとにランダムに移動させる。
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       void dt_Tick(object sender, EventArgs e)
       {
           // 移動距離
           int k = cr292.Next(1, 4);
           // 0 以上 512 未満の乱数を取得する
           int ii = cr292.Next(0,8);  // 0:↑ 1:/ 2:→ 3:\ 4:↓ 5:/ 6:← 7:\
           switch (ii)
           {
               case 0: this.Top -= k; break;
               case 1: this.Top -= k;this.Left += k; break;
               case 2: this.Left += k; break;
               case 3: this.Top += k;this.Left += k; break;
               case 4: this.Top += k; break;
               case 5: this.Top += k;this.Left -= k; break;
               case 6: this.Left -= k; break;
               case 7: this.Top -= k; this.Left -= k; break;
               default: break;
           }
       }

このランダム移動の呼び出しは……初期化の後にでも以下を埋め込むといいわ。

           DispatcherTimer dt = new DispatcherTimer();
           dt.Interval = new TimeSpan(0, 0, 0,0,100);
           dt.Tick += new EventHandler(dt_Tick);
           dt.Start();

トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-14 (日) 19:07:40