トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Win32API
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\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