トップページ > 過去ログ > 記事閲覧
DXライブラリでダイアログボックスを表示させるには?
名前:TKOZ 日時: 2008/08/25 19:15

DXライブラリには、大分お世話になっています。 さて、 DXライブラリとVisualC++6.0を使って、 メインウィンドウの上に ダイアログボックスを表示し、その中の テキストボックスに入力した文字列を取得するには どうすればいいのでしょうか? リソースエディタでダイアログのリソースを作成することには成功しましたが、続きが分かりません。 過去ログを参照してみたところ、SetHookWinProc関数が必要との事ですが、使い方が分かりません。

Page: 1 |

Re: DXライブラリでダイアログボックスを表示させるには? ( No.1 )
名前: 日時:2008/08/26 14:19

DXライブラリでは多少弊害がありそうですが エディットボックスに入力した文字列を 自分で作成したダイアログから取得するだけなら、 SetHookWinProcを使用する必要も無くできます。 以下はモーダル・ダイアログの例です。 #include "DxLib.h" #include "resource.h"//リソースエディタでできたやつ #define MSGDISPATCH(msg, fn) case msg: return fn(hWnd, wParam, lParam) LRESULT CALLBACK DialogProc( HWND hWnd, UINT uMsg, UINT wParam, LONG lParam ); LRESULT OnClose(HWND hWnd, WPARAM wParam, LPARAM lParam); // WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {  HWND hMainWnd = NULL;  HWND hDialogWnd = NULL;  CHAR WindowText[MAX_PATH] = { '\0' };  ChangeWindowMode( TRUE ) ;  SetGraphMode( 640 , 480 , 16 ) ;  // DXライブラリ初期化処理  if( DxLib_Init() == -1 ) return 0;  //裏描画に指定  SetDrawScreen( DX_SCREEN_BACK );  //メインウィンドウハンドルの保存  hMainWnd = GetMainWindowHandle();  //ダイアログの作成  hDialogWnd = CreateDialog( hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hMainWnd, (DLGPROC)DialogProc );  //ダイアログをDXライブラリに登録(DXライブラリは単一のダイアログのみ対応)  SetDialogBoxHandle( hDialogWnd );  //メインループ  while( ProcessMessage() == 0 && !CheckHitKey(KEY_INPUT_ESCAPE) )  {   //スペースでダイアログを表示状態へ   if (CheckHitKey(KEY_INPUT_SPACE)){ ShowWindow( hDialogWnd, SW_SHOW ); }   //エディットボックスの文字列を取得   SendDlgItemMessage( hDialogWnd, IDC_EDIT1, WM_GETTEXT, MAX_PATH, (LPARAM)WindowText);   //描画処理   ClearDrawScreen();   DrawString( 0, 0, "スペースでダイアログを表示状態へ", 0xFFFFFFFF );   DrawFormatString( 0, 100, 0xFFFFFFFF, "入力テキスト:%s", WindowText );   ScreenFlip();  }  //ダイアログを破棄  DestroyWindow( hDialogWnd );  // DXライブラリ使用の終了処理  DxLib_End() ;  // ソフトの終了  return 0 ; } /*----------------------------------------------------------------* * ダイアログプロシージャ *----------------------------------------------------------------*/ LRESULT CALLBACK DialogProc( HWND hWnd, UINT uMsg, UINT wParam, LONG lParam) {  switch(uMsg){   MSGDISPATCH( WM_CLOSE, OnClose );  }  return 0; } /*----------------------------------------------------------------* * WM_CLOSE の処理 *----------------------------------------------------------------*/ LRESULT OnClose(HWND hWnd, WPARAM wParam, LPARAM lParam) {  MessageBox( hWnd, TEXT("ダイアログをクローズします"), "WM_CLOSE", MB_OK );  //ここでは破棄せず消すだけ  ShowWindow( hWnd, SW_HIDE );  return 0; } #全角スペース使ってます、半角に変換してください #エラー処理は一切してませんのであしからず #IDC_EDIT1などは自分が使っている物に #適時読み替えてください。 あとDirectXとダイアログは元の相性が 良くないのでフルスクリーンなどでは 問題が生じやすくなる可能性があります。
Re: DXライブラリでダイアログボックスを表示させるには? ( No.2 )
名前:TKOZ 日時:2008/08/28 09:18

はじめまして、通さん。TKOZといいます。 家のパソコンだとうまくいきませんでしたが、 外のパソコンだとうまくいきました。 ありがとうございます。

Page: 1 |