サイズグリップを作成(T)          <TOP>


サイズグリップを(擬似的に)作成してみます。

ReleaseCapture マウスのキャプチャを解放

SendMessage ウィンドウにメッセージを送信

GetSystemMetrics 表示要素の寸法とシステム構成の設定を取得

 

フォント名「Marlett」で小文字の「o」を書き込んだテキストボックス(境界線なし)を、常時フォームの右下に固定しています。

 

参考
Marlett について 
http://www.itmedia.co.jp/help/tips/windows/w0288.html

 

'================================================================
'= サイズグリップを(擬似的に)作成

'=    (SimulateSizeGrip.bas)

'================================================================
#include "Windows.bi"

' マウスのキャプチャを解放
Declare Function Api_ReleaseCapture& Lib "user32" Alias "ReleaseCapture" ()

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' 表示要素の寸法とシステム構成の設定を取得
Declare Function Api_GetSystemMetrics& Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex&)

#define WM_NCLBUTTONDOWN &HA1   '非クライアント領域で左マウスボタンを押す
#define HTBOTTOMRIGHT 17        'ウィンドウ境界の右下隅

#define SM_CXFRAME 32           'サイズ可変ウィンドウの境界線の、X方向の幅
#define SM_CYFRAME 33           ' 〃Y方向の幅
#define SM_CYSIZE 31            'タイトルバー内のビットマップの高さ
#define SM_CYBORDER 6           'サイズ固定ウィンドウの境界線のY方向の幅

Var Shared Text1 As Object

Var Shared zX As Integer
Var Shared zY As Integer

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var fs As Integer

    fs = 14
    Text1.Attach GetDlgItem("Text1")
    Text1.SetFontSize fs
    Text1.SetWindowSize fs, fs
    Text1.SetFontName "Marlett"
    Text1.SetWindowText "o"

    ShowWindow -1

    zX = Api_GetSystemMetrics(SM_CXFRAME) * 2
    zY = Api_GetSystemMetrics(SM_CYFRAME) * 2 + Api_GetSystemMetrics(SM_CYBORDER) + Api_GetSystemMetrics(SM_CYSIZE)
End Sub

'================================================================
'=
'================================================================
Declare Sub Mainform_MouseDown edecl (ByVal Button%, ByVal Shift%, ByVal SX!, ByVal SY!)
Sub Mainform_MouseDown(ByVal Button%, ByVal Shift%, ByVal SX!, ByVal SY!)
    Var Ret As Long

    If Button% = 1 Then
        Ret = Api_ReleaseCapture()
        Ret = Api_SendMessage(Text1.GethWnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Resize edecl ()
Sub MainForm_Resize()

    Text1.MoveWindow (Getwidth - Text1.GetWidth) - zX, GetHeight - Text1.GetHeight - zY
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End