ウィンドウのボーダースタイルを変更          <TOP>


ウィンドウ(Form)のボーダースタイルを変更します。

GetWindowLong 指定されたウィンドウに対しての情報を取得

SetWindowLong 指定されたウィンドウの属性を変更

 

「変更」ボタンをクリックする毎に、BorderStyleを変更しています。

 

'================================================================
'= ウィンドウのボーダースタイルを変更
'=    (ChangeBorderStyle.bas)
'================================================================
#include "Windows.bi"

#define GWL_STYLE -16                   'アプリケーションのインスタンスハンドル
#define GWL_EXSTYLE -20                 '拡張ウィンドウスタイル
#define WS_THICKFRAME &H40000           'サイズ変更境界を持つウィンドウを作成する
#define WS_MAXIMIZEBOX &H10000          '最大化ボタンを持つウィンドウを作成する
#define WS_MINIMIZEBOX &H20000          '最小化ボタンを持つウィンドウを作成する
#define WS_EX_TOOLWINDOW &H80           'ツールウィンドウを作成


' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある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&)

#define SWP_NOSIZE &H1                  'ウインドウの現在のサイズを保持する
#define SWP_NOMOVE &H2                  'ウインドウの現在位置を保持する
#define SWP_NOZORDER &H4                'ウインドウリスト内での現在位置を保持する
#define SWP_NOREDRAW &H8                'ウインドウを自動的に再描画しない
#define SWP_NOACTIVATE &H10             'ウインドウをアクティブにしない
#define SWP_FRAMECHANGED &H20           'ウインドウのサイズ変更中でなくてもWM_NCCALCSIZEを送る
#define SWP_SHOWWINDOW &H40             'ウインドウを表示する
#define SWP_HIDEWINDOW &H80             'ウインドウを隠す
#define SWP_NOCOPYBITS &H100            'クライアント領域の内容をクリアする
#define SWP_NOOWNERZORDER &H200         'オーナーウインドウのZオーダーは変えない
#define SWP_DRAWFRAME &H20              '再描画のときウインドウを囲む枠も描画
#define SWP_NOREPOSITION SWP_NOOWNERZORDER

#define HWND_TOP 0                      'ウインドウをZオーダーの一番上に配置する
#define HWND_BOTTOM 1                   'ウインドウをウインドウリストの一番下に配置する
#define HWND_TOPMOST -1                 'ウインドウをウインドウリストの一番上に配置する
#define HWND_NOTOPMOST -2               'ウインドウをウインドウリストの一番上に配置する

' ウィンドウのサイズ、位置、および Z オーダーを設定。(ウィンドウの重なり順のことを「Zオーダー」といいZオーダーのトップに置くと一番手前に表示される)
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&)

Var Shared Button1 As Object
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared FLG As Integer

'================================================================
'= 
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Style1 As Integer
    Var Style2 As Integer
    Var Ret As Long

    FLG = FLG + 1 : If FLG > 2 Then FLG = 0

    Select Case FLG
        Case 0
            Style1 = True
        Case 1
            Style2 = True
        Case Else
            Style1 = True
            Style2 = True
    End Select
  
    If Style1 Then
        Ret = Api_SetWindowLong(GethWnd, GWL_STYLE, Api_GetWindowLong(GethWnd, GWL_STYLE) xor (WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX))
    End If

    If Style2 Then
        Ret = Api_SetWindowLong(GethWnd, GWL_EXSTYLE, Api_GetWindowLong(GethWnd, GWL_EXSTYLE) xor WS_EX_TOOLWINDOW)
    End If

    Ret = Api_SetWindowPos(GethWnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED)
End Sub

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