カーソルの置かれたエディットボックスのフォーカスを取得するには? – プログラミング – Home

カーソルの置かれたエディットボックスの...
 
通知
すべてクリア

カーソルの置かれたエディットボックスのフォーカスを取得するには?


みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

こんにちは。

10個あるエディットボックスに順に入力するとき、
現在カーソルの置かれているエディトはどれかを、
取得したいのです。
その後、別のダイアログで入力された値を、その
エディットに出力したいです。

どうしたらよいのでしょうか?


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

CWnd::GetFocus()が使えると思います。


返信引用
みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

CEditにも、GetFocus()は使えるのでしょうか?
(ヘルプにはなかったのですが)

コントロールクラスのm_EDIT1で、
if(m_EDIT1.GetFocus == NULL)
別のダイアログを表示
      ・
      ・
      ・
m_EDIT1に、ダイアログに入力されたデータを格納
}

という処理を行いたいのですが。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

クラス階層図を見れば解ることですが、CEditはCWndを派生させてできたクラスです。
CWndの内容を継承していますので、CWndのpublicメソッドであるGetFocus()は当然、
CEditでも使えます。


返信引用
みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

何度も申し訳ありません。
最初はボタンを無効にしておいて、
任意のエディットにフォーカスがおかれたら、
ボタンを有効にしたいのですが、
このように書くと、画面が表示されたときにはもう、
ボタンが有効になっています。
(ちゃんと初期値設定では無効にしてあります)

どうすればよいのでしょうか?

int Position = 6 ;

switch(Position){
case 6: if (GetFocus() == GetDlgItem(IDC_EDIT1))
CDataInput::m_Color.EnableWindow(TRUE) ;
else
CDataInput::m_Color.EnableWindow(FALSE) ;
break ;
}


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

どうも情報が足りないので多分に想像を含んでしまいますが、

このswitch文はどこで実装されているのでしょう?
CDataInputとは違うクラスなんですよね?

とりあえずデバッガを使って、EnableWindow(TRUE)の行にbreakpointを張ってみてくださ
い。画面が表示される前にこの行を通っていませんか? 恐らく、
・IDC_EDIT1というコントロールがまだ生成されていないので
 GetDlgItem()はNULLを返す。
・画面が表示される前でフォーカスが定まっていないので
 GetFocus()はNULLを返す。
・CDataInputは既に生成が済んでいて、m_Colorを有効にできる。

ということではないでしょうか。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

こんにちは、RAPTです。

このswitch文が、CDataInputとは違うクラスだとして。

CDataInput::m_Color ってのはstaticなメンバですか?
それならいいんですけど。

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

>ちゃんと初期値設定では無効にしてあります
と書いてあるので、staticなのだろうと判断しました。

まぁ、初期値設定をちゃんとしているつもりなだけで、実はちゃんとできていなかったと
いうケースも考えられますが。

以下、質問者さんへ。
このように、質問者から提供される情報が少ないと回答者はいろんなケースを想定して回
答しなくてはなりません。複数の解釈ができてしまう文章では回答意欲をそぐことにもな
りかねず、結果的に質問者が損をします。例えばこの場合、「ちゃんと無効にしてありま
す」ではなく、例えば、

ボタンはダイアログエディタにてプロパティの無効チェックボックスをonにしてありま
す。switch文全体をコメントアウトしてみると確かにボタンは無効のまま表示されました
ので、このswitch文が問題なのだろうということまでは解るのですがその先、問題をどう
突き止めていけばいいのかが解りません。

という風にでも書かれていれば、質問者がどこまで確認しているのかがよく分かって、よ
り早くより的確なアドバイスが得られやすいと思います。


返信引用
みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

tibさん

switch文はCDataInputクラス内にあります。
コードミスでした。

画面が表示される前に、EnableWindow(TRUE)を
通っていませんでした。

RAPTさん

m_Colorはコントロールボタンです。

tibさんの言う3点のとおりのようでした。
すみませんが、どこを直したらよいのでしょうか?
お願いします。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

要するに、

 if (GetFocus() == GetDlgItem(IDC_EDIT1))

という条件は間違いじゃないんだけど、GetFocus()とGetDlgItem()が両方ともNULLを返し
てくる場合がある、その場合は除外したい、ということですよね?

 GetFocus()とGetDlgItem()の結果が等しくて
 なおかつ、
 それぞれが返してきた値がNULLではない。

という条件でチェックすればいいのではないでしょうか。


返信引用
みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

tibさん、質問の仕方が悪かったようです。
今後、気をつけます。

条件判定については、理解できましたが、
画面が表示されてからフォーカスとエディットの
ポインタを得るには、どうしたらよいのでしょうか?

画面表示の Domodal() は、ドキュメントクラスに
書いています。
フォーカスの取得とボタンの有効化は、
CDataInput の OnInitDialog に書いています。

今、CDataInputクラスに Domodal() を書き足したら、
リソース不足で終了してしまいました。

説明がわかりにくかったらすみませんが、
よろしくお願いします。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

OnShowWindow()が使えると思います。これはウィンドウを閉じるときにも呼ばれるので使
い方には注意してください。


返信引用
みっち
 みっち
(@みっち)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

OnShowWindow()ですが、CDataInputクラスに
関数を作り、そちらに書きなおしました。
ですが、ダイアログが立ち上がる前にフォーカスが
参照されており、フォーカスが取得できません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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