人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VC++6(MFC)について質問です。
ダイアログのタイトル
(青い帯の部分)の文字列を
変数の値によって変更したいと思います。
テキストボックスの場合は
CEdit型でGetDlgItemして、
得られたポインタからSetWindowsTxtで設定すればできますが、
ダイアログのタイトルはどのようにすれば変更できますでしょうか?



●質問者: harunoharuno
●カテゴリ:コンピュータ インターネット
✍キーワード:mfc VC タイトル ダイアログ テキスト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● じゃっくそにっく
●50ポイント

こんにちは。

MFCのウィンドウアプリケーションで

ウィンドウのウィンドウタイトルを変える場合は、

ウィンドウ->SetWindowText(テキスト)

です。

メインウィンドウなら、

AfxGetMainWnd()または

AfxGetAPp()のGetMainWnd()

で取得できます。

AfxGetMainWnd()->SetWindowText("テキスト");

エディットからとするとこんな感じでしょうか。

CEdit *pEdit =(CEdit*) GetDlgItem(IDC_EDIT1);
CString str;
pEdit->GetWindowText(str);
AfxGetMainWnd()->SetWindowText(str);
//または AfxGetApp()->GetMainWnd()->SetWindowText(str);

参考

http://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc12/index.html

◎質問者からの返答

回答ありがとうございます。

しかし、なぜか出来ませんでした。

主画面から新しいダイアログをDomodalする際に、

OnInitDialogで

CWnd* cwndIconAlphaSetDlg=AfxGetMainWnd();

cwndIconAlphaSetDlg->SetWindowText("aaa");とコーディングしたのですが、

タイトル名は変わりませんでした。

やり方に不備とうありましたら

それについてもご指摘いただきたく宜しくお願いします。

それとやや体調不良でへたっていますので

理解力が低下しご迷惑をおかけします。


2 ● じゃっくそにっく
●100ポイント ベストアンサー

1の回答者です。

メインダイアログ(主画面)ではなくて、サブ画面の

新しいダイアログに対してなんですね。

ちょっと詳しいファイル/クラス/呼び出しの

構成がわからないのですが、

名前から察するに、cwndIconAlphaSetDlgは、

class cwndIconAlphaSetDlg public CDialog

で宣言されたクラスでしょうか?

クラスとするなら、それは""であって、"実体"ではない

(インスタンスではない)ので、

cwndIconAlphaSetDlg->SetWindowText()

は失敗します。

SetWindowText()は、実体(インスタンス)

に対して実行しなければ効果がありません。

仮定

ここで想定する仮定として、

?"cwndIconAlphaSetDlg"という名前のCDialogを継承したダイアログクラスがある。

?そのクラス(cwndIconAlphaSetDlg)の"実体"変数(インスタンス/オブジェクト)

が、メインダイアログに確保されている。

?メインダイアログから、?の実体変数のDoModalでダイアログを呼び出し、

呼び出された側のcwndIconAlphaSetDlg::OnInitDialogでタイトルを変更する。

ということでしょうか??

条件が違ったら教えてください。

???を仮定すると、

まず、?のために、

cwndIconAlphaSetDlg.h,cwndIconAlhpaSetDlg.cpp というファイルがあり、

それをメインダイアログのファイルの先頭で、

クラスヘッダファイルがインクルードしていますよね。

#include "cwndIconAlphaSetDlg.h"

それで、メインダイアログのファイル内のどこかで、

cwndIconAlphaSetDlgクラスの実体の定義をしているはずです。

(というかそれが必要になります)

以下の例では、IconAlphaSetDlgという名前で、cwndIconAlphaSetDlgクラスの

実体を確保しています。

// クラスの実体を宣言
cwndIconAlphaSetDlg IconAlhaSetDlg;

(ポインタでやっているかもしれませんが、要は実体が必要です。)

そして、?で実体のメソッドとしてDoModalを呼び出しますよね。

// DoModal
IconAlhaSetDlg.DoModal();

これはたとえばですが、メインダイアログのクラス名が"CDiagTestDlg"だとして、ボタンが1個あり、それのハンドラ

OnButton1を設置して、そこでダイアログを出すとしたら、

void CDiagTestDlg::OnButton1() 
{
// ダイアログの実体宣言
cwndIconAlphaSetDlg IconAlhaSetDlg;

//DoModal
IconAlhaSetDlg.DoModal();
}

ていうような感じになりますよね。

そして、呼び出されたほうの、IconAlphaSetDlgのクラス、

cwndIconAlphaSetDlgのOnInitDialogメソッドが呼び出され、

その中でダイアログのタイトルを変えるなら、

this->SetWindowText("テキスト");

ということになります。

OnInitDialogで自分自身を初期化しているときに、

自分自身のタイトルを変えるため。

例:

BOOL cwndIconAlphaSetDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// ダイアログ初期化時 自分のタイトルを変更
this->SetWindowText("テスト");
return TRUE;
}

構成や条件が違っていたり、

疑問点があれば詳細をお願いします。

あと、質問のコメント機能を開いておいていただけると助かります。

http://q.hatena.ne.jp

◎質問者からの返答

回答ありがとうございます。

また、私が書かなかったダイアログの呼び出し方法まで推測し

回答していただき感謝いたします。

ダイアログの呼び出し方は、考えていただいたものと完璧に一致しております。

さっそく教えていただいた情報を元に

thisポインタで、自らのクラスを指定し、

SetWindowText("title");

としたところ無事にタイトルバーの内容を変更することができました。

実は、ダイアログを呼び出す前に

ダイアログ名.SetWindowText("title");

ダイアログ名.Domodal();

とかも試していたのですが、これは失敗でした。

ダイアログの初期化はやはりOnInitDialogでやった

方がよさそうですね。

大変丁寧に教えていただき助かりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