2015
05
26
05
26
.NET Framework, Mono: 手の込んだUIとやら
前の記事で触れたWeb技術で作ったちょっと手の込んだUIというのが、C# + GTK#で書くとどれくらいのものになるか気になるので書いてみた。というかGTK#を使ってWindowsでもLinuxでも動くGUIアプリケーションを試すネタが欲しかっただけかもしれないが。
スクリーンショットを撮るデスクトップアプリのUI部分を作る。マウスドラッグで矩形を描いて、その部分のスクショを得るって具合。詳しくは前の記事にあるリンクを参照。

.NET Framework 4.0以上とGTK#のインストールが必要。Linux MintではMonoさえインストールしておけば、あとはWindowsでコンパイルしたものを移すだけで動いた(Linux Mint Debian Editionで確認。Mono Runtimeでファイルを実行)。
タスクバー上の表示アイコンや何枚か使用しているウィンドウの表示序列などで詰めるべきところはあるが、大筋それっぽいものはできた。コードは80行程度。オリジナルの完全コピーになるように近づけるのにマウスカーソルいじりと細かい詰めの作業を行っても、そこまで長大なコードにはならないだろう。
スクリーンショットを撮るデスクトップアプリのUI部分を作る。マウスドラッグで矩形を描いて、その部分のスクショを得るって具合。詳しくは前の記事にあるリンクを参照。

using System;
using Gtk;
using Gdk;
class TWindow
{
Gtk.Window window, window2, window3;
Label label_x;
int s_x, s_y;
public TWindow()
{
window = new Gtk.Window("gtk sharp");
window.Decorated = false;
window.Opacity = 0.01;
window.SetDefaultSize(500, 500);
window.Move(-50, -50);
window.AddEvents((int)(Gdk.EventMask.ButtonPressMask
|Gdk.EventMask.ButtonReleaseMask
|Gdk.EventMask.PointerMotionMask));
window.ButtonPressEvent += pressed;
window.ButtonReleaseEvent += released;
window.MotionNotifyEvent += mousemoved;
window.Show();
window2 = new Gtk.Window("rect");
window2.Decorated = false;
window2.KeepAbove = true;
window2.SetDefaultSize(0, 0);
window2.Show();
window2.Opacity = 0.01;
window3 = new Gtk.Window("size");
window3.Decorated = false;
label_x = new Gtk.Label();
window3.Add(label_x);
window3.ShowAll();
window.KeepAbove = true;
}
private void pressed(object obj, EventArgs e)
{
int x, y;
window.GetPointer(out x, out y);
s_x = x;
s_y = y;
window2.Resize(1, 1);
window2.Move(x, y);
window2.Opacity = 0.7;
}
private void released(object obj, EventArgs e)
{
window2.Opacity = 0.01;
s_x = -1;
}
private void mousemoved(object obj, EventArgs e)
{
int x, y;
window.GetPointer(out x, out y);
window3.Move(x, y + 30);
label_x.Text = x.ToString() + " * " + y.ToString();
if (s_x != -1)
{
var w = x - s_x;
var h = y - s_y;
window2.Resize(w, h);
}
}
}
class Sample
{
static void Main()
{
Application.Init();
var window = new TWindow();
Application.Run();
}
}
.NET Framework 4.0以上とGTK#のインストールが必要。Linux MintではMonoさえインストールしておけば、あとはWindowsでコンパイルしたものを移すだけで動いた(Linux Mint Debian Editionで確認。Mono Runtimeでファイルを実行)。
タスクバー上の表示アイコンや何枚か使用しているウィンドウの表示序列などで詰めるべきところはあるが、大筋それっぽいものはできた。コードは80行程度。オリジナルの完全コピーになるように近づけるのにマウスカーソルいじりと細かい詰めの作業を行っても、そこまで長大なコードにはならないだろう。
スポンサーサイト