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

GetParent

GetParentで、親ウィンドウのハンドルを取得する。

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

GetParent.cppで、

生成した後のhWnd、

WM_CREATEでのhwnd、hwndを親とするエディットコントロールハンドルhEdit、hEditからGetParentで取得したhParentを表示。

親であるhwndはこう。

親であるhwndはこう。

hEditはこう。
hEditはこう。

hEditはこう。

hParentはこう
hParentはこう

hParentはこう。

最後にhWndはこう。
最後にhWndはこう。

最後にhWndはこう。

で、こうなる。
で、こうなる。

で、こうなる。

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

TEXTMETRIC

TEXTMETRIC構造体には、フォントの基本情報が格納されている。

TEXTMETRICA (wingdi.h) - Win32 apps | Microsoft Learn

フォントの高さに加えて、フォントの平均幅、最大幅も描画してみる。
TEXTMETRIC.cppで、

こうすると、

こう描画される。
こう描画される。

こう描画される。
tm.tmAveCharWidthがフォントの中での平均幅、
tm.tmMaxCharWidthがフォントの中での最大幅。
半角文字なら平均の8で収まる。
全角だと最大の16になると予想できる。

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

GetTextMetrics

GetTextMetricsで、指定されたデバイスコンテキストに描画するテキストの詳細情報を取得する。

GetTextMetrics 関数 (wingdi.h) - Win32 apps | Microsoft Learn
改行する

GetTextMetrics.cppで、

GetTextMetricsで、TEXTMETRIC構造体tmを取得する。
tm.tmHeightが文字の高さを表すので、それをTextOutで描画。

高さは18らしい。
高さは18らしい。

高さは18らしい。

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