'Classes/ActiveBasic/Windows/UI/Application.ab

Namespace ActiveBasic
Namespace Windows
Namespace UI

/*!
@date 2008/07/13
@brief アプリケーション全体に関わるようなこと……、主にメッセージループを管理するクラス。
@todo	メッセージフィルタとマルチスレッド対応
@author Egtra
*/
Class Application
Public
	/*!
	@brief メッセージループを回す
	@date 2008/07/13
	@param[in] form メインウィンドウ
	@author Egtra
	*/
	Static Sub Run(form As Form)
		f.Show(SW_SHOW)
		If IsNothing(form) = False Then
			form.AddMessageEvent(WM_DESTROY, AddressOf(Application.OnMainFormClosed))
		End If

		Dim m As MSG
		Do
			Dim ret = GetMessage(m, 0, 0, 0)
			If ret = 0 Or ret = -1 Then
				Exit Do
			End If
			TranslateMessage(m)
			DispatchMessage(m)
		Loop
'		OnThraedExit(EventArgs.Empty)
	End Sub

	/*!
	@brief メインウィンドウなしでメッセージループを回す
	@date 2008/07/13
	@author Egtra
	*/
	Static Sub Run()
		Run(Nothing)
	End Sub

	/*!
	@brief メッセージループを終わらせる。
	@date 2008/07/13
	@author Egtra
	*/
	Static Sub ExitThread()
		PostQuitMessage(0)
	End Sub

'#include "ApplicationEvent.sbp"

Private
	Static Sub OnMainFormClosed(sender As Object, e As EventArgs)
		ExitThread()
	End Sub

	main As Form
End Class

End Namespace 'UI
End Namespace 'Widnows
End Namespace 'ActiveBasic
