VC++5.0 または VC++6.0 の環境で、MFC を使ってダイアログベースの
EXEを造っています。
(OS は NT4.0 または 2000 です)

以下のことをしたいと思っています。

・プロセスA、Bがあります。
・プロセスAがプロセスBをフォアグランドにします。
→SetForegroundWindow() します。
・プロセスAがプロセスBのボタンやエディットボックスなどのコントロールに
フォーカスをあてる。

で、この最後のフォーカスをあてる処理は実現可能でしょうか?
自分のプロセス内のコントロールに対しては、SetFocus() で
フォーカスをあてられたのですが、別プロセスではフォーカスを
あてることができませんでした。

識者の方、ご教授願います。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

んー,SetForegroundWindowでフォーカス当てれそうですが。


フォーカスをあてたいコントロールの CWnd(というかHWND) は既に取得済みなんですよね?
そいつで直接 SetForegroundWindow を呼んでやったらフォーカスあたると思いますが。

MSDNで SetForegroundWindow(SDK) 見てみたら2000と98はなんか条件があるみたいです。
    • good
    • 0
この回答へのお礼

アドバイス通り、コントロールに対して直接 SetForegroundWindow() を
実行することで解決できました。
ありがとうございました。

お礼日時:2001/11/20 10:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q子ダイアログのコントロールにフォーカス(VC++2005)

お世話になります。
Visual Studio 2005でVC++の開発をしております。
ダイアログを2つ用意して、一つはstyleを「ポップアップ」に、
もう一つは「子」にしてます。
親ダイアログ内にタブをセットし、その上に子を乗せる処理を行っていて
親のダイアログのボタンイベントから子のダイアログのコントロールにフォーカスを
当てたいのですが、どのようにしたらよろしいのでしょうか?

親ダイアログ内では、

(子ダイアログ).Create(子ダイアログクラス, this);

で生成して
MoveWindowやShowWindowで位置・表示の設定を行っています。

親から子ダイアログ内のコントロールの入力チェックを行おうと思い、
未入力判定まではできたのですが
どうしてもSetFocus()でフォーカスが当たりません。

どなたかご教授していただけますでしょうか?

Aベストアンサー

>どうしてもSetFocus()でフォーカスが当たりません。
はどこで実行しているのでしょうか?

ダイアログ上のコントロールのフォーカスを、ダイアログを開くときに設定する場合、WM_INITDIALOGに対してちゃんと反応する必要がありますが…

http://msdn2.microsoft.com/ja-jp/library/6zxw3b4a(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/fwz35s59(VS.80).aspx
戻り値のところに記述されています。

QVC++6.0 MFC 日時指定コントロールの秒へのセットフォーカス

VC++6.0 MFC 日時指定コントロールの秒へのセットフォーカス

以下の環境でプログラミングを実施しています。
開発環境:Visual Studio 6.0
言語:Visual C++
プロジェクト:MFCアプリケーション

日時指定コントロールのスピンを最初にクリックすると
時間が変化しますが、これを初期設定で秒にしたいのですが
どうしたらいいのか全くわかりません。

教えてください!

Aベストアンサー

『Date and Time Picker』コントロールの事でしょうか?

コントロールにフォーカスを与えてから keybd_eventで左矢印の
入力をシュミレートして見ましょう

CWnd* pWnd = (CWnd*)GetDlgItem( IDC_DTPicker1 );
pWnd->SetFocus();
// LEFTを押す
keybd_event( VK_LEFT, 0, KEYEVENTF_EXTENDED, 0 );
// LEFTを離す
keybd_event( VK_LEFT, 0, KEYEVENTF_EXTENDED | KEYEVENTF_KEYUP, 0 );
といった具合です

QVC++2010のエディットボックスの出力について

VC++2010のエディットボックスの出力について質問させていただきました。


シリアル通信でデータを毎秒受信するプログラムを作成しており、

9_27_23.4_33.00

というデータを受信して エディットボックスに表示しているんですが
9_27_23.4_33.00
9_27_23.4_33.00
9_27_23.4_33.00




という表示を期待しているんですが
改行されず上書きされてしまいます

CString szRecvの中に受信データが格納されており
szRecv = szRecv +"\r\n"を記述しても
改行されませんでした。

どのようにしたら うまく 改行されて表示されるのか よろしくお願いします

Aベストアンサー

CStringが使われているということから、MFCを使っているということでよいでしょうか。

ダイアログクラスの中でどのようにエディットボックスに反映していますか?
MFCでは大きく分けて、DDXによる方法と、直接GetWindowText()/SetWindowText()を使う方法があります。DDXの場合は

UpdateData(TRUE);

でデータを画面からDDX変数(例えばCString型メンバ変数 m_history)に取得し、変数を

m_history = m_history +"\r\n" + szRecv;

のように更新した上で、

UpdateData(FALSE);

を呼び出してDDX変数の内容を画面コントロールに反映させます。

DDXを使わない方法では、エディットコントロール(例えばCEdit型メンバ変数 m_edit)に対して

CString history;
m_edit.GetWindowText(history);
history = history +"\r\n" + szRecv;
m_edit.SetWindowText(history);

とします。

ただし、単に履歴の表示のみで編集する必要がないのであれば、redfox63さんがおっしゃるようにリストボックスやリストビューなどを使用するのが良いです。

CStringが使われているということから、MFCを使っているということでよいでしょうか。

ダイアログクラスの中でどのようにエディットボックスに反映していますか?
MFCでは大きく分けて、DDXによる方法と、直接GetWindowText()/SetWindowText()を使う方法があります。DDXの場合は

UpdateData(TRUE);

でデータを画面からDDX変数(例えばCString型メンバ変数 m_history)に取得し、変数を

m_history = m_history +"\r\n" + szRecv;

のように更新した上で、

UpdateData(FALSE);

を呼び出してDDX変数の内容を画...続きを読む

QVC++2010 エディットボックス 数値検出

VC++2010 エディットボックス 数値検出について質問なんですが、
そういう関数とかありますか? 

数値が0.01~65536まで入力される仕様になっており
文字列を受信したら無効にするようにしたいのですが
よろしくお願いします

Aベストアンサー

strtodとかstrtofで数値に変換して,うまくいかなかったり範囲から外れていたら無効にすればどうかな?

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。


人気Q&Aランキング

おすすめ情報