MessageBoxについて

[戻る]
クリリン 2002/03/04(月) 15:00:08
たくさん質問してすいません。クリリンです。
開発環境は、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の用なメッセージボックスが作成方法のアドバイスをお願いします。

不良PG 2002/03/04(月) 15:05:14
AfxMessageBoxでは駄目ですか?

クリリン 2002/03/04(月) 15:07:46
AfxMessageBoxを使用すると、キャプションを設定する事が出来ませんよね?

クリリン 2002/03/04(月) 15:11:23
追記…以前、MessageBoxに関する内容をこのサイトから探したのですが、オリジナルのダイア
ログを作成するしかないです。…と記述されていました。
本当にそうなのでしょうか?
私は、短いコーディングで出来るのでは?と思っております。
もし、駄目なら、この場で「無理!」と答えていただくとありがたいのですが・・・

CdS 2002/03/04(月) 15:18:58
GetConsoleTitle?
コンソールでメッセージボックスを出すということですか?
MFCですよね?

ウィンドウハンドルを引数で渡すというのが常套手段だと思います。
お薦めしませんが、GetActiveWindowで取得するとか。

CdS 2002/03/04(月) 15:21:05
キャプションを変更したいだけなんですか?
それなら
    MessageBox("Message", "Caption", MB_OK);
だと思いますけど。

クリリン 2002/03/04(月) 15:31:25
[[解決]]
さまざまな回答ありがとうございます。
>MessageBox("Message", "Caption", MB_OK);
だと、ダイアログでは無いクラスがメッセージボックスを表示した場合は出来ませんよね?
  …
あ、出来ました!
CdS さんが教えてくださった、
>GetActiveWindow
をヘルプで探したところ、「GetForegroundWindow」を見つけました。
これなら、現在ユーザーが作業しているウィンドウのハンドルを返してくれますので、
アクティブウィンドウでは無いので、OKですよね!?

変更点は
HWND hWnd = ::FindWindow(NULL, NowWindowTitle);
  ↓
HWND hWnd = GetForegroundWindow();
とするだけで出来ます。

みなさん、お付き合いありがとうございました。

クリリン 2002/03/04(月) 15:32:56
追記…たった2行で済むので、関数化する必要はなくなりますね!

不良PG 2002/03/04(月) 15:38:14
>AfxMessageBoxを使用すると、キャプションを設定する事が出来ませんよね?
AfxMessageBoxを使っても、CWinApp::DoMessageBoxをオーバーライドすることによって
独自の処理ができます。
今回の場合は、向いていないとおもいますが・・

>追記…以前、MessageBoxに関する内容をこのサイトから探したのですが、オリジナルのダイア
>ログを作成するしかないです。…と記述されていました。
>本当にそうなのでしょうか?
どの過去ログかわかりませんのでそのリンク位張りましょう

不良PG 2002/03/04(月) 15:40:53
>だと、ダイアログでは無いクラスがメッセージボックスを表示した場合は出来ませんよね?
こういう理由ならば
AfxGetMainWnd()->MessageBox(...);
で良いのでは?

クリリン 2002/03/04(月) 15:47:18
すいません・・・
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200105/01050029.txt
です。

>AfxGetMainWnd()->MessageBox(...);
なんと!これだと、一行で出来ますね・・・ありがとうございます。
とりあえず、「GetForegroundWindow()」という副産物も見つけたので、大助かりです。
本当に皆様方ありがとうございました。

不良PG 2002/03/04(月) 16:02:18
>http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200105/01050029.txt
このスレッドは、タイトル変更は、出来てもセンタリングは、難しいって事でしょうね、おそら
く

クリリン 2002/03/04(月) 16:05:13
あ、そうみたいですね・・・m(__)m

古いスレッドには追加発言できません。