フォームの縁が沈んで見える境界線を指定          <TOP>


GetWindowLong 指定されたウィンドウに関しての情報を取得
SetWindowLong 指定されたウィンドウの属性を変更
SetWindowPos ウィンドウのサイズ、位置、および Z オーダーを設定

 

'================================================================
'= フォームの縁が沈んで見える境界線を指定
'=    (SetWindowLong3.bas)
'================================================================
#include "Windows.bi"

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある32ビット値を取得することもできる
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' 指定されたウィンドウの属性を変更。また、拡張ウィンドウメモリの指定されたオフセットの32ビット値を書き換えることができる
Declare Function Api_SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

' ウィンドウのサイズ、位置、および Z オーダーを設定
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&)

#define GWL_EXSTYLE -20                 '拡張ウィンドウスタイル
#define WS_EX_CLIENTEDGE &H200          '縁が沈んで見える境界線を持つウィンドウを指定
#define SWP_NOSIZE &H1                  'ウィンドウの現在のサイズを保持する
#define SWP_NOMOVE &H2                  'ウィンドウの現在位置を保持する
#define SWP_NOZORDER &H4                'ウィンドウリスト内での現在位置を保持する
#define SWP_FRAMECHANGED &H20           'ウィンドウのサイズ変更中でなくてもWM_NCCALCSIZEを送る
#define SWP_DRAWFRAME &H20              '再描画のときウィンドウを囲む枠も描画

Var Shared Button1 As Object
Var Shared Button2 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

Var Shared OldStyle As Long

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var NewStyle   As Long
    Var Ret As Long

    '拡張ウィンドウスタイルを取得
    OldStyle = Api_GetWindowLong(GethWnd, GWL_EXSTYLE)

    '拡張ウィンドウスタイルに縁が沈んで見える境界線のフラグを追加
    NewStyle = OldStyle Or WS_EX_CLIENTEDGE

    '新しい拡張ウィンドウスタイルを設定
    Ret = Api_SetWindowLong(GethWnd, GWL_EXSTYLE, NewStyle)

    '新しいウィンドウスタイルを適用
    Ret = Api_SetWindowPos(GethWnd, 0, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_DRAWFRAME)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long

    '拡張ウィンドウスタイルを設定
    Ret = Api_SetWindowLong(GethWnd, GWL_EXSTYLE, 0)

    'ウィンドウスタイルを適用
    Ret = Api_SetWindowPos(GethWnd, 0, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_DRAWFRAME)
End Sub

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