Top / Programming / Ruby / Ruby GUIライブラリ / wxRuby / wxRubyでメモ帳作成(2)プログラミング入門

wxRuby でメモ帳作成(2)

wxRubyでメモ帳を作ってみます。 このページを作るに当たって、wxWindowsで始めるC++ GUIプログラミングを参考にさせていただきました。

プログラミング入門

ウィンドウを表示する。

ウィンドウを表示するだけのシンプルなプログラムは、wxRubyのサンプルフォルダにあるminimal\nothing.rbwを参照。 標準のインストール先は、C:\Program Files\wxRuby\samples\minimal\nothing.rbw。

#!ruby -Ks
require 'wxruby'

class MyFrame < Wx::Frame
  def initialize(title)
    super(nil, -1, title)
  end
end

class NothingApp < Wx::App
  def on_init
    frame = MyFrame.new("Minimal wxRuby App")
    frame.show
  end
end

a = NothingApp.new
a.main_loop()

wxRubyでは、wxApp は Wx::App 、WxFrame は Wx::Frame とクラス名が異なっている。

メニューを表示する

スクリプトの文字コードを指定する。ない場合、文字化けを起こす可能性がある。

#!ruby -Ks

メニューを表示するウィンドウを作成する方法は、wxRubyのサンプルフォルダにあるminimal\minima.rbwを参照。 標準のインストール先は、C:\Program Files\wxRuby\samples\minimal\minimal.rbw。

require 'wxruby'
include Wx

このサンプルでは、先頭で include Wx して、クラス名の Wx:: は省略している。

class MyFrame < Frame
  def initialize(title,pos,size,style=DEFAULT_FRAME_STYLE)
    super(nil,-1,title,pos,size,style)

    if RUBY_PLATFORM == "WXMSW"
      set_icon(Icon.new("mondrian.ico",BITMAP_TYPE_ICO))
    else
      set_icon(Icon.new("mondrian.xpm",BITMAP_TYPE_XPM))
    end

    menuFile = Menu.new
    helpMenu = Menu.new
    helpMenu.append(Minimal_About, "&About...\tF1", "Show about dialog")
    menuFile.append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program")
    menuBar = MenuBar.new
    menuBar.append(menuFile, "&File")
    menuBar.append(helpMenu, "&Help")
    set_menu_bar(menuBar)

    create_status_bar(2)
    set_status_text("Welcome to wxRuby!")

    evt_menu(Minimal_Quit) {onQuit}
    evt_menu(Minimal_About) {onAbout}
  end

wxRubyでは、クラス名だけでなく定数名も異なっている。(言語仕様の都合だろう。) wxRubyの定数は、wxDEFAULT_FRAME_STYLEDEFAULT_FRAME_STYLE と先頭のwxがなくなるようだ。

C++では、イベントと関数をBEGIN_EVENT_TABLEマクロで接続する。

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(Menu_File_About, MyFrame::OnAbout)
    EVT_MENU(Menu_File_Quit,  MyFrame::OnQuit)
END_EVENT_TABLE()

一方、wxRubyの場合は、

evt_menu(Minimal_Quit) {onQuit}
evt_menu(Minimal_About) {onAbout}

と、メソッドが用意されている。

アイコンを実行時に指定している点もRubyらしい。

if RUBY_PLATFORM == "WXMSW"
  set_icon(Icon.new("mondrian.ico",BITMAP_TYPE_ICO))
else
  set_icon(Icon.new("mondrian.xpm",BITMAP_TYPE_XPM))
end

更新履歴