デバイスコンテキストのレイアウトを取得          <TOP>


FindWindow クラス名またはキャプションを与えてウィンドウハンドルを取得

GetLayout デバイスコンテキストのレイアウトを返す

SetLayout デバイスコンテキストのレイアウトを変更

GetDC デバイスコンテキストのハンドルを取得

ReleaseDC デバイスコンテキストを解放

 

例では、メモ帳を起動後そのデバイスコンテキストにレイアウトを設定し、表示させています。

 

'================================================================
'= デバイスコンテキストのレイアウトを取得
'=    (GetLayout.bas)
'================================================================
#include "Windows.bi"

' クラス名またはキャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

' デバイスコンテキスト(DC)のレイアウトを返す
Declare Function Api_GetLayout& Lib "gdi32" Alias "GetLayout" (ByVal hDC&)

' デバイスコンテキスト(DC)のレイアウトを変更
Declare Function Api_SetLayout& Lib "gdi32" Alias "SetLayout" (ByVal hDC&, ByVal dwLayout&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

#define LAYOUT_RTL &H1                  '既定の水平方向レイアウトを「右から左」に設定
#define LAYOUT_LTR &H2                  '既定の水平方向レイアウトを「左から右」に設定

Var Shared Text(1) As Object
Var Shared Radio(1) As Object
Var Shared Button(1) As Object

For i = 0 To 1
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
    Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14
    Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
Next

'================================================================
'=
'================================================================
Declare Function Layout bdecl () As Integer
Function Layout()
    Layout = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()

    'コマンドボタンを無効に設定
    Button(0).EnableWindow 0

    'メモ帳を起動
    Shell "Notepad.exe"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var ClassName As String
    Var Caption As String
    Var hWnd As Long
    Var hWinDC As Long
    Var Flag As Long
    Var Ret As Long

    'クラス名でウィンドウハンドルを取得
    ClassName = "Notepad"
    Caption = "無題 - メモ帳"

    hWnd = Api_FindWindow(ClassName, Caption)

    'ウィンドウハンドルを取得できたときは
    If hWnd <> 0 Then
        'デバイスコンテキストのハンドルを取得
        hWinDC = Api_GetDC(hWnd)

        'デバイスコンテキストのレイアウトを設定
        If Layout = 0 Then
            Ret = Api_SetLayout(hWinDC, LAYOUT_LTR)
        Else
            Ret = Api_SetLayout(hWinDC, LAYOUT_RTL)
        End If

        'デバイスコンテキストのレイアウトを取得
        Flag = Api_GetLayout(hWinDC)

        'レイアウトを表示
        If Flag = LAYOUT_LTR Then
            Text(1).SetWindowtext "左から右"
        Else If Flag = LAYOUT_RTL Then
            Text(1).SetWindowtext "右から左"
        End If

        'デバイスコンテキストを解放
        Ret = Api_ReleaseDC(hWnd, hWinDC)
    End If
End Sub

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