子ウィンドウへの描画

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
かっぽれ

子ウィンドウへの描画

#1 投稿記事 by かっぽれ »

何度もすみません、かっぽれです。

現在簡単なお絵描きソフトを作っているのですが、
ボタンとかをつけるために描画領域と他のところを分けてから、
マウスをドラッグしても何も描かれなくなりました(分ける前は描けました)。
というか描画領域が表示すらしません。
コードは以下の通りです。

描画領域じゃないほう

コード: 全て選択


'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim hPen As HPEN
Dim hBrush As HBRUSH
Dim hDC As HDC
Dim paint As Long
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

	' イベントプロシージャの呼び出しを行います。
	MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
	Penmanshiper_DestroyObjects()
	PostQuitMessage(0)
End Sub


Sub MainWnd_IDM_pencil_MenuClick()
	hPen=CreatePen(PS_SOLID,pixel,RGB(0,0,0))
	hBrush=CreateSolidBrush(RGB(0,0,0))
	SelectObject(hDC,hPen)
	SelectObject(hDC,hBrush)
End Sub

Sub MainWnd_IDM_eraser_MenuClick()
	hPen=CreatePen(PS_SOLID,pixel,RGB(255,255,255))
	hBrush=CreateSolidBrush(RGB(255,255,255))
	SelectObject(hDC,hPen)
	SelectObject(hDC,hBrush)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	SetParent(hCambusWnd,hMainWnd)
End Sub
描画領域

コード: 全て選択


'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [CambusWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hCambusWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。

'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function CambusWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

	' イベントプロシージャの呼び出しを行います。
	CambusWndProc=EventCall_CambusWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub CambusWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	hDC=GetDC(hCambusWnd)
	hPen=CreatePen(PS_SOLID,2,RGB(0,0,0))
	hBrush=CreateSolidBrush(RGB(0,0,0))
	SelectObject(hDC,hPen)
	SelectObject(hDC,hBrush)
End Sub

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

Sub MainWnd_LButtonUp(flags As Long, x As Integer, y As Integer)
	DeleteObject(hPen)
	DeleteObject(hBrush)
	paint=0
End Sub

Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer)
	If paint=1 Then
		LineTo(hDC,x,y)
	End If
	End Sub
ちなみに描画領域ウィンドウのプロパティは以下の通りです。
・背景:白
・スタイル:チャイルド、枠無し、可視
・タイプ:通常ウィンドウ
田中 宏
記事: 11
登録日時: 2008年3月31日(月) 19:04
お住まい: 東京都

#2 投稿記事 by 田中 宏 »

SetParent(hCambusWnd,hMainWnd)を
ShowWindow(hCambusWnd,SW_SHOW)に変更してみてください。子ウィンドウをアクティブにします。
ShowWindow 関数(API)のヘルプを見てください。ウィンドウの表示状態を指定できます。
かっぽれ

#3 投稿記事 by かっぽれ »

枠無しなので表示しているのかどうか分からないだけでした……。
すいません。
返信する