SetFocus

SetFocusで、指定のウィンドウハンドルのウィンドウに、フォーカスを与える。

SetFocus 関数 (winuser.h) - Win32 apps | Microsoft Learn

WM_SETFOCUS辺りはプロジェクト作り直してたけど、ここからまたShowCaretの項のプロジェクトベースに。
SetFocus.rcで、

Item7, Item7-1, Item7-2を追加。
SetFocus.cppで、

WM_CREATEで、エディットコントロール2つ用意。

Item7-1はhEdit1、Item7-2はhEdit2にフォーカス。

Item7-1なら
Item7-1なら

Item7-1なら、

上の"Edit1"にキャレットが来てるので、フォーカス来てる。
上の"Edit1"にキャレットが来てるので、フォーカス来てる。

上の"Edit1"にキャレットが来てるので、フォーカス来てる。

Item7-2だと
Item7-2だと

Item7-2だと、

下の"Edit2"にキャレット来てるので、フォーカスも来てる。
下の"Edit2"にキャレット来てるので、フォーカスも来てる。

下の"Edit2"にキャレット来てるので、フォーカスも来てる。

Sample/winapi/SetFocus/SetFocus/src/SetFocus at master · bg1bgst333/Sample · GitHub

WM_KILLFOCUS

フォーカスが失われる直前、WM_KILLFOCUSが発生する。

WM_KILLFOCUS メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

WM_KILLFOCUS.cppで、

として、

最初はこう。
最初はこう。

最初はこう。

VSのウィンドウに行くとこうなる
VSのウィンドウに行くとこうなる

VSのウィンドウに行くとこうなる。

メインのウィンドウに戻るとこうなる
メインのウィンドウに戻るとこうなる

メインのウィンドウに戻るとこうなる。

またフォーカス外すとこうなる。
またフォーカス外すとこうなる。

またフォーカス外すとこうなる。
WM_KILLFOCUSのwParamは、フォーカス入ったウィンドウのハンドルらしい。
まあ、0だけど。

Sample/winapi/WM_KILLFOCUS/WM_KILLFOCUS/src/WM_KILLFOCUS at master · bg1bgst333/Sample · GitHub]

WM_SETFOCUS

フォーカスがセットされた時、WM_SETFOCUSが発生する。

WM_SETFOCUS メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

WM_SETFOCUS.cppで、

WM_SETFOCUS発生したら、hwndとwParam出してみる。

意外にも、起動時は来ない。
意外にも、起動時は来ない。

意外にも、起動時は来ない。

いったんVSのウィンドウに行く。
いったんVSのウィンドウに行く。

いったんVSのウィンドウに行く。

戻るとWM_SETFOCUSが来るが、wParamこない。
戻るとWM_SETFOCUSが来るが、wParamこない。

戻るとWM_SETFOCUSが来るが、wParamこない。
フォーカス失ったウィンドウがいるとおもったが、誰なのか、本当にいないのか。
いろいろおもってたんと違う感じもしたので、要調査だが、あまりやりたくはないなあ・・・。

Sample/winapi/WM_SETFOCUS/WM_SETFOCUS/src/WM_SETFOCUS at master · bg1bgst333/Sample · GitHub

ShowCaret

ShowCaretでキャレットを表示状態にする。

ShowCaret 関数 (winuser.h) - Win32 apps | Microsoft Learn

ShowCaret.rcに、

Item6-2を追加。
ShowCaret.cppで、

ShowCaretでhEditのキャレットを表示状態にする。

最初はこう
最初はこう

最初はこう。

tと1の間にキャレットを置く
tと1の間にキャレットを置く

tと1の間にキャレットを置く。

Item6-1を選択
Item6-1を選択

Item6-1を選択。

キャレットが消えて、他の位置にキャレットを置こうとしても表示されない。
キャレットが消えて、他の位置にキャレットを置こうとしても表示されない。

キャレットが消えて、他の位置にキャレットを置こうとしても表示されない。

Item6-2を選択
Item6-2を選択

Item6-2を選択。

tと1の間に再びキャレットが表示された
tと1の間に再びキャレットが表示された

tと1の間に再びキャレットが表示された。

Sample/winapi/ShowCaret/ShowCaret/src/ShowCaret at master · bg1bgst333/Sample · GitHub

HideCaret

HideCaretでキャレットを非表示にする。

HideCaret 関数 (winuser.h) - Win32 apps | Microsoft Learn

HideCaret.rcに、

Item6, Item6-1を追加。
HideCaret.cppで、

HideCaretでhEditのキャレットを非表示にする。

BとCの間にキャレットを置いておく。
BとCの間にキャレットを置いておく。

BとCの間にキャレットを置いておく。

Item6-1を選択
Item6-1を選択

Item6-1を選択。

キャレットが非表示となり、マウスポインタで違う位置に置こうとしてもキャレットが表示されない。
キャレットが非表示となり、マウスポインタで違う位置に置こうとしてもキャレットが表示されない。

キャレットが非表示となり、マウスポインタで違う位置に置こうとしてもキャレットが表示されない。

Sample/winapi/HideCaret/HideCaret/src/HideCaret at master · bg1bgst333/Sample · GitHub

EM_REPLACESEL

EM_REPLACESELで、選択範囲のテキストを指定のテキストに置換する。

EM_REPLACESEL メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

EM_REPLACESEL.rcで、

Item5-3を追加。
EM_REPLACESEL.cppで、

Item5-3を選択すると、選択範囲を"XYZ"に置換する。

このように選択しておいて
このように選択しておいて

このように選択しておいて、

Item5-3を選択すると、
Item5-3を選択すると、

Item5-3を選択すると、

このように置換される
このように置換される

このように置換される。

Sample/winapi/EM_REPLACESEL/EM_REPLACESEL/src/EM_REPLACESEL at master · bg1bgst333/Sample · GitHub

EM_SETSEL

EM_SETSELで、選択範囲の開始位置と終了位置を設定する。

EM_SETSEL メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

EM_SETSEL.rcで、

Item5-2を追加。
EM_SETSEL.cppで、

決めうちで、選択班を0から2までとする。

最初こう選択する
最初こう選択する

最初こう選択する。

Item5-1を選択すると、
Item5-1を選択すると、

Item5-1を選択すると、

1から4までの選択だとわかる
1から4までの選択だとわかる

1から4までの選択だとわかる。

Item5-2を選択し、
Item5-2を選択し、

Item5-2を選択し、選択範囲を0から2までに変更する。

Item5-1を選択すると、
Item5-1を選択すると、

Item5-1を選択すると、

 >

選択範囲が0から2までになっている。

選択範囲が0から2までになっている。

Sample/winapi/EM_SETSEL/EM_SETSEL/src/EM_SETSEL at master · bg1bgst333/Sample · GitHub