EM_GETSEL

EM_GETSELで、選択範囲の開始位置と終了位置を取得する。

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

EM_GETSEL.rcで、

Item5とItem5-1を追加。
EM_GETSEL.cppで、

wParamにlStartのアドレス、lParamにlEndのアドレスを渡してる。

"ABCDE"の"BCD"を選択
"ABCDE"の"BCD"を選択

"ABCDE"の"BCD"を選択。

Item5-1を選択
Item5-1を選択

Item5-1を選択。

開始位置が1で終了位置が4。
開始位置が1で終了位置が4。

開始位置が1で終了位置が4。

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

SHGetSpecialFolderPath

SHGetSpecialFolderPathで、特殊フォルダのパスを取得する。

SHGetSpecialFolderPathW 関数 (shlobj_core.h) - Win32 apps | Microsoft Learn

SHGetSpecialFolderPath.rcで、

Item4とItem4-1を追加。

CSIDL_PROFILEは、このユーザのプロファイルフォルダ。

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

Item4-1を選択すると、

自分のプロファイルフォルダのパスが取得できた。
自分のプロファイルフォルダのパスが取得できた。

自分のプロファイルフォルダのパスが取得できた。

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

EM_LINEINDEX

EM_LINEINDEXは、指定の行の先頭までの文字数を取得。

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

EM_LINEINDEX.cppで、

こうすることで、キャレットの位置を行と列で表せることができる。

キャレットをGとHの間に置く。
キャレットをGとHの間に置く。

キャレットをGとHの間に置く。

Item3-1を選択
Item3-1を選択

Item3-1を選択。

1行目、キャレットまで総文字数は9。
1行目、キャレットまで総文字数は9。

1行目、キャレットまで総文字数は9。

キャレットのある行の先頭までが7なので、9からそれを引くとキャレットの列は2。
キャレットのある行の先頭までが7なので、9からそれを引くとキャレットの列は2。

キャレットのある行の先頭までが7なので、9からそれを引くとキャレットの列は2。
つまり、1行目の2列目に、キャレットはある。

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

EM_CHARFROMPOS

GetCaretPosだと座標なので、EM_CHARFROMPOSを使って何行目か、とか、何番目の文字か、とか、そういう情報に変換する。

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

EM_CHARFROMPOS.rcで、

Item3-1を追加。
EM_CHARFROMPOS.cppで、

EM_CHARFROMPOSをSendMessageした時の戻り値のHIWORDは何行目かを示し、LOWORDはキャレットまでの総文字数を示す。

GとHの間にキャレットを置く。
GとHの間にキャレットを置く。

GとHの間にキャレットを置く。

これでItem3-1を選択
これでItem3-1を選択

これでItem3-1を選択。

0行目から数えたら1行目だし、改行コード含めるとキャレットまで9文字。
0行目から数えたら1行目だし、改行コード含めるとキャレットまで9文字。

0行目から数えたら1行目だし、改行コード含めるとキャレットまで9文字。

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

GetCaretPos

GetCaretPosでキャレットの位置を取得する。

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

メニューリソースに、

Item2-2を追加。
GetCaretPos.cppでは、

Item2-2が選択されたら、GetCaretPosでキャレット位置を取得して表示。
渡したPOINT構造体変数ptにエディットボックス上のどこの位置座標かが格納される。
(ドット単位でキャレットの棒の一番上の点の座標かな。)

キャレットを一番左に
キャレットを一番左に

キャレットを一番左に。

Item2-2を選択
Item2-2を選択

Item2-2を選択。

(0, 0)の位置
(0, 0)の位置

(0, 0)の位置。

1文字目の後ろ
1文字目の後ろ

1文字目の後ろ。

(15, 0)の位置
(15, 0)の位置

(15, 0)の位置。

一番右、5文字目の後ろ。
一番右、5文字目の後ろ。

一番右、5文字目の後ろ。

(75, 0)の位置
(75, 0)の位置

(75, 0)の位置。

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

WM_GETFONT

WM_GETFONTで、フォントハンドルを取得する。

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

メニューリソースに、

Item2と、その下のItem2-1を追加。
WM_GETFONT.cppでは、

Item2-1が選択されたら、フォントハンドルと文字の高さを表示。
SelectObjectでhDCに取得したhFontを選択させないと、TEXTMETRIC構造体tmに反映されないので注意。

hFont1はこれ
hFont1はこれ

hFont1はこれ。

hFont2はこれ
hFont2はこれ

hFont2はこれ。

Item2-1を選択
Item2-1を選択

Item2-1を選択。

hFont1と同じ。高さは30。
hFont1と同じ。高さは30。

hFont1と同じ。高さは30。

Item1-2を選択
Item1-2を選択

Item1-2を選択。

Item2-1を選択
Item2-1を選択

Item2-1を選択。

hFont2と同じ。高さは40。
hFont2と同じ。高さは40。

hFont2と同じ。高さは40。

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

WM_SETFONT

WM_SETFONTで、エディットボックスなどのフォントを切り替えることができる。

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

メニューリソースを追加して、

こんな感じ。
WM_SETFONT.cppは、

2つのフォントを用意して、まずはhEditにhFont1をセット。

メニューでItem1-1が選択された時はhFont1、Item1-2が選択された時はhFont2をセット。

最初はhFont1
最初はhFont1

最初はhFont1。

Item1-2を選択すると、
Item1-2を選択すると、

Item1-2を選択すると、

そのままでは変わらないが、入力したり選択すると、明朝のhFont2になる。
そのままでは変わらないが、入力したり選択すると、明朝のhFont2になる。

そのままでは変わらないが、入力したり選択すると、明朝のhFont2になる。

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

Item1-1を選択すると、

入力や選択でゴシックのhFont1に戻る。
入力や選択でゴシックのhFont1に戻る。

入力や選択でゴシックのhFont1に戻る。

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