スクロールバーを左右入れ替える          <TOP>


GetWindowLong 指定されたウィンドウに関しての情報を取得
SetWindowLong 指定されたウィンドウの属性を変更
 

 

'================================================================
'= スクロールバーを左右入れ替える
'=    (SetWindowLong5.bas)
'================================================================
#include "Windows.bi"

#define GWL_EXSTYLE -20                 '拡張ウィンドウスタイル
#define WS_EX_RIGHT &H1000              '右揃えされたプロパティを持つウィンドウを作成
#define WS_EX_LEFTSCROLLBAR &H4000      '垂直スクロールバーがクライアント領域の左側に置かれる

' 指定されたウィンドウに関しての情報を取得
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' 指定されたウィンドウの属性を変更
Declare Function Api_SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

Var Shared List1 As Object
Var Shared Check1 As Object
Var Shared Check2 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Check1.Attach GetDlgItem("Check1") : Check1.SetFontSize 14
Check2.Attach GetDlgItem("Check2") : Check2.SetFontSize 14

Var Shared glnglpOriginalWndProc As Long
Var Shared glngOriginalhWnd As Long

'================================================================
'=
'================================================================
Declare Sub ListScrollAlign(ByVal Align As Long)
Sub ListScrollAlign(ByVal Align As Long)
    Var nStyle As Long
    Var Ret As Long

    Align = Check1.GetCheck

    nStyle = Api_GetWindowLong(List1.GethWnd, GWL_EXSTYLE)
        
    Select Case Align
        Case 0
            nStyle = nStyle And Not WS_EX_LEFTSCROLLBAR
        Case 1
            nStyle = nStyle Or WS_EX_LEFTSCROLLBAR
    End Select
      
    Ret = Api_SetWindowLong(List1.GethWnd, GWL_EXSTYLE, nStyle)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
   Var x As Long
   
   For x = 0 To 20
      List1.AddString Format$(Rnd(1) * 1000000, "#######.#####")
   Next

   Check1.SetWindowText "スクロールバー[左]"
   Check2.SetWindowtext "スクロールバー[右]"
End Sub

'================================================================
'=
'================================================================
Declare Sub Check1_on edecl ()
Sub Check1_on()
    Check2.SetCheck 0
    ListScrollAlign(Align)
End Sub

'================================================================
'=
'================================================================
Declare Sub Check2_on edecl ()
Sub Check2_on()
    Check1.SetCheck 0
    ListScrollAlign(Align)
End Sub

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