質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

4737閲覧

MFC EditContorlが選択された時、イベント発生について

BluePi85

総合スコア22

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/04/26 23:25

Visual Studio 2017,MFCにて作業を行っています。

ダイアログ上に複数のEditContorlを配置し、
任意のEditContorlが選択された時にイベントを発生させたいです。
(例えば、メッセージボックスが表示されるなど)

EditContorlのイベントで、Focusを使用すればと思いましたが、
このイベント自体よく理解出来ませんでした。

申し訳ありませんが、
良きアドバイスを頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

クラスウィザードを使うとエディットコントロールに対してイベント(メッセージ)に対するハンドラを追加することができます。
エディットコントロール(テキストボックス)でのフォーカスに関するメッセージとしては
EN_SETFORCUS・・フォーカスが設定されたとき
EN_KILLFOCUS・・フォーカスが離れたとき
があります。
MSDNで上記のメッセージを検索すると他にもあることがわかります。
このあたりはWIN SDKでのWM_ほにゃらの類に関するメッセージに関する情報なりMSDNを読み漁るなりするとよいかもしれません。

投稿2018/04/27 00:06

YomogiKOBO

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このような場合、コントロールのサブクラス化を行って対応します。ウィンドウのサブクラス化に関して前提となる知識を得るには、MFCを使わない素のWin32APIを利用したこちらの記事が分かり易いと思います。案内させていただきます。
第36章 ウィンドウのサブクラス化 その1

質問者さんの場合、MFCをお使いなので、上記の知識をベースとしてCEditクラスのサブクラス化を行って対応します。かなり古い記事ですが、こちらが参考になると思います。
ダイアログ上のアイテムをサブクラス化する方法

そうした上で、WM_SETFOCUS等のWindowメッセージをハンドリングします。つまり、EDITコントロールに入力フォーカスが当たった時の処理を自分で実装して、使うようにするのです。

CEditクラスのベースのCWndクラスにメンバー関数CWnd::OnSetFocusがあるので、これを利用すれば簡単だと思います。


**追記しました:**2018/04/27 09:15

他の回答者さんの回答を読んで考えましたが、私の回答案であるサブクラス化は面倒なので、エディットコントロールが少なく、処理を使いまわす必要が無い場合はサブクラス化をせず、他の回答者さんの方法が簡単で良いかと思いました。
エディットコントロールを配した親のダイアログボックスで複数のエディットコントロールを十分管理できるのであれば、サブクラス化までは考えなくて良いと思います。

投稿2018/04/26 23:56

編集2018/04/27 00:17
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

EditControlが選択された時というのは、入力欄にカーソルが入ったときですか?
それならば、EN_SETFOCUS(SetFocus)のイベントを掴むのがよいでしょう。
入力完了して、フォーカスを他に動かすときならば、EN_KILLFOCUS(KillFocus)の
イベントを掴むのが良いと思います。
EditControl内で入力中に何かしたいならば、EN_UPDATEの方がよいかな。
一応、
EN_CHANGEの方は内容が変わる直前のイベント、
EN_UPDATEは変わった後
となります。
用途に合うものを使ってください

投稿2018/04/26 23:43

編集2018/04/27 00:28
ardin

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問