如何在wxRuby应用程序中恢复窗口大小和位置?

时间:2008-10-06 08:29:13

标签: ruby wxruby

有没有人知道在wxRuby中恢复窗口位置和大小的示例代码?

1 个答案:

答案 0 :(得分:3)

YAML是序列化prefs的更好选择,但在这里我只是在prefs.txt文件中存储逗号分隔的字符串。

require "rubygems"
require "wx"
include Wx

class MyApp < App
  def on_init
    left, top, width, height = *prefs
    position = Point.new(left, top)
    size = Size.new(width, height)
    main = Frame.new(nil, -1, "Title", position, size)

    #when the window closes, save the location
    main.evt_close do |event|
      save_window_location(event.get_event_object)
      event.skip
    end
    main.show()
  end

  private

  def save_window_location(frame)
    self.prefs = [
      frame.position.x,
      frame.position.y,
      frame.size.width,
      frame.size.height
    ]
  end

  #load the prefs and return them as an array
  def prefs
    location = []
    begin
      location = File.read(prefs_filename).split(',').map{|s| s.to_i}
    rescue Exception
      #file didn't exist, or read failed
    end
    location = [100, 100, 300, 300] if location.size != 4
    return location
  end

  #save the prefs as a comma-delimited string
  def prefs=(prefs_array)
    File.open(prefs_filename, 'w') do |prefs_file|
      prefs_file << prefs_array.join(",")
    end
  end

  def prefs_filename
    'prefs.txt'
  end
end

MyApp.new.main_loop