ダイアログが非アクティブ時に、フォーカス(タブストップ)があるコントロールを
取得したいのですが、そういうメッセージ等は用意されているのでしょうか。
(ダイアログがアクティブの時は GetFocus() で取得できるのですが)
例を上げますと、
ダイアログ1(モードレス)にa、b、c、3つのチェックボックスがあります。
ダイアログ2(モードレス)にはボタンAがあり、ボタンAをクリックすると
ダイアログ1のa、b、cの現在タブストップが在る(最後にフォーカスがあった)
チェックボックスにチェックをつける、(この時ダイアログ1はアクティブにならない)
という風な処理しています。
「ダイアログ1のa、b、cのどれに現在フォーカスあるか」なのですが
これは、メッセージ等で取得する方法は無いのでしょうか。
どれにフォーカスがあったかという情報を自分で管理しておかなければダメなのでしょうか?
ダイアログがアクティブに戻った時には以前フォーカスがあったコントロールに
フォーカスが再設定される事や、WM_NEXTDLGCTL メッセージから
ダイアログで「どのコントロールにフォーカスがある」という情報を管理している
ように思えるのですが、それを取得する方法はないのでしょうか?
ダイアログ自体で情報を持っているのならば自分が同じ情報を持つ必要は無い、
と思い今回質問させてもらいました。
よろしくお願いします。
すみません。環境記載を忘れてました。
Win98 VC6.0+SP5 SDK/MFC拘らず
ダイアログ1とダイアログ2はどちらが親ウィンドウなのでしょうか?
よくわかりませんが、ダイアログ1を親にした場合
ダイアログ2のボタンAが押されたときの場合は
以下になります。
//ダイアログ1のヘッダーをインクルードする
#include Dialog1.h
//ダイアログ2のボタンAがおされた
void CDialog2::OnA_Button()
{
CDialog1* pDialog;
//親ウィンドウであるダイアログ1のポインタを取得する
pDialog = (CDialog1*)GetOwner();
pTestDlg->SetActiveWindow();
CWnd* pCheck;
pCheck = pTestDlg->GetFocus();
((CButton*)pCheck)->SetCheck(1);
// pTextDlg->SetWindowText("aaaa");
}
ごめんなさい
間違って送信しました。
ただしいのは以下となります。
#include Dialog1.h
void CDialog2::OnA_Button()
{
CDialog1* pDlg1;
//親ウィンドウであるダイアログ1のポインタを取得する
pDlg1 = (CDialog1*)GetOwner();
//ダイアログ2のボタンを押したので
//ダイアログ2がアクティブになるので
//ダイアログ1を強制的にアクティブにする
pDlg1->SetActiveWindow();
CWnd* pCheck;
//ダイアログ1のチェックボックスの
//フォーカスの当たっているコントロールポインタを取得します。
pCheck = pDlg1->GetFocus();
//コントロールポインタをCButtonクラスにキャストして
//SetCheck関数をよんでチェックをONにします。
//ちなみにキャストしないと
//CButtonクラスのメンバー関数である
//SetCheck関数を呼ぶことができません。
((CButton*)pCheck)->SetCheck(1);
}
こんな感じで、フォーカスのあるチェックボックスに
チェックを入れることができます。
あとは、状況に応じてカスタマイズして下さい。
Kunさんへ
Kunさんの質問を回答してから、一ヶ月たちました。
まだ、解決していないんでしょうか?
もし、解決しているのであれば、解決方法を
記載して、ここを「解決」にして下さい。
意思表示がないと、回答した私が馬鹿にされている
ように思えます。
このようなことが続くと、だれもあなたの質問に
回答しなくなりますので、気をつけてください。
ツイート | ![]() |