ウィンドウ内で指定した領域を描画領域としたい場合にはチャイルドウィンドウを作成するのが良いのでしょうか?
ペイントソフト等は(私の作りたいのはドロー系なのですが)描画領域と作業を指定するボタン等の領域はわかれているので、描画領域を作成したいのです。
以前、使用していたDelphiではCanvasを使っていたので考えたこともありませんでした(JAVAではFrameでした)。いろんな物に使えると思うので最低限必要なもののアドバイスがいただけたらと思います。
描画領域の作成
Re:描画領域の作成
いつもお世話になります。
InvalidateRgn関数を使ってみるのはいかがでしょうか。
■全体の流れ■
1.起動時にCreateRectRgn関数などで描画領域の形のリージョンを作る
2.更新する時にInvalidateRgn関数で再描画メッセージを送り、更新領域に描画する
3.終了時に1で作ったリ-ジョンをDeleteObject関数で破棄する
こんな感じでどうでしょうか?
InvalidateRgn関数を使ってみるのはいかがでしょうか。
■全体の流れ■
1.起動時にCreateRectRgn関数などで描画領域の形のリージョンを作る
2.更新する時にInvalidateRgn関数で再描画メッセージを送り、更新領域に描画する
3.終了時に1で作ったリ-ジョンをDeleteObject関数で破棄する
こんな感じでどうでしょうか?
描画領域の作成
ログインして時間がたつとログアウトしてしまうのですね。ボーッとしてたらゲストになっていました。
ありがとうございます、BingoManさん。
リージョンですか、思いつきませんでした。リージョンについての知識がないので、これから調べてみます。
私は、子ウィンドウを作る方向で考えていました。
ActiveBasicFan の"ウィンドウ in ウィンドウ"を使って子ウィンドウを作ってみました。
http://abfan.active.client.jp/012.html
子ウィンドウの 識別名:"CWnd1",背景:色指定(白),スタイル:ポップアップ,枠無し,可視,タイプ:通常ウィンドウ で作成時に子ウィンドウの表示位置と大きさの指定をします(親ウィンドウのサイズ変更などには対応していません)。
こちらのアドバイスもよろしくお願いします。
ありがとうございます、BingoManさん。
リージョンですか、思いつきませんでした。リージョンについての知識がないので、これから調べてみます。
私は、子ウィンドウを作る方向で考えていました。
ActiveBasicFan の"ウィンドウ in ウィンドウ"を使って子ウィンドウを作ってみました。
http://abfan.active.client.jp/012.html
子ウィンドウの 識別名:"CWnd1",背景:色指定(白),スタイル:ポップアップ,枠無し,可視,タイプ:通常ウィンドウ で作成時に子ウィンドウの表示位置と大きさの指定をします(親ウィンドウのサイズ変更などには対応していません)。
こちらのアドバイスもよろしくお願いします。
[ここをクリックすると内容が表示されます]
コード: 全て選択
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub CWnd1_Create(ByRef CreateStruct As CREATESTRUCT)
Dim OldStyle As DWord
Dim rect As RECT
Dim width As Long , hight As Long
OldStyle = GetWindowLong(hCWnd1,GWL_STYLE)
'ウィンドウスタイルの変更
SetWindowLong(hCWnd1,GWL_STYLE,WS_CHILD or OldStyle)
'親ウィンドウを指定する
SetParent(hCWnd1,hMainWnd)
'子ウィンドウの表示位置とサイズの指定
'親ウィンドウのサイズ取得
GetClientRect(hMainWnd , rect)
With rect
width = (.right - .left)-10
hight = (.bottom - .top)-30
SetWindowPos(hCWnd1,NULL,5,20,width,hight,SWP_SHOWWINDOW)
End With
End Sub
'テスト用(子ウィンドウに文字を書く)
Sub CWnd1_Paint(hDC As HDC)
Dim lptStr As String
Dim hdc As HDC
lptStr = "Hello Active Basic!"
hdc = GetDC(hCWnd1)
'文字を書く
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr))
ReleaseDC(hCWnd1 , hdc)
End Sub