dポイントプレゼントキャンペーン実施中!

WNDOWSXP + VC++2010Express + SDKです。VC++ExpressなのでMFCなどは使えません。
ウィンドウのフォーカスの取得方法について質問します。

メインウィンドウにコントロールを3つ貼り付けます。
エディットコントロール2つと、自分で作成したコントロールが1つです。

自分で作成したコントロールのウィンドウプロシージャは仮に↓こんなものだとします。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_KEYDOWN)
{
if(wParam=='A'){
MessageBox(NULL,_T("A"),_T("KEYDOWN"),NULL);
}
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}

プログラムを起動し、エディットコントロールAをクリックすると
エディットコントロールAにフォーカスが移動します。
キーボードのAボタンを押下すると、エディットコントロールAに「a」と入力されます。
エディットコントロールB、自分で作成したコントロールは無反応です。

エディットコントロールBをクリックすると、エディットコントロールBにフォーカスが移動します。
キーボードのAボタンを押下すると、エディットコントロールBに「a」と入力されます。
エディットコントロールA、自分で作成したコントロールは無反応です。

次に、自分で作成したコントロールをクリックした場合、
フォーカスはエディットコントロールBにあります。キーイベントなども
エディットコントロールBのみが反応します。

ここで、自分で作成したコントロールをクリックした場合に
自分で作成したコントロールがフォーカスを取得し、
キーイベントなどを独占的に受け取れるようにしたいのですが、方法がわかりません。

どなたか方法をご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。

A 回答 (3件)

CreateWindow 時に、 WS_CHILD と WS_TABSTOP 属性はついていますか?

この回答への補足

WS_CHILDはつけています。WS_TABSTOPはつけてもはずしても変化はありませんでした。

補足日時:2011/01/20 02:28
    • good
    • 0
この回答へのお礼

すみません。WM_LBUTTONDOWN で SetFocus したら普通にできました。
私はバカでした。事故解決してしまったので回答を締め切ります。

お礼日時:2011/01/20 07:23

あ,DefWindowProc なのですね。


失礼いたしました。#1

この回答への補足

はい。コモンコントロールのサブクラス化ではなく1からつくってみたいなと思いまして。

補足日時:2011/01/20 02:29
    • good
    • 0
この回答へのお礼

すみません。WM_LBUTTONDOWN で SetFocus したら普通にできました。
私はバカでした。事故解決してしまったので回答を締め切ります。

お礼日時:2011/01/20 07:22

自分で作成したコントロールとはどのようなものでしょうか?



例えば,static control をサブクラス化したものであれば,
もとの性質を受け継いでいるので,フォーカスを受け取れないはず。
    • good
    • 0

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