AfxMessageBoxのタイトルについて

[戻る]
GG 2007/03/01(木) 17:33:59
お世話になっています。GGです。

AfxMessageBox()のタイトルを変えたいのですが、
(通常に左上に表示しているタイトルはC**View.cppのクラス名です。)
可能なのでしょうか。

よろしくお願いします。

環境:.Net(2002) MFC使用、Win2000

Blue 2007/03/01(木) 17:41:45
過去ログ
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200203/02030012.txt

Kerry 2007/03/01(木) 17:45:11
恒久的に変更するということであれば、ストリングテーブル文字列
AFX_IDS_APP_TITLEに適切なタイトル文字列を設定すれば良いと思います。
ただし、この値はメッセージボックスのタイトル以外にも色々なところで
使用されています。

そうでなければ、CWinApp::DoMessageBoxをオーバーライドして独自の
処理を実装しましょう。

Blue 2007/03/01(木) 18:04:52
一応
>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);
}

Blue 2007/03/01(木) 18:48:15
チョイ訂正

最終的に元に戻すならいちいち領域確保するような関数を使わなくても
いいですね。(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で切り替えるとかする

GG 2007/03/02(金) 09:55:38
[[解決]]
Blueさん、Kerryさん
ご回答ありがとう。

>>CWinApp::DoMessageBoxをオーバーライド
>で AfxMessageBoxのキャプション"だけ"かえるようにするならば、
>CWinApp::DoMessageBoxの中を見ればわかると思いますが、MessageBox関数
>にm_pszAppNameを指定しているので、これを一時的に変更します。
なるほど、

Blueさんから示しているコードを使いました。
(もし示していなかったら、実装できない)

ありがとうございました。

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