前回作成したAutoit ウィンドウの作成~ボタンとInputBox~に、子ウィンドウとリストメニューを追加するサンプルコードを紹介します。
リストメニューを使用すれば、メニューを追加した時に、何が追加されているかの管理が楽になります。
メニューリストのサンプルコード
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
If _Singleton("WRCMenu", 1) = 0 Then
MsgBox(0, "WRCMenu", "既に起動しています")
Exit
EndIf;==>ここまで
Opt("TrayIconHide", 1)
$Gui = GUICreate("WRCMenu", 430, 100, -1, -1, -1, $WS_EX_ACCEPTFILES)
$Input_1 = GUICtrlCreateInput("", 10, 5, 340, 20)
GUICtrlSetState($Input_1, $GUI_DROPACCEPTED)
$Input_2 = GUICtrlCreateInput("", 10, 35, 340, 20)
$btn = GUICtrlCreateButton("開く", 360, 5, 60, 20)
$btn2 = GUICtrlCreateButton("追加", 360, 35, 60, 20)
$btn3 = GUICtrlCreateButton("メニューリスト", 10, 65, 410, 20)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $btn3
$Form1 = GUICreate("メニューリスト", 300, 300, -1, -1, -1, -1, $Gui)
$ListView1 = GUICtrlCreateListView("追加されているメニュー", 10, 10, 280, 250)
_GUICtrlListView_SetColumnWidth($ListView1, 0, 280)
$btn4 = GUICtrlCreateButton("削除", 10, 265, 280, 25)
GUISetState(@SW_SHOW)
While 1
$msgg = GUIGetMsg()
Select
Case $msgg = $GUI_EVENT_CLOSE
GUIDelete($Form1)
ExitLoop
EndSelect
WEnd
EndSelect
WEnd
子ウィンドウとは
ウィンドウには、親ウィンドウと子ウィンドウがあります。
親ウィンドウとは、メインウィンドウのことで、ユーザー自身が決められます。
ウィンドウは複数作成できますので、ウィンドウが1つしかない場合、それがメインウインドウになります。
$Gui = GUICreate("WRCMenu", 430, 100, -1, -1, -1, $WS_EX_ACCEPTFILES) ; メインウィンドウ($Gui)
;子ウィンドウとは、メインウィンドウの中に、さらに追加されたウィンドウです。
$Form1 = GUICreate("メニューリスト", 300, 300, -1, -1, -1, -1, $Gui); 子ウィンドウ($Form1)
$Guiを親ウィンドウとして指定しています。
親ウィンドウを指定しなければ、2つのメインウィンドウが作成されます。
プログラムの用途によって使い分けてください。
コードの説明
Case $msg = $btn3; メニューリストボタンが押されたら
$Form1 = GUICreate("メニューリスト", 300, 300, -1, -1, -1, -1, $Gui); 子ウィンドウを作成します。
$ListView1 = GUICtrlCreateListView("追加されているメニュー", 10, 10, 280, 250); ListViewを作成します。
_GUICtrlListView_SetColumnWidth($ListView1, 0, 280); ListViewの幅を指定します。※<GuiListView.au3>のインクルードが必要になります。
$btn4 = GUICtrlCreateButton("削除", 10, 265, 280, 25); ボタンを作成します。
GUISetState(@SW_SHOW); ウィンドウを表示します。
While 1; 無限ループ
$msgg = GUIGetMsg(); ウィンドウからのメッセージを受信します。
Select; 条件付き命令文を開始します。
Case $msgg = $GUI_EVENT_CLOSE; ウィンドウの閉じるボタンまたはxが押されたら
GUIDelete($Form1); ウィンドウ($Form1)を削除します。
ExitLoop; ループを抜けます。
EndSelect; 条件付き命令文を終了します。
WEnd; 無限ループはここまで
子ウィンドウの注意事項
1.GUIDelete($Form1)
GUIDeleteでウィンドウを削除せずに、ExitLoopのみを記述し、閉じるボタンを押すと、ループを抜けるだけでウィンドウが表示されたままになります。
もう一度閉じるボタンを押すと親ウィンドウもすべて終了されてしまいます。
2.子ウィンドウを閉じるときは、必ずループを抜けること
子ウィンドウを閉じる際に、ExitLoopを記述せずに、GUIDeleteのみでウィンドウを削除しても、ウィンドウは削除されますが、ループを抜けていない状態なので、他の操作も、プログラムを閉じることもできなくなります。
コメント