\n |
[ トップページ ]
[ ____CommandPrompt ]
[ ____JScript ]
[ ____MySQL ]
[ ____Cygwin ]
[ ____Java ]
[ ____Emacs ]
[ ____Make ]
[ ____Perl ]
[ ____Python ]
[ ____OpenGL ]
[ ____C# ]
[ ____StyleSheet ]
[ ____C++ ]
[ ____Winsock ]
[ ____Thread ]
[ ____VisualStudio ]
[ ____C ]
[ ____Win32API ]
[ ____Lua ]
[ ____PhotoShop ]
ヘッダ検索
■ 機能限定のウィンドウをつくる(DialogBox MessageBox)
POINT
Window Program は Window と Proc のペアでひとつ
これを簡単に提供するのが
DialogBox, MessageBox
機能が限定された Window のこと
Application
-----------------------------------------
DialogBox
DlgProc()
-----------------------------------------
|
MessageLoop -- // メッセージループはシステムが行う。
Windows
-----------------------------------------
SYNTAX
int DialogBox
( DialogBox() 作成時に Proc Address を登録する )
DialogBox() の構造
Windows は 複数の Proc Address をもつ.
Message を送信する Window から Proc を選ぶ.
DialogBox の RetVal は Windows が処理する. ( App にはかえらない )
-> Message を処理しない場合は, false を返してね
-> 終わるわけではない
-> false == [ Message 無視 ]といいかえよう.
Windows が DialogBox の MessageLoop を管理する.
-> 別に Menu から呼ばないといけないわけではない.
DialogBox() は制御がかえらない
IDCANCEL は固定値 ?
-> [X] を押すと WM_CLOSE が送信. 無視すると, WM_COMMAND + IDCANCEL が送信.
DialogBox(); は内部で次のような処理をする.
CreateWindowEx();
WM_SETFONT,
WM_INITDIALOG,
■ MessageBox
DESC
window の生成なしで, Dialog の生成が可能
POINT
MessageBox は DialogBox よりもさらに簡略化した Window
Callback してもらう関数を登録することもできないため
ボタンを押した結果をもらうという決められた操作に限定される。
SYNTAX
int MessageBox(
HWND hWnd , // 親ウィンドウ
LPCTSTR lpText , // メッセージ
LPCTSTR lpCaption ,
UINT uType
);
POINT
ARG1 は 制御をとめたい Window に利用できる。
RET
押されたボタン表す整数
IDYES | IDNO | IDOK | IDRETRY | IDIGNORE | IDCANCEL | IDABORT
MessageBox( NULL, "message", "title", MB_OK );
// 次のように切り替える
#ifdef UNICODE
#define wsprintf wsprintfW
#else
#define wsprintf wsprintfA
#endif // !UNICODE
Win32 が Unicode の関係で、ANSI C 標準の文字列関数を使用できない( 移植が難しくなる )
LPTSTR lstrcat( LPTSTR lpString1, LPCTSTR lpString2 );
int lstrlen( LPCTSTR lpString )
UNICODE 設定にすると文字化けしてしまうな - ( しかし 切り替えは動作する )
日本語を表示する project file を開けば 設定を見ることができる
LPTSTR GetCommandLine(VOID); からも取得可能
-------------------------------------------------------
Application
MessageBox()
-------------------------------------------------------
Windows
MessageLoop WindowProc( 用意すみの Proc が利用される )
| |
| |
--- Window から Proc を選択 ---
-------------------------------------------------------
■ DialogBox( Modeless ) は MessageQ に送られるので 自分で Dialog 用か判定する
Dispatch とは Windows からの Message を 対応する Control にお届すること.
IsDialogMessage() は 実は tag 移動の際の対象になるだけ.
-> MouseEvent とかは関係ないので, あってもなくても OK
Tread を利用して 複数の MessageBox を呼んでも動くようにする。
MB_APPLMODAL : MessageBox に応答しないと, hWnd 指定の Window で作業できない
-> default : ->
■ Resource を利用する
Dialog の 指定数値は Font のサイズで決まる
Dialog には ToolBox から Control をはりつけること可能
Control は [ ChildWindow ]
Shift + F7 で Control の大きさを 文字列にあわせること可能
Dialog を[ 破棄 ]する
EndDialog( HWND, INT_PTR ); // ARG2 は適当な値で OK
TIP
DialogProc でしか利用しない
WARNING
DefWindowProc を利用禁止
■ ModeLessDialog(CreateDialog() < -> DialogBox() )
DESC
ResourceScript は ModelDialog と同じ内容でよい。
CreateDialog();
DestroyWindow();
MessageLoop::isDialogMessage();
|
|
NINJAIDX 17