Project1

标题: 想做一個訊息窗口,改它的標題 [打印本页]

作者: duzine    时间: 2017-3-12 12:01
标题: 想做一個訊息窗口,改它的標題

如果我輸入 腳本 msgbox "hello"
接著會跳出訊息窗

窗口的標題我想修改,請問該怎麼改呢?
比方說,遊戲命名為 "你好"

那麼這個訊息窗標題也會叫 "你好"
我想改成其他訊息
作者: axicc    时间: 2017-3-12 13:59
改变标题的图片文字
作者: RaidenInfinity    时间: 2017-3-12 14:46
本帖最后由 RaidenInfinity 于 2017-3-12 15:56 编辑

RUBY 代码复制
  1. # 按钮常量
  2. BUTTONS_OK = 0 #只有确定
  3. BUTTONS_OKCANCEL = 1 #确定/取消
  4. BUTTONS_ABORTRETRYIGNORE = 2 #终止/重试/跳过
  5. BUTTONS_YESNO = 4 #是/否
  6.  
  7. # 返回码常量
  8. CLICKED_OK = 1 #按下确定
  9. CLICKED_CANCEL = 2 #按下取消
  10. CLICKED_ABORT = 3 #按下终止
  11. CLICKED_RETRY = 4 #按下重试
  12. CLICKED_IGNORE = 5 #按下无视
  13. CLICKED_YES = 6 #按下是
  14. CLICKED_NO = 7 #按下否
  15.  
  16. #系统函数导入
  17. MSGBOX = Win32API.new('user32','MessageBoxW','LPPL','L')
  18. MBWC = Win32API.new("kernel32","MultiByteToWideChar",'LLPLPL','L')
  19. #获取游戏窗口的"把柄"
  20. HWND = Win32API.new('user32', 'FindWindow', 'PP','L').call('RGSS Player',nil)
  21.  
  22. #修正UTF-8字符的问题
  23. def multi_to_wide(txt)
  24.   int = MBWC.call(65001, 0, txt, -1, nil, 0)
  25.   return "" if int <= 0
  26.   buf = ' ' * int * 2
  27.   MBWC.call(65001, 0, txt, -1, buf, int)
  28.   return buf + "\0\0"
  29. end  
  30.  
  31. #显示讯息窗
  32. #递入参数:内容,标题,按钮设定
  33. #返回内容:按下的按钮
  34. def message_box(txt, title = "", buttons = BUTTONS_OK)
  35.     return MSGBOX.call(HWND, multi_to_wide(txt), multi_to_wide(title), buttons)
  36. end
  37.  
  38. #范例:显示讯息窗
  39. message_box("讯息内容", "讯息标题")
  40.  
  41. #范例:显示讯息窗,按钮设置为:是/否
  42. response = message_box("内容", "标题", BUTTONS_YESNO)
  43. if response == CLICKED_YES
  44.     p "用户选择了是"
  45. else
  46.     p "用户选择了否"
  47. end


RGSS3自带的msgbox的确是不够用的。因此得另外开Win32API呼叫系统方法来执行显示。
基本上是用了user32.dll里面的MessageBoxW系统API函数,然后需要kernel32的MultiByteToWideChar来修正UTF-8字符。
(这是因为MessageBoxW需要UTF-16编码的字符串作为参数,而RGSS3用的是UTF-8)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1