次のスタイル
WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_TABSTOP | WS_GROUP | WS_VISIBLE
と ex-stles で作成されたメイン ウィンドウがあります
WS_EX_ACCEPTFILES | WS_EX_CONTROLPARENT | WS_EX_LEFT | WS_EX_LTRREADING
。
WS_VISIBLE | WS_CHILD | ES_READONLY
このメイン ウィンドウには、スタイルと ex-style で作成された編集コントロールである子ウィンドウがあります
WS_EX_CLIENTEDGE
。
このエディット コントロールをプログレス バー コントロールとして使用します。標準の Wind32 プログレス バー コントロール ( PROGRESS_CLASS
) は使用したくありません。カスタム ペイントを実行したいからです (たとえば、塗りつぶしの色を動的に変更したり、テキストを表示したりします)。
次のコードを使用して、メイン ウィンドウの任意の領域をペイントできます。
// hWnd: Handle of the main window
case WM_PAINT:
hDc = BeginPaint(hWnd, &Ps);
Rect = AFunctionToGetCornerThePointsOfTheEditControl();
Rect.right = Rect.left + 3 * (Rect.right - Rect.left) / 4; // Fill 3/4 (75%) of it
Rect.left -= 10; // Enlarge the paint region a little
Rect.top -= 10; // so that we can see it if it stays
Rect.bottom += 10; // under the edit control.
hBrush = CreateSolidBrush(RGB(50,100,255));
ret = FillRect(hDc, &Rect, hBrush); // ret = 1 always
ler = GetLastError(); // ler = 0
EndPaint(hWnd, &Ps);
break;
次のようになります。
このコードを少し変更して、代わりに子コントロールをペイントしました。
// hWndEdit: Handle of the edit control
case WM_PAINT:
hDc = BeginPaint(hWndEdit, &Ps);
Rect = AFunctionToGetCornerThePointsOfTheEditControl();
Rect.right = Rect.left + 3 * (Rect.right - Rect.left) / 4; // Fill 3/4 (75%) of it
Rect.left -= 10;
Rect.top -= 10;
Rect.bottom += 10;
hBrush = CreateSolidBrush(RGB(50,100,255));
ret = FillRect(hDc, &Rect, hBrush); // ret = 0 always
ler = GetLastError(); // ler = 6 (ERROR_INVALID_HANDLE)
EndPaint(hWndEdit, &Ps);
break;
今回はうまくいきません。画面領域の外にドラッグするとすぐに、メイン ウィンドウが完全に消え、完全に応答しなくなります。その下のデスクトップ アイコンは表示されますが、クリックできません。
では、子ウィンドウ (エディット コントロール) を描画するにはどうすればよいでしょうか?