Namespace System
Namespace Windows
Namespace Forms


Enum DialogResult
	None	= NULL		'ダイアログ ボックスから Nothing が返されます。つまり、モーダル ダイアログ ボックスの実行が継続します。 
	Abort	= IDABORT	'ダイアログ ボックスの戻り値は Abort です (通常は "中止" というラベルが指定されたボタンから送られます)。 
	Cancel	= IDCANCEL	'ダイアログ ボックスの戻り値は Cancel です (通常は "キャンセル" というラベルが指定されたボタンから送られます)。 
	Ignore	= IDIGNORE	'ダイアログ ボックスの戻り値は Ignore です (通常は "無視" というラベルが指定されたボタンから送られます)。 
	No		= IDNO		'ダイアログ ボックスの戻り値は No です (通常は "いいえ" というラベルが指定されたボタンから送られます)。 
	OK		= IDOK		'ダイアログ ボックスの戻り値は OK です (通常は "OK" というラベルが指定されたボタンから送られます)。 
	Retry	= IDRETRY	'ダイアログ ボックスの戻り値は Retry です (通常は "再試行" というラベルが指定されたボタンから送られます)。 
	Yes		= IDYES		'ダイアログ ボックスの戻り値は Yes です (通常は "はい" というラベルが指定されたボタンから送られます)。 
End Enum

Class Form
	Inherits ContainerControl
Public

	Sub Form()
		With createParams
			.Style		or= WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN
			.ExStyle	or= WS_EX_WINDOWEDGE or WS_EX_CONTROLPARENT or WS_EX_APPWINDOW
			.Width		= 300
			.Height		= 300
		End With
	End Sub

	Function ShowDialog() As DialogResult
		Dim isParentEnable = False
		If Not ActiveBasic.IsNothing( This.Parent ) Then
			' 親コントロールを無効にする
			isParentEnable = This.Parent.Enabled
			This.Parent.Enabled = False
		End If

		This.Show()

		' メッセージループ
		Dim msg As MSG, iResult As Long
		Do
			iResult=GetMessage(msg,0,0,0)
			If iResult=0 or iResult=-1 Then Exit Do
			If IsDialogMessage(This.Handle,msg) Then Continue
			TranslateMessage(msg)
			DispatchMessage(msg)
		Loop

		If Not ActiveBasic.IsNothing( This.Parent ) Then
			' もともと親コントロールが有効だった場合には有効に戻す
			If isParentEnable Then
				This.Parent.Enabled = True
			End If
		End If

		Return msg.wParam As DialogResult
	End Function
End Class


End Namespace
End Namespace
End Namespace
