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>
必須なのは、以下。読めばよかるけど重要なのは二行だけ。
/// <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();