タイトルバーを作成する <TOP>
タイトルバーを作成してみます。
DrawCaption 指定のウィンドウのキャプションを指定のデバイスコンテキストに描画
SetRect RECT構造体の値を設定
SendMessage ウィンドウにメッセージを送信
ReleaseCapture マウスのキャプチャを解放
フォームのコントロールを「なし」に設定。作成したタイトルバーをドラッグして移動させます。(コントロールを「あり」とするだけででいいのでは?と、突っ込まないで・・・)
プロパティで「フレームの種類」を「サイズ変更(太枠)」にすると右図のようになります。チョット変ですね。
'================================================================
'= タイトルバーを作成する
'= (MakeTitleBar.bas)
'================================================================
#include "Windows.bi"
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' 指定のウィンドウのキャプションを指定のデバイスコンテキストに描画
Declare Function Api_DrawCaption& Lib "user32" Alias "DrawCaption" (ByVal hWnd&, ByVal hDC&, pcRect As RECT, ByVal un&)
' RECT構造体の値を設定
Declare Function Api_SetRect& Lib "user32" Alias "SetRect" (lpRect As RECT, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)
' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)
' マウスのキャプチャを解放
Declare Function Api_ReleaseCapture& Lib "user32" Alias "ReleaseCapture" ()
' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)
' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)
#define WS_BORDER &H800000 'フォームの枠線がある
#define WM_NCLBUTTONDOWN &HA1 '非クライアント領域で左マウスボタンを押す
#define HTCAPTION 2 'タイトル バーをクリックしたことを示す
#define DC_ACTIVE 1 'アクティブなときの色
#define DC_BINS 6 'プリンタで使用できる給紙方法を取得
#define DC_COPIES 18 '最大部数を取得
#define DC_GRADIENT &H20 'グラデーション
#define DC_ICON 4 'アイコン付き
#define DC_INBUTTON &H10 'ボタンとして描画
#define DC_NOTACTIVE &H2 '
#define DC_SMALLCAP 2 '幅の狭いタイプ
#define DC_TEXT 8 'タイトルテキスト付き
#define TitleHeight 26 'タイトルバーの高さ
Var Shared Button1 As Object
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Var Shared rct As RECT
Var Shared hDC As Long
'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
Var Ret As Long
hDC = Api_GetDC(GethWnd)
End Sub
'================================================================
'=
'================================================================
Declare Sub MainForm_MouseDown edecl (ByVal Button As Integer, ByVal Shift As Integer, ByVal x As single, ByVal y As single)
Sub MainForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As single, ByVal y As single)
If y > TitleHeight Then Exit Sub
Var Ret As Long
Ret = Api_ReleaseCapture()
Ret = Api_SendMessage(GethWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End Sub
'================================================================
'=
'================================================================
Declare Sub MainForm_Resize edecl ()
Sub MainForm_Resize()
Var Ret As Long
Cls
Ret = Api_SetRect(rct, 0, 0, GetWidth, TitleHeight)
Ret = Api_DrawCaption(GethWnd, hDC, rct, DC_ACTIVE Or DC_TEXT Or DC_GRADIENT)
If GetWidth < 240 Or GetHeight < 140 Then SetWindowSize 240, 140
Button1.MoveWindow GetWidth - 86, GetHeight - 42
End Sub
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
Var Ret As Long
Ret = Api_ReleaseDC(GethWnd, hDC)
End
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End