class Opine::Native::Window::Window

Constants

CLASS_NAME
WINDOWS

Attributes

widget[RW]

Public Class Methods

new(widget) click to toggle source
# File lib/opine/widgets/window_win.rb, line 13
def initialize(widget) #(title)
  @widget = widget

  @white = GetStockObject(WHITE_BRUSH)

  @wc = WNDCLASSEX.new
  @wc[:lpfnWndProc]   = method(:window_proc)
  @wc[:hInstance]     = Stench::HINST
  @wc[:hIcon]         = LoadImage(NULL, P(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_SHARED)
  @wc[:hCursor]       = LoadImage(NULL, P(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_SHARED)
  @wc[:hbrBackground] = @white
  @wc[:lpszClassName] = FFI::MemoryPointer.from_string("#{CLASS_NAME}:#{__id__}")
  @wc[:hIconSm]       = LoadImage(NULL, P(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_SHARED);

  @hwnd = CreateWindowEx(
      WS_EX_LEFT, P(@wc.atom), title, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
      CW_USEDEFAULT, CW_USEDEFAULT, width, height, NULL, NULL, Stench::HINST, nil)

  raise "CreateWindowEx Error" if @hwnd == 0
  WINDOWS << self
end

Public Instance Methods

P(a) click to toggle source
# File lib/opine/widgets/window_win.rb, line 11
def P(a); ::FFI::Pointer.new(a); end
close() click to toggle source
# File lib/opine/widgets/window_win.rb, line 52
def close
  DestroyWindow(@hwnd) if hwnd
end
hwnd() click to toggle source
# File lib/opine/widgets/window_win.rb, line 48
def hwnd
  @hwnd ? (IsWindow(@hwnd).nonzero? ? @hwnd : (@hwnd = nil)) : nil
end
method_missing(method,*args) click to toggle source
# File lib/opine/widgets/window_win.rb, line 56
def method_missing method,*args
  widget.send(method,*args)
end
window_proc(hwnd, umsg, wparam, lparam) click to toggle source
# File lib/opine/widgets/window_win.rb, line 35
def window_proc(hwnd, umsg, wparam, lparam)
  case umsg
    when WM_DESTROY
      @hwnd = nil
      WINDOWS.delete(self)
      PostQuitMessage(0) if WINDOWS.empty?
      return 0
    else
      return DefWindowProc(hwnd, umsg, wparam, lparam)
  end
  0
end