返回列表 发帖

[GUI管理] GUI的消息循环模式如何在加载窗体时执行函数?

我希望在启动窗体时自动做一些判断,根据参数选择一些初始化的函数操作,类似于vb的Form_Load()里面编写代码。但是消息循环模式有退出的事件$GUI_EVENT_CLOSE,却没有启动的事件,请问各位高手如何实现?

本帖最后由 kk_lee69 于 2018-2-13 09:08 编辑

回复 1# everroc

窗體 創建  不就是啟動了  只是 秀不秀出來
還是建議 寫個 小範例 人家才會知道你要表達的意思??

TOP

按win32 sdk 的套路来搞   要在消息循环里   switch  添加 case  处理 WM_CREATE 消息
au3 里可以这么搞
GUISetState() 显示窗口 前调用 GUIRegisterMsg 给$WM_SHOWWINDOW消息注册一个回调函数
  1. ;修正自 GUIRegisterMsg 函数帮助的例子
  2. #include <GUIConstantsEx.au3>
  3. #include <WindowsConstants.au3>
  4. #include <ButtonConstants.au3>

  5. Example()

  6. Func Example()
  7.         Local Const $BS_OWNERDRAW = 0x0000000B
  8.         Local $hGUI, $nButton, $nButton2, $GUIMsg

  9.         $hGUI = GUICreate("My Ownerdrawn Created Button", 300, 200)
  10.         $nButton = GUICtrlCreateButton("Button1", 90, 50, 120, 30)
  11.         $nButton2 = GUICtrlCreateButton("Button2", 90, 110, 120, 30)

  12.         GUIRegisterMsg($WM_SHOWWINDOW, "MY_WM_SHOWWINDOW")


  13.         GUISetState()

  14.         While 1
  15.                 $GUIMsg = GUIGetMsg()
  16.                
  17.                 Switch $GUIMsg
  18.                         Case $GUI_EVENT_CLOSE
  19.                                 ExitLoop
  20.                                
  21.                         Case $nButton
  22.                                 ; Normally should not run through cause of our MY_WM_COMMAND function
  23.                                 MsgBox(0, "Info", "Button pressed")
  24.                                
  25.                         Case $nButton2
  26.                                 ; Normally should not run through cause of our MY_WM_COMMAND function
  27.                                 MsgBox(0, "Info", "Button2 pressed")
  28.                 EndSwitch
  29.         WEnd
  30. EndFunc

  31. Func MY_WM_SHOWWINDOW($hWnd, $Msg, $wParam, $lParam)
  32.         MsgBox(0, "WM_SHOWWINDOW", "au3 上玩 WIN32 SDK")
  33. EndFunc
复制代码

TOP

最怕你非得把A语言中的路子搬到B语言中,而不是在B中考虑B的方式。

TOP

  1. ;修正自 GUIRegisterMsg 函数帮助的例子
  2. #include <GUIConstantsEx.au3>
  3. #include <WindowsConstants.au3>
  4. #include <ButtonConstants.au3>

  5. Local $Button2name
  6. Local $Windowtitle = "窗口标题"

  7. Example()

  8. Func Example()
  9.         Local Const $BS_OWNERDRAW = 0x0000000B
  10.         Local $hGUI, $nButton, $nButton2, $GUIMsg

  11.        
  12.         $hGUI = GUICreate($Windowtitle, 300, 200)
  13.         $nButton = GUICtrlCreateButton("Button1", 90, 50, 120, 30)
  14.         Button2name()
  15.         $nButton2 = GUICtrlCreateButton($Button2name, 90, 110, 120, 30)

  16.         GUIRegisterMsg($WM_SHOWWINDOW, "MY_WM_SHOWWINDOW")
  17.        
  18.         MsgBox(4096, "提示", "窗口创建完成,准备显示。")

  19.         GUISetState()

  20.         While 1
  21.                 $GUIMsg = GUIGetMsg()

  22.                 Switch $GUIMsg
  23.                         Case $GUI_EVENT_CLOSE
  24.                                 ExitLoop

  25.                         Case $nButton
  26.                                 ; Normally should not run through cause of our MY_WM_COMMAND function
  27.                                 MsgBox(0, "Info", "Button pressed")

  28.                         Case $nButton2
  29.                                 ; Normally should not run through cause of our MY_WM_COMMAND function
  30.                                 MsgBox(0, "Info", "Button2 pressed")
  31.                 EndSwitch
  32.         WEnd
  33. EndFunc   ;==>Example

  34. Func MY_WM_SHOWWINDOW($hWnd, $Msg, $wParam, $lParam)
  35.         MsgBox(0, "WM_SHOWWINDOW", "au3 上玩 WIN32 SDK")
  36. EndFunc   ;==>MY_WM_SHOWWINDOW

  37. Func Button2name()
  38.         $Button2name = "按钮2"
  39. EndFunc   ;==>Button2name
复制代码

TOP

返回列表