FillPath

FillPathで、パスの中を塗りつぶす。

FillPath function (wingdi.h) - Win32 apps | Microsoft Docs
パス

WM_PAINTで、

		// 画面の描画を要求された時.
		case WM_PAINT:		// 画面の描画を要求された時.(uMsgがWM_PAINTの時.)
 
			// WM_PAINTブロック
			{

				// このブロックのローカル変数の宣言
				HDC hDC;			// デバイスコンテキストハンドルを格納するHDC型変数hDC.
				PAINTSTRUCT ps;		// ペイント情報を管理するPAINTSTRUCT構造体型の変数ps.
				BOOL bRet;	// BOOL型変数bRet.

				// ウィンドウの描画開始
				hDC = BeginPaint(hwnd, &ps);	// BeginPaintでこのウィンドウの描画の準備をする. 戻り値にはデバイスコンテキストハンドルが返るので, hDCに格納.

				// 普通にテキスト描画.
				TextOut(hDC, 50, 50, _T("ABCDE"), _tcslen(_T("ABCDE")));	// TextOutで"ABCDE"を描画.

				// パスの開始.
				bRet = BeginPath(hDC);	// BeginPathでパスの開始.
				if (bRet){	// 真なら成功.
					
					// パスにテキスト描画.
					HFONT hFont, hOldFont;	// フォントハンドルhFont, hOldFont.
					SetBkMode(hDC, TRANSPARENT);	// SetBkModeで背景を透過.
					hFont = CreateFont(48, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, NULL);	// サイズ48のフォントを生成.
					hOldFont = (HFONT)SelectObject(hDC, hFont);	// SelectObjectでhDCとhFontの組み合わせを選択.
					TextOut(hDC, 50, 100, _T("FGHIJ"), _tcslen(_T("FGHIJ")));	// TextOutで"FGHIJ"を描画.
					SelectObject(hDC, hOldFont);	// SelectObjectで元に戻す.
					DeleteObject(hFont);	// DeleteObjectでhFontを削除.
					
				}

				// パスの終了.
				EndPath(hDC);	// EndPathでパスの終了.

				// パスの描画.
				StrokePath(hDC);	// StrokePathでパスの輪郭を描画.

				// パスの内部を塗りつぶし.
				HBRUSH hBrush, hOldBrush;	// ブラシハンドルhBrush, hOldBrush.
				hBrush = CreateSolidBrush(RGB(0xff, 0x0, 0x0));	// CreateSolidBrushで赤いブラシを作成.
				hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);	// SelectObjectでhDCとhBrushの組み合わせを選択.
				FillPath(hDC);	// FillPathでパスの内部を塗りつぶす.
				SelectObject(hDC, hOldBrush);	// SelectObjectでhOldBrushに戻す.
				DeleteObject(hBrush);	// DeleteObjectでhBrushを削除.

				// ウィンドウの描画終了
				EndPaint(hwnd, &ps);	// EndPaintでこのウィンドウの描画処理を終了する.

			}

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

TRANSPARENTにして背景を透過、フォントも48と大きくした。
FillPathの部分は、EndPathや、StrokePathの後ろに書いている。
赤いブラシを作って、選択して、その色で塗りつぶすのだが、

輪郭描画はあるのに塗りつぶされない。
輪郭描画はあるのに塗りつぶされない。

輪郭描画はあるのに、塗りつぶされない。
どうも、同時には出来ない模様。

StrokePathをコメントアウトすると、

輪郭描画はされなくなったが、赤いブラシでの塗りつぶしはされるようになった。
輪郭描画はされなくなったが、赤いブラシでの塗りつぶしはされるようになった。

輪郭描画はされなくなったが、赤いブラシでの塗りつぶしはされるようになった。

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