ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 17:16

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
 記事の件名: 色が変わらない
投稿記事Posted: 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

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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2005年5月30日(月) 21:47 
指摘を頂いて確認すると、僕のすごいミスってますね^^;;
今度はちゃんと真っ赤です。
ありがとうございました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[35人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean