色が変わらない

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 色が変わらない

by Toshi » 2005年5月30日(月) 21:47

指摘を頂いて確認すると、僕のすごいミスってますね^^;;
今度はちゃんと真っ赤です。
ありがとうございました。

by イグトランス » 2005年5月30日(月) 21:42

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

色が変わらない

by Toshi » 2005年5月30日(月) 21:42

ボタンを押したらウィンドウを赤で塗りつぶしたいのですが、
(必要な部分だけ抜粋)

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

赤ではなく黒で塗りつぶされてしまいます。
赤以外の色でも同じです。
さっぱり原因が分からないのですが、どこか見落としているのでしょうか?

ページトップ