ダイアログが表示されたときエディットボックスにすぐに文字を入力できるよう
にしたいのですがそういうことはできるんですか?
ダイアログのOnInitDialogで対象となるエディットにSetFocusし
return TRUE;
としてやればできます
CFromVeiwで作っているせいかOnInitDialogという関数がないんですけどどうすれば?
正確にはどこでやるのか知らないけど(CFormViewはあまり使わないので)
OnInitialUpdateにて
GetDlgItem(エディットコントロールのID)->SetFocus();
とやればできます.
メンバ変数にコントロールとしてCEditの変数を割り当ててるなら
そのクラス.SetFocus();
でも良いです.
試してみたけどダイアログ表示時にエラーがでてしまいます。
簡単そうなのに難しい…
環境やプロジェクト全体の事がわからないので
新規作成したプロジェクトで説明します.
「MFC AppWizard(exe)」のプロジェクト名「test」でプロジェクトを作成したとします.
Step1 - SDI
Step4 - 「基本クラス」-「CFormView」
で作成します.
適当にコントロールを貼り付けて,
「IDC_EDIT1」というIDのエディットコントロールを作成します.
void CTestView::OnInitialUpdate()
でGetDlgItem(IDC_EDIT1)->SetFocus();
とやればできましたけど,いかがですか?
説明不足ですいません。CFormViewで他のダイアログを呼び出してそこの
エディットコントロールをCFormViewからで操作すると不具合が生じるよ
うです。
GetDlgItem(IDC_EDIT1)->SetFocus();
を実行時にエラーになってしまいます。
なんだか分からなくなってきましたが
モーダルダイアログなら,最初に書いたようにOnInitDialogで処理できます
ダイアログクラスのWM_INITDIALOGのことです
モードレスダイアログならウィザードが作ったコンストラクタを使わずに
CDialog::Create(xxx::IDD);
などとやっている関数を実装していると思うので,これの後に呼べば良いはずです
CFormViewで作成したダイアログに対して処理したいようですが
たいていはダイアログのイベントで処理できます.
WM_INITDIALOGでOnInitDialogが作れるのを知りませんでした…すみません。
いろいろとアドバイスありがとうございました!