ボタンを押したらウィンドウを赤で塗りつぶしたいのですが、
(必要な部分だけ抜粋)
Sub MainWnd_Paint(hDC As DWord)
hMemDC=CreateCompatibleDC(hDC)
hPen=CreatePen(PS_SOLID,1,RGB(255,0,0))
hOldObject=SelectObject(hMemDC,hPen)
Rectangle(hMemDC,0,0,300,60)
BitBlt(hDC,0,0,300,60,hMemDC,0,0,NULL)
End Sub
Sub MainWnd_CommandButton1_Click()
InvalidateRect(hMainWnd,ByVal NULL,TRUE)
End Sub
赤ではなく黒で塗りつぶされてしまいます。
赤以外の色でも同じです。
さっぱり原因が分からないのですが、どこか見落としているのでしょうか?
色が変わらない
Paintイベントは最初にウィンドウが表示されたときなど、いつでも呼ばれるのでボタンが押された後かどうかを識別する手段が必要です。
Rectangle()ではペンは周りの枠線を書くのに使われます。
内部の塗りつぶしにはブラシを使うのでブラシを作らなければなりません。
またCreateCompathibleDC()の返すデバイスコンテキストは1×1のサイズなのでそのままではうまくいきません。
とりあえず今回はPaintイベントのhdcに直接Rectangle()を実行することにします。
というわけでこんな感じになります。
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