お世話になっています。GGです。
AfxMessageBox()のタイトルを変えたいのですが、
(通常に左上に表示しているタイトルはC**View.cppのクラス名です。)
可能なのでしょうか。
よろしくお願いします。
環境:.Net(2002) MFC使用、Win2000
恒久的に変更するということであれば、ストリングテーブル文字列
AFX_IDS_APP_TITLEに適切なタイトル文字列を設定すれば良いと思います。
ただし、この値はメッセージボックスのタイトル以外にも色々なところで
使用されています。
そうでなければ、CWinApp::DoMessageBoxをオーバーライドして独自の
処理を実装しましょう。
一応
>CWinApp::DoMessageBoxをオーバーライド
で AfxMessageBoxのキャプションだけかえるようにするならば、
CWinApp::DoMessageBoxの中を見ればわかると思いますが、MessageBox関数
にm_pszAppNameを指定しているので、これを一時的に変更します。
int CXXXApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してくだ
さい
LPCTSTR temp = this->m_pszAppName;
if (this->m_pszAppName = _tcsdup(_T(ほげ)))
{
int ret = CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
free(const_cast<void*>(static_cast<const void*>(this->m_pszAppName)));
this->m_pszAppName = temp;
return ret;
}
this->m_pszAppName = temp;
return CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
}
チョイ訂正
最終的に元に戻すならいちいち領域確保するような関数を使わなくても
いいですね。(CStringすら使わなくてよさげ)
LPCTSTR temp = this->m_pszAppName;
this->m_pszAppName = _T(ほげ);
int ret = CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
this->m_pszAppName = temp;
return ret;
また、特定の AfxMessageBoxだけ変えたいなら、
CXXXAppクラスに変数を用意して、DoMessageBoxで切り替えるとかする
Blueさん、Kerryさん
ご回答ありがとう。
>>CWinApp::DoMessageBoxをオーバーライド
>で AfxMessageBoxのキャプションだけかえるようにするならば、
>CWinApp::DoMessageBoxの中を見ればわかると思いますが、MessageBox関数
>にm_pszAppNameを指定しているので、これを一時的に変更します。
なるほど、
Blueさんから示しているコードを使いました。
(もし示していなかったら、実装できない)
ありがとうございました。