Paintイベントは最初にウィンドウが表示されたときなど、いつでも呼ばれるのでボタンが押された後かどうかを識別する手段が必要です。
Rectangle()ではペンは周りの枠線を書くのに使われます。
内部の塗りつぶしにはブラシを使うのでブラシを作らなければなりません。
またCreateCompathibleDC()の返すデバイスコンテキストは1×1のサイズなのでそのままではうまくいきません。
とりあえず今回はPaintイベントのhdcに直接Rectangle()を実行することにします。
というわけでこんな感じになります。
コード:
Typedef BOOL = Long
Dim bClicked = FALSE As BOOL
Sub MainWnd_Paint(hdc As HDC)
If bClicked Then
Dim hBrush As HBRUSH, hOldBrush As HBRUSH
hBrush=CreateSolidBrush(RGB(255, 0, 0))
hOldBrush=SelectObject(hdc, hBrush)
Rectangle(hdc, 0, 0, 300, 60)
SelectObject(hdc, hOldBrush)
DeleteObject(hBrush)
End If
End Sub
Sub MainWnd_CommandButton1_Click()
bClicked = TRUE
InvalidateRect(hMainWnd, ByVal NULL, TRUE)
End Sub