たくさん質問してすいません。クリリンです。
開発環境は、Win2000 Pro + VC6(SP5) + MFCです。
現在、VBの用なメッセージボックス用の関数を作成したいと考えておりまして、
オリジナルのクラスを作成しました。
int CMessage::MsgBox(LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
// 現在のハンドル取得
#define MY_BUFSIZE 1024 // コンソールウィンドウのタイトル用のバッファサイズ
char NowWindowTitle[MY_BUFSIZE]; // 現在のウィンドウのタイトルが入ります
int iRet;
// 現在のウィンドウタイトルを取得します
GetConsoleTitle(NowWindowTitle, MY_BUFSIZE);
// 取得したタイトルから、ハンドルを取得します
HWND hWnd = ::FindWindow(NULL, NowWindowTitle);
iRet = MessageBox(hWnd, lpText, lpCaption, uType);
return (iRet);
}
というコードを書きました。
しかし、これだと、マルチスレッドになってしまい別の操作が可能になってしまいます。
もしかしたら、オーナーウィンドウのハンドルの取得の方法が間違っているのでしょうか?
そうだとしたら、どうすれば、オーナーウィンドウのハンドルを取得できるのでしょうか?
どなたか、VBの用なメッセージボックスが作成方法のアドバイスをお願いします。
AfxMessageBoxでは駄目ですか?
AfxMessageBoxを使用すると、キャプションを設定する事が出来ませんよね?
追記…以前、MessageBoxに関する内容をこのサイトから探したのですが、オリジナルのダイア
ログを作成するしかないです。…と記述されていました。
本当にそうなのでしょうか?
私は、短いコーディングで出来るのでは?と思っております。
もし、駄目なら、この場で「無理!」と答えていただくとありがたいのですが・・・
GetConsoleTitle?
コンソールでメッセージボックスを出すということですか?
MFCですよね?
ウィンドウハンドルを引数で渡すというのが常套手段だと思います。
お薦めしませんが、GetActiveWindowで取得するとか。
キャプションを変更したいだけなんですか?
それなら
MessageBox(Message, Caption, MB_OK);
だと思いますけど。
さまざまな回答ありがとうございます。
>MessageBox(Message, Caption, MB_OK);
だと、ダイアログでは無いクラスがメッセージボックスを表示した場合は出来ませんよね?
…
あ、出来ました!
CdS さんが教えてくださった、
>GetActiveWindow
をヘルプで探したところ、「GetForegroundWindow」を見つけました。
これなら、現在ユーザーが作業しているウィンドウのハンドルを返してくれますので、
アクティブウィンドウでは無いので、OKですよね!?
変更点は
HWND hWnd = ::FindWindow(NULL, NowWindowTitle);
↓
HWND hWnd = GetForegroundWindow();
とするだけで出来ます。
みなさん、お付き合いありがとうございました。
追記…たった2行で済むので、関数化する必要はなくなりますね!
>AfxMessageBoxを使用すると、キャプションを設定する事が出来ませんよね?
AfxMessageBoxを使っても、CWinApp::DoMessageBoxをオーバーライドすることによって
独自の処理ができます。
今回の場合は、向いていないとおもいますが・・
>追記…以前、MessageBoxに関する内容をこのサイトから探したのですが、オリジナルのダイア
>ログを作成するしかないです。…と記述されていました。
>本当にそうなのでしょうか?
どの過去ログかわかりませんのでそのリンク位張りましょう
>だと、ダイアログでは無いクラスがメッセージボックスを表示した場合は出来ませんよね?
こういう理由ならば
AfxGetMainWnd()->MessageBox(...);
で良いのでは?
すいません・・・
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200105/01050029.txt
です。
>AfxGetMainWnd()->MessageBox(...);
なんと!これだと、一行で出来ますね・・・ありがとうございます。
とりあえず、「GetForegroundWindow()」という副産物も見つけたので、大助かりです。
本当に皆様方ありがとうございました。
> http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200105/01050029.txt
このスレッドは、タイトル変更は、出来てもセンタリングは、難しいって事でしょうね、おそら
く
あ、そうみたいですね・・・m(__)m