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

OPENFILENAME

ファイル選択をするときは、OPENFILENAME構造体をGetOpenFileNameなどに渡す必要がある。

OPENFILENAMEA (commdlg.h) - Win32 apps | Microsoft Learn

どれくらい最低限渡せば動くのか。

		// メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時.
		case WM_COMMAND:	// メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時.(uMsgがWM_COMMANDの時.)

			// WM_COMMANDブロック
			{

				// どのメニュー項目が選択されたかを判定する.
				switch (LOWORD(wParam)){	// LOWORD(wParam)で選択されたメニュー項目のIDが取得できるので, その値で判定する.

					// 取得したIDごとに処理を分岐.
					// Openが選択された時.
					case ID_FILE_OPEN:

						// ID_FILE_OPENブロック
						{

							// 変数の宣言・初期化.
							OPENFILENAME ofn = {0};	// OPENFILENAME構造体変数ofnを{0}で初期化.

							// ファイル選択.
							if (!GetOpenFileName(&ofn)){	// GetOpenFileNameでファイルを選択.

								// 選択しなかった場合.(キャンセル)
								return 0;	// 処理したので戻り値として0を返す.

							}

						}

						// 既定の処理へ向かう.
						break;	// breakで抜けて, 既定の処理(DefWindowProc)へ向かう.

初期化だけで渡すと、

選択しても、
選択しても、

選択しても、

何も起きない
何も起きない

何も起きない。

ofn.lStructSizeにsizeof(OPENFILENAME)を渡すだけで、

選択したら、
選択したら、

選択したら、

表示された
表示された

ファイル選択ダイアログが表示された。

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

BITMAP構造体

BITMAP構造体に、ビットマップの幅、高さ、形式、色書式などの情報が含まれる。

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

BITMAP_struct.cppで、

bmBitsPixel以外の要素を表示してみる。
左クリックで、

こうなっている。
こうなっている。

こうなっている。
32bitビットマップなのか?!

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

GetObject

GetObjectで、GDIオブジェクトハンドルから、GDIオブジェクト情報を持つ構造体を取得できる。

GetObject function (wingdi.h) - Win32 apps | Microsoft Learn

ビットマップハンドルHBITMAPを渡せば、BITMAP構造体を取得でき、そこから幅と高さを取得できる。
GetObject.cppで、

このように取得。

ウィンドウ名に幅と高さをセット。

起動時
起動時

起動時。
左クリックすると、

ウィンドウ名が(640, 480)に。
ウィンドウ名が(640, 480)に。

ウィンドウ名が(640, 480)に。

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

CWnd::OnHScroll

CWnd::OnHScrollイベントハンドラを追加して、水平スクロールバーの動きも実装する。

CWnd クラス | Microsoft Learn

これを選択して
これを選択して

これを選択して、

ここに貼り付ける
ここに貼り付ける

ここに貼り付ける。

これでハンドラ追加
これでハンドラ追加

これでハンドラ追加。
あとは、

こうして、

こう。

これで自由に動かせる
これで自由に動かせる

これで自由に動かせる。

Sample/mfc/CWnd/OnHScroll/src/CWnd_ at master · bg1bgst333/Sample · GitHub