source: trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/UI/Application.ab@ 559

Last change on this file since 559 was 559, checked in by イグトランス (egtra), 16 years ago

UI_Sampleの追加。イベントのコメントアウト解除。Form.abからテスト部分を除去。Application.DoEventsを実装。MakeControlEventHandlerを静的メンバのイベント対応へ。WindowsExceptionの追加。

File size: 1.8 KB
Line 
1'Classes/ActiveBasic/Windows/UI/Application.ab
2
3Namespace ActiveBasic
4Namespace Windows
5Namespace UI
6
7/*!
8@date 2008/07/13
9@brief アプリケーション全体に関わるようなこと……、主にメッセージループを管理するクラス。
10@todo メッセージフィルタとマルチスレッド対応
11@author Egtra
12*/
13Class Application
14Public
15 /*!
16 @brief メッセージループを回す
17 @date 2008/07/13
18 @param[in] form メインウィンドウ
19 @author Egtra
20 */
21 Static Sub Run(form As Form)
22 If IsNothing(form) = False Then
23 form.Show(SW_SHOW)
24 form.Update()
25 form.AddMessageEvent(WM_DESTROY, AddressOf(Application.OnMainFormClosed))
26 End If
27
28 Dim m As MSG
29 Do
30 Dim ret = GetMessage(m, 0, 0, 0)
31 If ret = 0 Or ret = -1 Then
32 Exit Do
33 End If
34 TranslateMessage(m)
35 DispatchMessage(m)
36 Loop
37
38 End Sub
39
40 /*!
41 @brief メインウィンドウなしでメッセージループを回す
42 @date 2008/07/13
43 @author Egtra
44 */
45 Static Sub Run()
46 Run(Nothing)
47 End Sub
48
49 /*!
50 @brief メッセージループを終わらせる。
51 @date 2008/07/13
52 @author Egtra
53 */
54 Static Sub ExitThread()
55 PostQuitMessage(0)
56 End Sub
57
58 /*!
59 @brief メッセージキューに溜まったメッセージを処理する。
60 @date 2008/07/18
61 @author Egtra
62 ここのコードから改変。
63 http://www.activebasic.com/forum/viewtopic.php?t=426
64 */
65 Static Sub DoEvents()
66 Dim msg As MSG
67 While PeekMessage(msg, 0, 0, 0, PM_REMOVE) <> FALSE
68 Select Case msg.message
69 Case WM_QUIT
70 PostQuitMessage(0) 'Run()で捕まえてくれるようPostしなおす。
71 Case Else
72 TranslateMessage(msg)
73 DispatchMessage(msg)
74 End Select
75 Wend
76 End Sub
77
78#include "ApplicationEvent.sbp"
79
80Private
81 Static Sub OnMainFormClosed(sender As Object, e As Args)
82 OnThreadExit(Args.Empty)
83 ExitThread()
84 End Sub
85End Class
86
87End Namespace 'UI
88End Namespace 'Widnows
89End Namespace 'ActiveBasic
Note: See TracBrowser for help on using the repository browser.