主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

.NET Framework, Mono: 手の込んだUIとやら

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



1505261820460.jpg


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行程度。オリジナルの完全コピーになるように近づけるのにマウスカーソルいじりと細かい詰めの作業を行っても、そこまで長大なコードにはならないだろう。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。