プロが教えるわが家の防犯対策術!

ActiveBasic4.23.00を使ってプログラムを書いています。

例えば、次のようなコードがあったとします。

'グローバル
Dim DragFlag As Long
Dim hDC As HDC
'此処まで

Sub MainWnd_Destroy()
ReleaseDC(hMainWnd,hDC)
test_DestroyObjects()
PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hDC = GetDC(hMainWnd)


End Sub

Sub MainWnd_LButtonDown(flags As Long, x As Integer, y As Integer)
DragFlag = 1
MoveToEx(hDC,x,y,ByVal NULL)

End Sub

Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer)
If DragFlag = 0 Then Exit Sub
LineTo(hDC,x,y)

End Sub

Sub MainWnd_LButtonUp(flags As Long, x As Integer, y As Integer)
DragFlag = 0

End Sub
(ABWiki様を参考にさせていただきました。)

これで、簡単なお絵かきが出来ますが、再描写(例えば、ウインドウの大きさを変えるなど)をするとすべて消えてしまいます。
これを、描いた線を消さずに再描写することは出来ないのでしょうか。
すみませんがご教授ください。

A 回答 (1件)

まぁ おおざっぱに言えば


1) 入力された点群データを配列などに記憶しておいて Paintイベントで描画
2) 裏画面(Bitmap)を使った ダブルバッファを実装

といった具合でしょう

WM_CRATEイベントなどで 画面(デスクトップ)の大きさと同じビットマップを作成
HDCやHPEN、HBRUSHなども必要に応じて作成
LButonDownイベントで
表画面の描画のHDCでMoveToEx
同様に裏画面でもMoveToEx

MouseMoveで表画面へLineToで描画 ... 裏画面へは描画しない

LButtonUpで裏画面へLineToで描画
始点と終点の範囲を RECT構造体にセットして InvalidateRect

Paintイベントで 裏画面から表画面へ BitBltなどで転送
といった具合で ...
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!