UART通信を用いた組み込みデバッグ用途向けメモリモニタ
リビジョン | 8d5b11694e92ef11e0b1b3e8f602b236557e91f0 (tree) |
---|---|
日時 | 2018-05-09 22:46:51 |
作者 | Yasushi Tanaka <tanaka_yasushi2008@yaho...> |
コミッター | Yasushi Tanaka |
ユーザ・アプリケーションを追加
@@ -53,7 +53,7 @@ | ||
53 | 53 | <Optimization>Disabled</Optimization> |
54 | 54 | <PreprocessorDefinitions>_CRTDBG_MAP_ALLOC;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
55 | 55 | <SDLCheck>true</SDLCheck> |
56 | - <AdditionalIncludeDirectories>$(ProjectDir)src\framework;$(ProjectDir)src\comm;$(ProjectDir)src\user;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |
56 | + <AdditionalIncludeDirectories>$(ProjectDir)src\framework;$(ProjectDir)src\comm;$(ProjectDir)src\app;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |
57 | 57 | </ClCompile> |
58 | 58 | <Link> |
59 | 59 | <SubSystem>Windows</SubSystem> |
@@ -80,6 +80,7 @@ | ||
80 | 80 | </Link> |
81 | 81 | </ItemDefinitionGroup> |
82 | 82 | <ItemGroup> |
83 | + <ClInclude Include="src\app\app.h" /> | |
83 | 84 | <ClInclude Include="src\comm\comm.h" /> |
84 | 85 | <ClInclude Include="src\framework\bdlist.h" /> |
85 | 86 | <ClInclude Include="src\framework\cons.h" /> |
@@ -90,6 +91,7 @@ | ||
90 | 91 | <ClInclude Include="src\framework\winmain.h" /> |
91 | 92 | </ItemGroup> |
92 | 93 | <ItemGroup> |
94 | + <ClCompile Include="src\app\app.c" /> | |
93 | 95 | <ClCompile Include="src\comm\comm.c" /> |
94 | 96 | <ClCompile Include="src\framework\bdlist.c" /> |
95 | 97 | <ClCompile Include="src\framework\cons.c" /> |
@@ -22,6 +22,15 @@ | ||
22 | 22 | <Filter Include="ヘッダー ファイル\comm"> |
23 | 23 | <UniqueIdentifier>{dcfe82fa-6677-4e75-a349-855d11d4cd3e}</UniqueIdentifier> |
24 | 24 | </Filter> |
25 | + <Filter Include="ヘッダー ファイル\app"> | |
26 | + <UniqueIdentifier>{7bc461d1-4990-4c9a-ae0e-8c40eec7bb6d}</UniqueIdentifier> | |
27 | + </Filter> | |
28 | + <Filter Include="ソース ファイル\comm"> | |
29 | + <UniqueIdentifier>{8cb68c7d-dbc1-4cc4-b781-83399b23163e}</UniqueIdentifier> | |
30 | + </Filter> | |
31 | + <Filter Include="ソース ファイル\app"> | |
32 | + <UniqueIdentifier>{7f74ed15-8047-46a8-b2bf-3cd283e0275c}</UniqueIdentifier> | |
33 | + </Filter> | |
25 | 34 | </ItemGroup> |
26 | 35 | <ItemGroup> |
27 | 36 | <ClInclude Include="src\framework\screen.h"> |
@@ -48,6 +57,9 @@ | ||
48 | 57 | <ClInclude Include="src\framework\logwin.h"> |
49 | 58 | <Filter>ヘッダー ファイル\framework</Filter> |
50 | 59 | </ClInclude> |
60 | + <ClInclude Include="src\app\app.h"> | |
61 | + <Filter>ヘッダー ファイル\app</Filter> | |
62 | + </ClInclude> | |
51 | 63 | </ItemGroup> |
52 | 64 | <ItemGroup> |
53 | 65 | <ClCompile Include="src\framework\winmain.c"> |
@@ -62,14 +74,17 @@ | ||
62 | 74 | <ClCompile Include="src\framework\bdlist.c"> |
63 | 75 | <Filter>ソース ファイル\framework</Filter> |
64 | 76 | </ClCompile> |
65 | - <ClCompile Include="src\comm\comm.c"> | |
66 | - <Filter>ヘッダー ファイル\comm</Filter> | |
67 | - </ClCompile> | |
68 | 77 | <ClCompile Include="src\framework\cons.c"> |
69 | 78 | <Filter>ソース ファイル\framework</Filter> |
70 | 79 | </ClCompile> |
71 | 80 | <ClCompile Include="src\framework\logwin.c"> |
72 | 81 | <Filter>ソース ファイル\framework</Filter> |
73 | 82 | </ClCompile> |
83 | + <ClCompile Include="src\comm\comm.c"> | |
84 | + <Filter>ソース ファイル\comm</Filter> | |
85 | + </ClCompile> | |
86 | + <ClCompile Include="src\app\app.c"> | |
87 | + <Filter>ソース ファイル\app</Filter> | |
88 | + </ClCompile> | |
74 | 89 | </ItemGroup> |
75 | 90 | </Project> |
\ No newline at end of file |
@@ -0,0 +1,28 @@ | ||
1 | +/* | |
2 | + * Debug Monitor Framework | |
3 | + * Author: Yasushi Tanaka | |
4 | + * | |
5 | + * [ アプリケーション ] | |
6 | + */ | |
7 | + | |
8 | +#include "header.h" | |
9 | +#include "winmain.h" | |
10 | +#include "logwin.h" | |
11 | +#include "comm.h" | |
12 | +#include "app.h" | |
13 | + | |
14 | +/* | |
15 | + * アプリケーション | |
16 | + * 実行 | |
17 | + */ | |
18 | +void app_run(void) | |
19 | +{ | |
20 | + UINT count; | |
21 | + | |
22 | + count = 0; | |
23 | + | |
24 | + while (TRUE == do_events(1000)) | |
25 | + { | |
26 | + comm_enum(); | |
27 | + } | |
28 | +} |
@@ -0,0 +1,15 @@ | ||
1 | +/* | |
2 | + * Debug Monitor Framework | |
3 | + * Author: Yasushi Tanaka | |
4 | + * | |
5 | + * [ アプリケーション ] | |
6 | + */ | |
7 | + | |
8 | +#pragma once | |
9 | + | |
10 | +/* | |
11 | + * グローバル関数 | |
12 | + */ | |
13 | + | |
14 | +/* アプリケーション実行 */ | |
15 | +void app_run(void); |
@@ -6,6 +6,7 @@ | ||
6 | 6 | */ |
7 | 7 | |
8 | 8 | #include "header.h" |
9 | +#include "logwin.h" | |
9 | 10 | #include "comm.h" |
10 | 11 | |
11 | 12 | /* |
@@ -15,6 +16,9 @@ | ||
15 | 16 | /* 最初の通信ポート */ |
16 | 17 | static COMM_PORT *g_comm_port_head; |
17 | 18 | |
19 | +/* 検出された通信ポート数 */ | |
20 | +static UINT g_comm_port_num; | |
21 | + | |
18 | 22 | /* |
19 | 23 | * 通信ポート |
20 | 24 | * ポートの初期化 |
@@ -403,12 +407,73 @@ static void comm_allport_destroy(void) | ||
403 | 407 | |
404 | 408 | /* |
405 | 409 | * 通信ポート |
410 | + * すべての通信ポートのオープンチェック | |
411 | + */ | |
412 | +static BOOL comm_allport_isopen(void) | |
413 | +{ | |
414 | + COMM_PORT *port; | |
415 | + | |
416 | + /* 初期化 */ | |
417 | + port = g_comm_port_head; | |
418 | + | |
419 | + /* ポートが有効である限り回る */ | |
420 | + while (NULL != port) | |
421 | + { | |
422 | + /* ポートがオープンされていればTRUEを返す */ | |
423 | + if (INVALID_HANDLE_VALUE != port->file_handle) | |
424 | + { | |
425 | + /* オープンされている */ | |
426 | + return TRUE; | |
427 | + } | |
428 | + | |
429 | + /* 次へ */ | |
430 | + port = (COMM_PORT*)port->bdlist.bdlist_next; | |
431 | + } | |
432 | + | |
433 | + /* すべてオープンされていない */ | |
434 | + return FALSE; | |
435 | +} | |
436 | + | |
437 | +/* | |
438 | + * 通信ポート | |
439 | + * すべての通信ポートの個数取得 | |
440 | + */ | |
441 | +static UINT comm_allport_getnum(void) | |
442 | +{ | |
443 | + COMM_PORT *port; | |
444 | + UINT num; | |
445 | + | |
446 | + /* 個数を初期化 */ | |
447 | + num = 0; | |
448 | + | |
449 | + /* 初期化 */ | |
450 | + port = g_comm_port_head; | |
451 | + | |
452 | + /* ポートが有効である限り回る */ | |
453 | + while (NULL != port) | |
454 | + { | |
455 | + /* 個数を+1 */ | |
456 | + num++; | |
457 | + | |
458 | + /* 次へ */ | |
459 | + port = (COMM_PORT*)port->bdlist.bdlist_next; | |
460 | + } | |
461 | + | |
462 | + /* 個数を返す */ | |
463 | + return num; | |
464 | +} | |
465 | + | |
466 | +/* | |
467 | + * 通信ポート | |
406 | 468 | * 初期化 |
407 | 469 | */ |
408 | 470 | void comm_init(void) |
409 | 471 | { |
410 | 472 | /* 通信ポートなし */ |
411 | 473 | g_comm_port_head = NULL; |
474 | + | |
475 | + /* ポート数を最大値に初期化 */ | |
476 | + g_comm_port_num = 0xFFFFFFFF; | |
412 | 477 | } |
413 | 478 | |
414 | 479 | /* |
@@ -431,6 +496,15 @@ void comm_enum(void) | ||
431 | 496 | GUID guid; |
432 | 497 | DWORD required; |
433 | 498 | HDEVINFO hDevInfo; |
499 | + UINT num; | |
500 | + COMM_PORT *port; | |
501 | + | |
502 | + /* ポートがオープンされていれば何もしない */ | |
503 | + result = comm_allport_isopen(); | |
504 | + if (FALSE != result) | |
505 | + { | |
506 | + return; | |
507 | + } | |
434 | 508 | |
435 | 509 | /* すべての通信ポートの破棄 */ |
436 | 510 | comm_allport_destroy(); |
@@ -458,4 +532,33 @@ void comm_enum(void) | ||
458 | 532 | |
459 | 533 | /* デバイス情報セットの使用を終了 */ |
460 | 534 | SetupDiDestroyDeviceInfoList(hDevInfo); |
535 | + | |
536 | + /* 個数が変更ない場合は何もしない */ | |
537 | + num = comm_allport_getnum(); | |
538 | + if (g_comm_port_num == num) | |
539 | + { | |
540 | + return; | |
541 | + } | |
542 | + | |
543 | + /* ポート個数を更新 */ | |
544 | + g_comm_port_num = num; | |
545 | + | |
546 | + /* ポートがない場合 */ | |
547 | + if (0 == num) | |
548 | + { | |
549 | + logwin_printf("COMポートが見つかりません"); | |
550 | + return; | |
551 | + } | |
552 | + else | |
553 | + { | |
554 | + logwin_printf("COMポートが%uポート見つかりました", num); | |
555 | + | |
556 | + /* ポートループ */ | |
557 | + port = g_comm_port_head; | |
558 | + while (NULL != port) | |
559 | + { | |
560 | + logwin_printfw(port->friendly_name); | |
561 | + port = (COMM_PORT*)port->bdlist.bdlist_next; | |
562 | + } | |
563 | + } | |
461 | 564 | } |
@@ -203,7 +203,7 @@ void logwin_resize(int x, int y, int width, int height) | ||
203 | 203 | |
204 | 204 | /* |
205 | 205 | * Windowsログ |
206 | - * ログ出力 | |
206 | + * ログ出力(char) | |
207 | 207 | */ |
208 | 208 | void logwin_out(const char *log) |
209 | 209 | { |
@@ -269,7 +269,7 @@ void logwin_out(const char *log) | ||
269 | 269 | |
270 | 270 | /* |
271 | 271 | * Windowsログ |
272 | - * 書式つき出力 | |
272 | + * 書式つき出力(char) | |
273 | 273 | */ |
274 | 274 | void logwin_printf(const char *format, ...) |
275 | 275 | { |
@@ -287,3 +287,41 @@ void logwin_printf(const char *format, ...) | ||
287 | 287 | /* ログ出力 */ |
288 | 288 | logwin_out(multibyte); |
289 | 289 | } |
290 | + | |
291 | +/* | |
292 | + * Windowsログ | |
293 | + * 書式つき出力(wchar_t) | |
294 | + */ | |
295 | +void logwin_printfw(const wchar_t *format, ...) | |
296 | +{ | |
297 | + wchar_t wide[0x400]; | |
298 | + char multibyte[0x400]; | |
299 | + va_list ap; | |
300 | + int result; | |
301 | + | |
302 | + assert(NULL != format); | |
303 | + | |
304 | + /* フォーマット */ | |
305 | + va_start(ap, format); | |
306 | + vswprintf_s(wide, _countof(wide), format, ap); | |
307 | + wide[_countof(wide) - 1] = '\0'; | |
308 | + va_end(ap); | |
309 | + | |
310 | + /* マルチバイト文字へ変換 */ | |
311 | + result = WideCharToMultiByte( | |
312 | + CP_ACP, | |
313 | + 0, | |
314 | + wide, | |
315 | + -1, | |
316 | + multibyte, | |
317 | + _countof(multibyte), | |
318 | + NULL, | |
319 | + NULL); | |
320 | + if (0 == result) | |
321 | + { | |
322 | + return; | |
323 | + } | |
324 | + | |
325 | + /* ログ出力 */ | |
326 | + logwin_out(multibyte); | |
327 | +} |
@@ -17,8 +17,11 @@ BOOL logwin_init(HWND parent, int x, int y, int width, int height); | ||
17 | 17 | /* リサイズ */ |
18 | 18 | void logwin_resize(int x, int y, int width, int height); |
19 | 19 | |
20 | -/* ログ追加 */ | |
20 | +/* ログ追加(char) */ | |
21 | 21 | void logwin_out(const char *log); |
22 | 22 | |
23 | -/* 書式つき出力 */ | |
23 | +/* 書式つき出力(char) */ | |
24 | 24 | void logwin_printf(const char *format, ...); |
25 | + | |
26 | +/* 書式つき出力(wchar_t) */ | |
27 | +void logwin_printfw(const wchar_t *format, ...); |
@@ -11,6 +11,7 @@ | ||
11 | 11 | #include "monitor.h" |
12 | 12 | #include "logwin.h" |
13 | 13 | #include "comm.h" |
14 | +#include "app.h" | |
14 | 15 | #include "winmain.h" |
15 | 16 | |
16 | 17 | /* |
@@ -54,6 +55,15 @@ TEXTMETRIC g_tm; | ||
54 | 55 | /* フォントの高さ(マージン含む) */ |
55 | 56 | LONG g_tmAllHeight; |
56 | 57 | |
58 | +/* WM_USERメッセージをポストした */ | |
59 | +BOOL g_bUserPost; | |
60 | + | |
61 | +/* WM_CLOSEメッセージを受けた */ | |
62 | +BOOL g_bCloseReq; | |
63 | + | |
64 | +/* ユーザアプリケーションが終了した */ | |
65 | +BOOL g_bUserQuit; | |
66 | + | |
57 | 67 | /* |
58 | 68 | * 構造体定義 |
59 | 69 | */ |
@@ -306,7 +316,6 @@ static BOOL OnCreate(HWND hWnd, const CREATESTRUCT *lpcs) | ||
306 | 316 | |
307 | 317 | /* ポートを初期化 */ |
308 | 318 | comm_init(); |
309 | - comm_enum(); | |
310 | 319 | |
311 | 320 | /* チャイルドウィンドウのサイズを決定 */ |
312 | 321 | CalcChilldRects(hWnd); |
@@ -426,8 +435,68 @@ static void OnSize(HWND hWnd) | ||
426 | 435 | height = g_rcChilds.rcLogWin.bottom - g_rcChilds.rcLogWin.top; |
427 | 436 | assert(0 <= height); |
428 | 437 | logwin_resize(x, y, width, height); |
438 | +} | |
439 | + | |
440 | +/* | |
441 | + * WinMain | |
442 | + * WM_ACTIVATEメッセージハンドラ | |
443 | + */ | |
444 | +static void OnActivate(HWND hWnd) | |
445 | +{ | |
446 | + assert(NULL != hWnd); | |
447 | + | |
448 | + /* WM_USERをポストしていない場合 */ | |
449 | + if (FALSE == g_bUserPost) | |
450 | + { | |
451 | + /* WM_USERポスト済みとして */ | |
452 | + g_bUserPost = TRUE; | |
429 | 453 | |
430 | - logwin_printf("リサイズ width=%d height=%d", width, height); | |
454 | + /* WM_USERをポストする */ | |
455 | + PostMessage(hWnd, WM_USER, 0, 0); | |
456 | + } | |
457 | +} | |
458 | + | |
459 | +/* | |
460 | + * WinMain | |
461 | + * WM_CLOSEメッセージハンドラ | |
462 | + */ | |
463 | +static void OnClose(HWND hWnd) | |
464 | +{ | |
465 | + assert(NULL != hWnd); | |
466 | + | |
467 | + /* クローズ要求有り */ | |
468 | + g_bCloseReq = TRUE; | |
469 | + | |
470 | + /* アプリケーションが終了していれば、DestroyWindowを即座に発行 */ | |
471 | + if (FALSE != g_bUserQuit) | |
472 | + { | |
473 | + DestroyWindow(hWnd); | |
474 | + } | |
475 | +} | |
476 | + | |
477 | +/* | |
478 | + * WinMain | |
479 | + * WM_USERメッセージハンドラ | |
480 | + */ | |
481 | +static void OnUser(HWND hWnd) | |
482 | +{ | |
483 | + assert(NULL != hWnd); | |
484 | + | |
485 | + /* ユーザアプリは終了していない */ | |
486 | + g_bUserQuit = FALSE; | |
487 | + | |
488 | + /* アプリケーション呼び出し */ | |
489 | + app_run(); | |
490 | + | |
491 | + /* ユーザアプリは終了した */ | |
492 | + logwin_printf("アプリケーションは終了しました"); | |
493 | + g_bUserQuit = TRUE; | |
494 | + | |
495 | + /* 終了要求が出ていれば、ここでDestroyWindowを発行 */ | |
496 | + if (FALSE != g_bCloseReq) | |
497 | + { | |
498 | + DestroyWindow(hWnd); | |
499 | + } | |
431 | 500 | } |
432 | 501 | |
433 | 502 | /* |
@@ -473,6 +542,24 @@ static LRESULT CALLBACK FrameWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPA | ||
473 | 542 | OnSize(hWnd); |
474 | 543 | return 0; |
475 | 544 | |
545 | + /* ウィンドウが表示された */ | |
546 | + case WM_ACTIVATE: | |
547 | + /* ハンドラを呼び出す */ | |
548 | + OnActivate(hWnd); | |
549 | + return 0; | |
550 | + | |
551 | + /* ウィンドウが終了要求された */ | |
552 | + case WM_CLOSE: | |
553 | + /* ハンドラを呼び出す */ | |
554 | + OnClose(hWnd); | |
555 | + return 0; | |
556 | + | |
557 | + /* ユーザメッセージ */ | |
558 | + case WM_USER: | |
559 | + /* ハンドラを呼び出す */ | |
560 | + OnUser(hWnd); | |
561 | + return 0; | |
562 | + | |
476 | 563 | /* その他 */ |
477 | 564 | default: |
478 | 565 | break; |
@@ -556,6 +643,9 @@ static BOOL InitInstance(HINSTANCE hInstance) | ||
556 | 643 | /* static変数を初期化 */ |
557 | 644 | g_hFrameWnd = NULL; |
558 | 645 | memset(&g_rcChilds, 0, sizeof(g_rcChilds)); |
646 | + g_bUserPost = FALSE; | |
647 | + g_bCloseReq = FALSE; | |
648 | + g_bUserQuit = FALSE; | |
559 | 649 | |
560 | 650 | /* マルチメディアタイマの最小分解能を設定 */ |
561 | 651 | mmResult = timeBeginPeriod(1); |
@@ -621,35 +711,38 @@ static void ExitInstance(void) | ||
621 | 711 | |
622 | 712 | /* |
623 | 713 | * WinMain |
714 | + * メッセージポンプ | |
715 | + * ※アプリケーションを終了すべき場合はFALSEを返す | |
624 | 716 | */ |
625 | -int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) | |
717 | +BOOL do_events(DWORD dwTimeOut) | |
626 | 718 | { |
627 | 719 | MSG msg; |
720 | + DWORD dwTime; | |
721 | + DWORD dwDiff; | |
628 | 722 | |
629 | - UNREFERENCED_PARAMETER(hPrevInstance); | |
630 | - UNREFERENCED_PARAMETER(pCmdLine); | |
723 | + /* 現在の時間を記憶 */ | |
724 | + dwTime = timeGetTime(); | |
631 | 725 | |
632 | - /* インスタンスの初期化 */ | |
633 | - if (InitInstance(hInstance) == FALSE) | |
726 | + /* ループ */ | |
727 | + for (;;) | |
634 | 728 | { |
635 | - return 0; | |
636 | - } | |
729 | + /* 時間差分を得る */ | |
730 | + dwDiff = (DWORD)(timeGetTime() - dwTime); | |
637 | 731 | |
638 | - /* ウィンドウの表示と更新 */ | |
639 | - ShowWindow(g_hFrameWnd, nCmdShow); | |
640 | - UpdateWindow(g_hFrameWnd); | |
732 | + /* 時間差分を超えたら抜ける */ | |
733 | + if (dwDiff > dwTimeOut) | |
734 | + { | |
735 | + break; | |
736 | + } | |
641 | 737 | |
642 | - /* メッセージループ(メッセージポンプ対応) */ | |
643 | - for (;;) | |
644 | - { | |
645 | - /* メッセージがキューにあるか */ | |
738 | + /* メッセージが到着しているか */ | |
646 | 739 | if (TRUE == PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) |
647 | 740 | { |
648 | 741 | /* メッセージをキューから取得 */ |
649 | 742 | if (GetMessage(&msg, NULL, 0, 0) <= 0) |
650 | 743 | { |
651 | - /* WM_QUITなら終了 */ | |
652 | - break; | |
744 | + /* WM_QUITならFALSEを返す */ | |
745 | + return FALSE; | |
653 | 746 | } |
654 | 747 | |
655 | 748 | /* メッセージをディスパッチ */ |
@@ -658,14 +751,59 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine | ||
658 | 751 | } |
659 | 752 | else |
660 | 753 | { |
661 | - /* アイドル処理 */ | |
754 | + /* アイドル処理*/ | |
662 | 755 | screen_idle(); |
663 | 756 | cons_idle(); |
664 | 757 | monitor_idle(); |
665 | 758 | |
666 | - /* 必ずSleepを入れる */ | |
759 | + /* スリープ */ | |
667 | 760 | Sleep(10); |
668 | 761 | } |
762 | + | |
763 | + /* WM_CLOSEが到着していればFALSEを返す */ | |
764 | + if (FALSE != g_bCloseReq) | |
765 | + { | |
766 | + return FALSE; | |
767 | + } | |
768 | + } | |
769 | + | |
770 | + /* アプリケーションを継続できるので、TRUEを返す */ | |
771 | + return TRUE; | |
772 | +} | |
773 | + | |
774 | +/* | |
775 | + * WinMain | |
776 | + */ | |
777 | +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) | |
778 | +{ | |
779 | + MSG msg; | |
780 | + | |
781 | + UNREFERENCED_PARAMETER(hPrevInstance); | |
782 | + UNREFERENCED_PARAMETER(pCmdLine); | |
783 | + | |
784 | + /* インスタンスの初期化 */ | |
785 | + if (InitInstance(hInstance) == FALSE) | |
786 | + { | |
787 | + return 0; | |
788 | + } | |
789 | + | |
790 | + /* ウィンドウの表示と更新 */ | |
791 | + ShowWindow(g_hFrameWnd, nCmdShow); | |
792 | + UpdateWindow(g_hFrameWnd); | |
793 | + | |
794 | + /* メッセージループ */ | |
795 | + for (;;) | |
796 | + { | |
797 | + /* メッセージをキューから取得 */ | |
798 | + if (GetMessage(&msg, NULL, 0, 0) <= 0) | |
799 | + { | |
800 | + /* WM_QUITなら終了 */ | |
801 | + break; | |
802 | + } | |
803 | + | |
804 | + /* メッセージをディスパッチ */ | |
805 | + TranslateMessage(&msg); | |
806 | + DispatchMessage(&msg); | |
669 | 807 | } |
670 | 808 | |
671 | 809 | /* インスタンスの終了 */ |
@@ -22,3 +22,10 @@ extern TEXTMETRIC g_tm; | ||
22 | 22 | |
23 | 23 | /* フォントの高さ(マージン含む) */ |
24 | 24 | extern LONG g_tmAllHeight; |
25 | + | |
26 | +/* | |
27 | + * グローバル関数 | |
28 | + */ | |
29 | + | |
30 | +/* イベント処理(FALSEを返すと脱出要求) */ | |
31 | +BOOL do_events(DWORD dwTimeOut); |