2006年11月07日

フォントを使う

参考:猫でもわかるプログラミング
第27章 フォントを使う
http://www.kumei.ne.jp/c_lang/sdk/sdk_12.htm

フォントはSWin::LWFactoryのnewfontで作る。

newfont(
  fontname, # フォント名
  height,   # フォントの高さ
  style=0,  # [bit2,bit1,bit0]がそれぞれ[StrikeOut,UnderLine,Italic]
  weight=0, # 太さ。0から9まで
  width=0,  # 文字幅。0を入れるとシステムが適当に設定
  escape=0, # 傾き。角度(degree)×10
  orient=0, # 各文字の角度。角度(degree)×10
  pitchfamily=0x4, # 
  charset=SHIFTJIS_CHARSET # 
)

require 'basewin' # basewin.rb
require 'Win32API'

WM_PAINT                        = 0x000F

class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  TextOutA = Win32API.new('Gdi32', 'TextOutA', 'IIIPI', 'I')
  TRANSPARENT = 1
  
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
  end
  
  def construct
    self.caption = "猫でもわかるプログラミング"
    move(100, 100, 420, 360)
    @font1 = @factory.newfont("MS ゴシック", 40, 0, 0, 0, 450)
    @font2 = @factory.newfont("MS 明朝", 40, 0, 0, 0, -450)
    @font3 = @factory.newfont("MS 明朝", 40, 0, 0, 0, 0)
  end
  
  def on_paint(msg)
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    
    setFont(@font1)
    TextOutA.call(hdc, 10, 300, "猫でもわかるフォント", 20)
    
    setFont(@font2)
    self.textColor = RGB(255, 0, 0)
    TextOutA.call(hdc, 10, 10, "粂井康孝 制作・著作", 20)
    
    setFont(@font3)
    self.textColor = RGB(0, 255, 0)
    TextOutA.call(hdc, 10, 150, "猫でもわかるフォント", 20)
    
    SetBkMode.call(hdc, oldbkmode)
  end
end

form = MyApp.newwindow(nil, MyWindow)
form.create.show
MyApp.application.messageloop

タグ:ruby swin win32
posted by alexnova at 21:42| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2006年11月06日

システムメニューの改造 & ウィンドウを最前面に表示

参考:
猫でもわかるプログラミング
第12章 システムメニューの改造
http://www.kumei.ne.jp/c_lang/sdk/sdk_12.htm

システムメニューというのは、ウィンドウのタイトルバーのアイコンをクリックしたり、 タスクバーのボタンを右クリックしたときに出てくるメニューらしい。
そのシステムメニューに、「常に最前面に表示」なんて項目があったらいいなと常々思っていたので作ってみる。

ポイント

  1. システムメニューのメニューハンドルを取得 (GetSystemMenu)
  2. システムメニューの項目が選択されたときの処理 (WM_SYSCOMMAND)
  3. ウィンドウを最前面に (SetWindowPos, HWND_TOPMOST)

require 'basewin' # basewin.rb
require 'Win32API'

WM_PAINT                        = 0x000F
WM_SYSCOMMAND                   = 0x0112
DT_WORDBREAK                = 0x00000010

MF_STRING           = 0x00000000
MF_UNCHECKED        = 0x00000000
MF_CHECKED          = 0x00000008
SC_RESTORE      = 0xF120 # 元のサイズに戻す

WS_EX_TOPMOST           = 0x00000008
HWND_TOPMOST    = -1
HWND_NOTOPMOST  = -2
SWP_NOSIZE          = 0x0001
SWP_NOMOVE          = 0x0002

IDSM_TOPMOST = 2001

