AfxMessageBoxのタイトルについて – プログラミング – Home

AfxMessageBoxのタイトルに...
 
通知
すべてクリア

[解決済] AfxMessageBoxのタイトルについて


GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

お世話になっています。GGです。

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

よろしくお願いします。

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


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467

返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

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

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

一応
>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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

チョイ訂正

最終的に元に戻すならいちいち領域確保するような関数を使わなくても
いいですね。(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
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

Blueさん、Kerryさん
ご回答ありがとう。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました