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とダイアログは元の相性が
良くないのでフルスクリーンなどでは
問題が生じやすくなる可能性があります。