class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  SetTextColor = Win32API.new('Gdi32', 'SetTextColor', 'II', 'I')
  TRANSPARENT = 1
  
  GetSystemMenu = Win32API.new('User32', 'GetSystemMenu', 'II', 'I')
  InsertMenuA = Win32API.new('User32', 'InsertMenuA', 'IIIIP', 'I')
  AppendMenuA = Win32API.new('User32', 'AppendMenuA', 'IIIP', 'I')
  SetWindowPos = Win32API.new('User32', 'SetWindowPos', 'IIIIIII', 'I')
  CheckMenuItem = Win32API.new('User32', 'CheckMenuItem', 'III', 'I')
  
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
    setHandler(WM_SYSCOMMAND, method(:on_syscommand))
  end
  
  def construct
    self.caption = "猫でもわかるプログラミング"
    move(100, 100, 300, 200)
    # システムメニュー
    @sysmenu = GetSystemMenu.call(hWnd, 0);
    InsertMenuA.call(@sysmenu, SC_RESTORE, MF_STRING, IDSM_TOPMOST, '常に最前面に表示(&T)');
  end
  
  def on_paint(msg)
    SetTextColor.call(hdc, RGB(0,0,0xff))
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    x, y, w, h = self.clientrect
    drawText("参考ページ\n猫でもわかるプログラミング!\nです。", 0+30, 0+30, w-30, h-30, nil, DT_WORDBREAK)
    SetBkMode.call(hdc, oldbkmode)
  end
  
  def on_syscommand(msg)
    case msg.wParam
    when IDSM_TOPMOST
      if self.exstyle & WS_EX_TOPMOST == WS_EX_TOPMOST then
        SetWindowPos.call(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
        CheckMenuItem.call(@sysmenu, IDSM_TOPMOST, MF_UNCHECKED)
      else
        SetWindowPos.call(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
        CheckMenuItem.call(@sysmenu, IDSM_TOPMOST, MF_CHECKED)
      end
      msg.retval = 0
    end
  end
end

form = MyApp.newwindow(nil, MyWindow)
form.create.show
MyApp.application.messageloop

タグ:ruby swin win32
posted by alexnova at 19:29| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2006年11月05日

タイマーを使ったアプリケーション

参考:
猫でもわかるプログラミング
第10章 タイマーを使ったアプリケーション
http://www.kumei.ne.jp/c_lang/sdk/sdk_10.htm

require 'basewin' # MyApp, BaseWindow
require 'Win32API'

WM_PAINT                        = 0x000F
WM_CLOSE                        = 0x0010
WM_COMMAND                      = 0x0111
WM_CREATE                       = 0x0001
WM_TIMER                        = 0x0113
DT_WORDBREAK                = 0x00000010
MB_OKCANCEL                 = 0x00000001
MB_ICONQUESTION             = 0x00000020
IDCANCEL            = 2

IDM_EXIT = 1001
ID_MYTIMER = 32767

class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  SetTextColor = Win32API.new('Gdi32', 'SetTextColor', 'II', 'I')
  SetTimer = Win32API.new('User32', 'SetTimer', 'IIII', 'I')
  KillTimer = Win32API.new('User32', 'SetTimer', 'II', 'I')
  TRANSPARENT = 1
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
    setHandler(WM_COMMAND, method(:on_command))
    setHandler(WM_CLOSE, method(:on_close))
    setHandler(WM_TIMER, method(:on_timer))
  end
  
  def construct
    self.caption = "タイマー"
    move(100, 100, 360, 80)
    menu = @factory.newmenu
    menu.append("終了", IDM_EXIT)
    setMenu(menu)
    SetTimer.call(hWnd, ID_MYTIMER, 1000, 0)
  end
  
  def on_timer(msg)
    refresh
  end
  
  def on_paint(msg)
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    x, y, w, h = self.clientrect
    drawText(Time.now.strftime("ただいま%Y年%m月%d日の%H時%M分%S秒です。"), 0, 0, w, h, nil, DT_WORDBREAK)
    SetBkMode.call(hdc, oldbkmode)
  end
  
  def on_command(msg)
    wID = LOWORD(msg.wParam)
    wNotifyCode = HIWORD(msg.wParam)
    hwndControl = msg.lParam
    case wNotifyCode
    when 0 # メニュー
      case wID
      when IDM_EXIT
        sendMessage(WM_CLOSE, 0, 0)
      end
    when 1 # アクセラレータ
    else   # コントロール
    end
  end
  
  def on_close(msg)
    if messageBox("終了しますか?", "終了確認", MB_OKCANCEL | MB_ICONQUESTION) == IDCANCEL then
      KillTimer.call(hWnd, ID_MYTIMER)
      msg.retval = 0
    end
  end
end


form = MyApp.newwindow(nil, MyWindow)
form.create.show
MyApp.application.messageloop

タグ:ruby swin win32
posted by alexnova at 22:09| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

いきなり終了しないプログラム

参考:
猫でもわかるプログラミング
第8章 いきなり終了しないプログラム
http://www.kumei.ne.jp/c_lang/sdk/sdk_08.htm

msg(SWin::MSG)のretvalの値がnilでない時はデフォルトの処理を飛ばしてretvalの値を返すようになっている。

basewin.rbはhttp://alexnova.seesaa.net/article/26838772.htmlを参照。

require 'basewin' # MyApp, BaseWindow
require 'Win32API'

WM_PAINT                        = 0x000F
WM_CLOSE                        = 0x0010
WM_COMMAND                      = 0x0111
DT_WORDBREAK                = 0x00000010
MB_OKCANCEL                 = 0x00000001
MB_ICONQUESTION             = 0x00000020
IDCANCEL            = 2

IDM_EXIT = 1001
IDM_TEST = 1002
IDM_ABOUT = 1003

class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  SetTextColor = Win32API.new('Gdi32', 'SetTextColor', 'II', 'I')
  TRANSPARENT = 1
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
    setHandler(WM_COMMAND, method(:on_command))
    setHandler(WM_CLOSE, method(:on_close))
  end
  
  def construct
    self.caption = "猫でもわかるプログラミング"
    move(100, 100, 300, 200)
    menu_f = @factory.newmenu
    menu_f.append("終了", IDM_EXIT)
    menu_f.append("テスト", IDM_TEST)
    menu_h = @factory.newmenu
    menu_h.append("About", IDM_ABOUT)
    menu = @factory.newmenu
    menu.append("ファイル", menu_f)
    menu.append("ヘルプ", menu_h)
    setMenu(menu)
  end
  
  def on_paint(msg)
    SetTextColor.call(hdc, RGB(0,0,0xff))
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    x, y, w, h = self.clientrect
    drawText("参考ページ\n猫でもわかるプログラミング!\nです。", 0+30, 0+30, w-30, h-30, nil, DT_WORDBREAK)
    SetBkMode.call(hdc, oldbkmode)
  end
  
  def on_command(msg)
    wID = LOWORD(msg.wParam)
    wNotifyCode = HIWORD(msg.wParam)
    hwndControl = msg.lParam
    case wNotifyCode
    when 0 # メニュー
      case wID
      when IDM_EXIT
        sendMessage(WM_CLOSE, 0, 0)
      when IDM_TEST
        messageBox("テストが押されました", "test")
      when IDM_ABOUT
        messageBox("ABOUTが押されました", "Aest")
      end
    when 1 # アクセラレータ
    else   # コントロール
    end
  end
  
  def on_close(msg)
    if messageBox("終了しますか?", "終了確認", MB_OKCANCEL | MB_ICONQUESTION) == IDCANCEL then
      msg.retval = 0
    end
  end
end


form = MyApp.newwindow(nil, MyWindow)
form.create.show
MyApp.application.messageloop

タグ:win32 swin ruby
posted by alexnova at 22:04| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

BaseWindowの部分を別のファイルにする

邪魔くさいので共通部分をbasewin.rbに分けることにする。

# basewin.rb
require 'swin'

def LOWORD(param) param & 0xffff end
def HIWORD(param) (param >> 16) & 0xffff end
def RGB(r,g,b) r|(g<<8)|(b<<16) end

class MyApp
  @@application = SWin::Application
  @@factory = SWin::LWFactory.new(SWin::Application.hInstance)
  def self.application; @@application end
  def self.factory; @@factory end
  def self.newwindow(parent, window)
    win = @@factory.newwindow(parent, window)
    win._init_form(@@factory) if win.respond_to?(:_init_form)
    win
  end
end


class BaseWindow < SWin::Window
  def initialize(*arg)
    super
    @_event_handlers = {}
  end
  def _init_form(factory)
    @factory = factory
  end
  def create
    super
    construct
    self
  end
  def construct; end
  def msghandler(msg)
    @_event_handlers[msg.msg].call(msg)
  end
  def setHandler(event, proc)
    addEvent(event)
    @_event_handlers[event] = proc
  end
end

タグ:ruby swin
posted by alexnova at 21:53| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2006年11月03日

メニューを表示

参考:
猫でもわかるプログラミング
第7章 もう少し複雑なメニュー
http://www.kumei.ne.jp/c_lang/sdk/sdk_07.htm

require 'swin'
require 'Win32API'

WM_PAINT                        = 0x000F
WM_CLOSE                        = 0x0010
WM_COMMAND                      = 0x0111
DT_WORDBREAK                = 0x00000010

IDM_EXIT = 1001
IDM_TEST = 1002
IDM_ABOUT = 1003

def LOWORD(param) param & 0xffff end
def HIWORD(param) (param >> 16) & 0xffff end
def RGB(r,g,b) r|(g<<8)|(b<<16) end

class MyApp
  @@application = SWin::Application
  @@factory = SWin::LWFactory.new(SWin::Application.hInstance)
  def self.application; @@application end
  def self.factory; @@factory end
  def self.newwindow(parent, window)
    win = @@factory.newwindow(parent, window)
    win._init_form(@@factory) if win.respond_to?(:_init_form)
    win
  end
end


class BaseWindow < SWin::Window
  def initialize(*arg)
    super
    @_event_handlers = {}
  end
  def _init_form(factory)
    @factory = factory
  end
  def create
    super
    construct
    self
  end
  def construct; end
  def msghandler(msg)
    @_event_handlers[msg.msg].call(msg)
  end
  def setHandler(event, proc)
    addEvent(event)
    @_event_handlers[event] = proc
  end
end


class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  SetTextColor = Win32API.new('Gdi32', 'SetTextColor', 'II', 'I')
  TRANSPARENT = 1
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
    setHandler(WM_COMMAND, method(:on_command))
  end
  
  def construct
    self.caption = "猫でもわかるプログラミング"
    move(100, 100, 300, 200)
    menu_f = @factory.newmenu
    menu_f.append("終了", IDM_EXIT)
    menu_f.append("テスト", IDM_TEST)
    menu_h = @factory.newmenu
    menu_h.append("About", IDM_ABOUT)
    menu = @factory.newmenu
    menu.append("ファイル", menu_f)
    menu.append("ヘルプ", menu_h)
    setMenu(menu)
  end
  
  def on_paint(msg)
    SetTextColor.call(hdc, RGB(0,0,0xff))
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    x, y, w, h = self.clientrect
    drawText("参考ページ\n猫でもわかるプログラミング!\nです。", 0+30, 0+30, w-30, h-30, nil, DT_WORDBREAK)
    SetBkMode.call(hdc, oldbkmode)
  end
  
  def on_command(msg)
    wID = LOWORD(msg.wParam)
    wNotifyCode = HIWORD(msg.wParam)
    hwndControl = msg.lParam
    case wNotifyCode
    when 0 # メニュー
      case wID
      when IDM_EXIT
        sendMessage(WM_CLOSE, 0, 0)
      when IDM_TEST
        messageBox("テストが押されました", "test")
      when IDM_ABOUT
        messageBox("ABOUTが押されました", "Aest")
      end
    when 1 # アクセラレータ
    else   # コントロール
    end
  end
end


form = MyApp.newwindow(nil, MyWindow)
form.create.show
MyApp.application.messageloop

タグ:ruby swin win32
posted by alexnova at 17:12| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2006年11月01日

ウィンドウメッセージを処理

ruby-chanのmascot.rbを参考にウィンドウの骨格BaseWindowを作って、ウィンドウメッセージを処理する。

require 'swin'
require 'Win32API'

WM_PAINT                        = 0x000F
DT_CENTER                   = 0x00000001
DT_VCENTER                  = 0x00000004
DT_SINGLELINE               = 0x00000020

class BaseWindow < SWin::Window
  def initialize(*arg)
    super
    @event_handlers = {}
  end
  
  def msghandler(msg)
    @event_handlers[msg.msg].call(msg)
  end

  def setHandler(event, proc)
    addEvent(event)
    @event_handlers[event] = proc
  end
end

class MyWindow < BaseWindow
  SetBkMode = Win32API.new('Gdi32', 'SetBkMode', 'II', 'I')
  TRANSPARENT = 1
  def initialize(*arg)
    super
    setHandler(WM_PAINT, method(:on_paint))
  end
  
  def on_paint(msg)
    oldbkmode = SetBkMode.call(hdc, TRANSPARENT)
    x, y, w, h = self.clientrect
    drawText("猫でもわかるプログラミング", 0, 0, w, h, nil, DT_CENTER | DT_VCENTER | DT_SINGLELINE)
    SetBkMode.call(hdc, oldbkmode)
  end
end

factory = SWin::LWFactory.new(SWin::Application.hInstance)
form = factory.newwindow(nil, MyWindow)
form.move(100, 100, 300, 200)
form.caption = "猫でもわかるプログラミング"
form.create.show
SWin::Application.messageloop
タグ:ruby swin win32
posted by alexnova at 20:13| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

SWin::Windowのインスタンスメソッド

SWin::Windowのインスタンスメソッド

File swinwin.c:
	rb_define_method(cSwin,"create",swin_create,-1);
	rb_define_method(cSwin,"close",swin_close,0); 
	rb_define_method(cSwin,"delete",swin_close,0); 
	rb_define_method(cSwin,"show",swin_show,-1);
	rb_define_method(cSwin,"top",swin_settop,-1);
	rb_define_method(cSwin,"addEvent",swin_filterAdd,1);
	rb_define_method(cSwin,"delEvent",swin_filterDel,1);
	rb_define_method(cSwin,"clearEventFilter",swin_filterclear,0);
	rb_define_method(cSwin,"eachFilter",swin_eachfilter,0);
	rb_define_method(cSwin,"capturedEvents",swin_msgcaptured,0);
	rb_define_method(cSwin,"hWnd",swin_gethWnd,0);
	rb_define_method(cSwin,"handle",swin_gethWnd,0);
	rb_define_method(cSwin,"hParent",swin_gethParent,0);
	rb_define_method(cSwin,"etc=",swin_sethEtc,1);
	rb_define_method(cSwin,"etc",swin_gethEtc,0);
	rb_define_method(cSwin,"caption",swin_getCaption,0);
	rb_define_method(cSwin,"caption=",swin_setCaption,1);
	rb_define_method(cSwin,"x",swin_getx,0);
	rb_define_method(cSwin,"y",swin_gety,0);
	rb_define_method(cSwin,"w",swin_getw,0);
	rb_define_method(cSwin,"h",swin_geth,0);
	rb_define_method(cSwin,"move",swin_movewindow,4);
	rb_define_method(cSwin,"sendMessage",swin_sendmessage,3);
	rb_define_method(cSwin,"postMessage",swin_postmessage,3);
	rb_define_method(cSwin,"style=",swin_setdwStyle,1);
	rb_define_method(cSwin,"style",swin_getdwStyle,0);
	rb_define_method(cSwin,"classname=",swin_setClassname,1);
	rb_define_method(cSwin,"classname",swin_getClassname,0);
	rb_define_method(cSwin,"enabled=",swin_setenable,1);
	rb_define_method(cSwin,"enabled?",swin_getenable,0);
	rb_define_method(cSwin,"enabled",swin_getenable,0);
	rb_define_method(cSwin,"enable",swin_setenable_true,0);
	rb_define_method(cSwin,"disable",swin_setenable_false,0);
	rb_define_method(cSwin,"clientrect",swin_getclientrect,0);
	rb_define_method(cSwin,"windowrect",swin_getwindowrect,0);
	rb_define_method(cSwin,"messageBox",swin_m_messageBox,-1);
	rb_define_method(cSwin,"hookwndproc",swin_hookwndproc,0);
	rb_define_method(cSwin,"unhookwndproc",swin_unhookwndproc,0);
	rb_define_method(cSwin,"hookedwndproc?",swin_hookedq,0);
	rb_define_method(cSwin,SWIN_MSGHANDLERNAME,swin_msghandler,1);
	rb_define_method(cSwin,"alive?",swin_hwndalive,0);
	rb_define_method(cSwin,"refresh",swin_invalidateALL,-1);
	rb_define_method(cSwin,"setCapture",swin_setCapture,0);
	rb_define_method(cSwin,"releaseCapture",swin_releaseCapture,0);
	rb_define_method(cSwin,"focused?",swin_getFocus,0);
	rb_define_method(cSwin,"focus",swin_setFocus,0);
	rb_define_method(cSwin,"visible?",swin_getvisible,0);
	rb_define_method(cSwin,"visible=",swin_setvisible,1);
	rb_define_method(cSwin,"exstyle",swin_getExStyle,0);
	rb_define_method(cSwin,"exstyle=",swin_setExStyle,1);
	rb_define_method(cSwin,"hookwndproc",swin_hookwndproc,0);
	rb_define_method(cSwin,"application",swinaa_application,0);
	rb_define_method(cSwin,"properties",swin_getprop,0);
	rb_define_method(cSwin,"dopaint",swin_DCYield,-1); 
	rb_define_method(cSwin,"psrect",swin_getpsrect,0);
File swinmenu.c:
	rb_define_method(cSwin,"setMenu",swin_setMenu,1);
	rb_define_method(cSwin,"popupMenu",swin_popupMenu,3);
File swinole.c:
	rb_define_method(cSwin,"get_oleinterface",swin_win32ole_from_atlwin,0);
File swinoledd.c:
	rb_define_method(cSwin,"dndTargetStart",swin_oledndtargetstart,2);
	rb_define_method(cSwin,"dndTargetStop",swin_oledndtargetstop,0);
	rb_define_method(cSwin,"dndSourceStart",swin_oledragstart,3);
File swingdi.h:
#define DEFINE_RUBY_GDIFUNCS(obj,prename) \
	rb_define_method(obj,"setPen",prename##setPen,-1); \
	rb_define_method(obj,"setBrush",prename##setBrush,-1); \
	rb_define_method(obj,"fillRect",prename##Rectangle,4); \
	rb_define_method(obj,"fillRoundRect",prename##RoundRectangle,6); \
	rb_define_method(obj,"fillEllipse",prename##Ellipse,4); \
	rb_define_method(obj,"fillArc",prename##Arc,8); \
\
	rb_define_method(obj,"grMoveTo",prename##MoveTo,2); \
	rb_define_method(obj,"grLineTo",prename##LineTo,2); \
	rb_define_method(obj,"drawLine",prename##Line,4); \
	rb_define_method(obj,"drawChord",prename##Chord,8); \
	rb_define_method(obj,"drawText",prename##drawText,-1); \
	rb_define_method(obj,"floodfill",prename##FloodFill,-1); \
\
	rb_define_method(obj,"drawBitmap",prename##drawDIBitmap,-1); \
	rb_define_method(obj,"bitblt",    prename##drawDDBitmap,-1); \
\
	rb_define_method(obj,"drawBkColor=",prename##setbkcolor,1); \
	rb_define_method(obj,"drawBkColor",prename##getbkcolor,0); \
	rb_define_method(obj,"textColor=",prename##settextcolor,1); \
	rb_define_method(obj,"textColor",prename##gettextcolor,0); \
\
	rb_define_method(obj,"getPixel",prename##getPixel,2); \
	rb_define_method(obj,"setPixel",prename##setPixel,3); \
\
	rb_define_method(obj,"setFont",prename##setFont,1); \
\
	rb_define_method(obj,"opaque=",prename##setbkmode,1); \
	rb_define_method(obj,"opaque?",prename##getbkmode,0); \
\
	rb_define_method(obj,"hdc",prename##gethdc,0); \
\
	rb_define_method(obj,"devicecap",prename##devicecap,1); \
	rb_define_method(obj,"size",prename##size,0); \
	rb_define_method(obj,"physicalsize",prename##sizebymm,0); \
	rb_define_method(obj,"dpi",prename##getdpi,0); \
	rb_define_method(obj,"textExtent",prename##gettextextent,1); \
\
	rb_define_method(obj,"stretch",prename##StretchDIBlt,-1); /* old name */\
	rb_define_method(obj,"stretchBitmap",prename##StretchDIBlt,-1); \
	rb_define_method(obj,"stretchmode",prename##getstretchmode,0); \
	rb_define_method(obj,"stretchmode=",prename##setstretchmode,1); \
	rb_define_method(obj,"application",swinaa_application,0); \
タグ:ruby swin
posted by alexnova at 13:14| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。