作者: KAWAI,Takanori
日時: 2002/9/24(10:32)
川合孝典です。

先日、CPANをフラフラしていたところ、
wxWindowsというGUIツールキットのためのPerlインターフェース:
Wxというモジュールを見つけました。
そこでwxPerlプロジェクトのホームページにいって、
Windows版(ActivePerl用)をダウンロード、インストールしたところ
あっけないくらい簡単に動かすことができました。
しかも日本語の表示もとりあえず問題なく(下記のスクリプト)。

だからどうということもないのですが、WxWindowsというもの自体、
私は聞いたことがなかったものですから。
どれくらい使われて、今後はどうなんでしょうか?
Wx::WidgetMakerのドキュメントを今、読み始めたんですが、
需要があるかなぁというのが、ちょっと心配で(^^)。

wxPerl
 http://wxperl.sourceforge.net/
ダウンロードはこちらから
http://sourceforge.net/project/showfiles.php?group_id=15655
 0.12b2でテストしました(Wx-0.12b2-wxm2.3.3-win32.zip)

[環境]
ActivePerl Build633 + Wx : 0.12
[スクリプト例]
#!/usr/bin/perl
use strict;
use Wx;
#-----------------------------------------------------------------------
# MyAPP(Wx::App)
#-----------------------------------------------------------------------
package MyApp;
use vars qw(@ISA);
@ISA = qw(Wx::App);
#---------------------------------------------------------------------
# OnInit:オブジェクトが生成されたときに自動的に呼び出されます
#---------------------------------------------------------------------
sub OnInit {
  my( $this ) = shift;
  # 新しいフレームを生成し、トップに設定し、表示
  my $frame = MyFrame->new();
  $this->SetTopWindow( $frame );
  $frame->Show( 1 );
}
#=====================================================================
# MyFrame(Wx::Frame)
#=====================================================================
package MyFrame;
use vars qw(@ISA);
@ISA = qw(Wx::Frame);
# 必要なイベントのインポート
use Wx::Event qw(EVT_PAINT);
# 必要な定数のインポート
use Wx qw(wxDECORATIVE wxNORMAL wxBOLD);
use Wx qw(wxDefaultPosition);
use Wx qw(wxWHITE wxRED);
#---------------------------------------------------------------------
# new
#---------------------------------------------------------------------
sub new {
  # 新しいframe 親なし、ID -1, タイトル 'Perlでテスト'
  # デフォルト位置、幅350、高さ100
  my $this  = shift->SUPER::new( undef, -1, 'Perlでテスト',
                                   wxDefaultPosition , [350, 100] );

  # 新しいFontオブジェクトを生成し、格納
  $this->{FONT} = Wx::Font->new(16, wxDECORATIVE, wxNORMAL, wxBOLD, 0);
  # 背景色の設定
  $this->SetBackgroundColour( wxRED );
  $this->SetIcon( Wx::GetWxPerlIcon() );
  # 全てのPAINTイベントをOnPaintメソッドで扱うように宣言
  EVT_PAINT( $this, \&OnPaint );
  return $this;
}
#---------------------------------------------------------------------
# PAINTイベント
#---------------------------------------------------------------------
sub OnPaint {
  my( $this, $event ) = @_;
  # 描画用の新しいDC(デバイスコンテキスト)を作成
  my $dc = Wx::PaintDC->new( $this );
  # フォントを選択し、テキストの描画
  $dc->SetFont( $this->{FONT} );
  $dc->DrawText( 'びっくり!日本語DE表示?', 10, 10 );
}
#=====================================================================
# メイン
#=====================================================================
package main;
# Wx::Appの派生クラスを作成
my $app = MyApp->new();
# イベントの処理を開始
$app->MainLoop();

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr@... GCD00051@...
   http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/
「Cマガジン」でPerl DBIの連載はじまります。
   http://www.cmagazine.jp/
===================================================