フレームコントロールを描画(T)          <TOP>


指定されたタイプとスタイルを備える、ボタンやスクロールバーなどのフレームコントロールを描画します。

DrawFrameControl フレームコントロールを描画

OffsetRect 矩形領域の補正

 

un1(uType)とun2(uState)の組み合わせでボタンやスクロールバーなどのフレームコントロールを描画します。

 

'================================================================
'= フレームコントロールを描画
'=    (DrawFrameControl.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

' 指定されたタイプとスタイルを備える、ボタンやスクロールバーなどのフレームコントロールを描画
Declare Function Api_DrawFrameControl& Lib "user32" Alias "DrawFrameControl" (ByVal hDC&, lpRect As RECT, ByVal un1&, ByVal un2&)
                            
' 矩形領域の補正
Declare Function Api_OffsetRect& Lib "user32" Alias "OffsetRect" (lpRect As RECT, ByVal x&, ByVal y&)

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

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

#define DR_DRAWWIDTH 20
#define DR_DRAWHEIGHT 20

'uType
#define DFC_BUTTON 4                    'ボタン
#define DFC_CAPTION 1                   'タイトルバーのボタン
#define DFC_MENU 2                      'メニュー
#define DFC_POPUPMENU 5                 'ポップアップメニュー
#define DFC_SCROLL 3                    'スクロールバー

'uState
#define DFCS_ADJUSTRECT &H2000          '境界を調節してボタンの周囲の辺を除外
#define DFCS_BUTTON3STATE 8             '3ステートボタン
#define DFCS_BUTTONCHECK 0              'チェックボックス
#define DFCS_BUTTONPUSH &H10            'ボタン
#define DFCS_BUTTONRADIO 4              'ラジオボタン
#define DFCS_BUTTONRADIOIMAGE 1         'ラジオボタンのイメージ
#define DFCS_BUTTONRADIOMASK 2          'ラジオボタンのマスク
#define DFCS_CAPTIONCLOSE 0             '閉じるボタン
#define DFCS_CAPTIONHELP 4              'ヘルプボタン
#define DFCS_CAPTIONMAX 2               '最大化ボタン
#define DFCS_CAPTIONMIN 1               '最小化ボタン
#define DFCS_CAPTIONRESTORE 3           '元に戻すボタン
#define DFCS_CHECKED &H400              'チェックされた状態
#define DFCS_FLAT &H4000                '平らなデザイン
#define DFCS_HOT &H1000                 '
#define DFCS_INACTIVE &H100             '使用不可
#define DFCS_MENUARROW 0                'サブメニュー矢印
#define DFCS_MENUARROWRIGHT 4           '矢印
#define DFCS_MENUBULLET 2               'オプションマーク
#define DFCS_MENUCHECK 1                'チェックマーク
#define DFCS_MONO &H8000                'モノクロの境界
#define DFCS_PUSHED &H200               '押された状態
#define DFCS_SCROLLCOMBOBOX 5           'コンボボックスタイプ
#define DFCS_SCROLLDOWN 1               '下
#define DFCS_SCROLLLEFT 2               '左
#define DFCS_SCROLLRIGHT 3              '右
#define DFCS_SCROLLSIZEGRIP 8           'サイズ変更グリップ
#define DFCS_SCROLLUP 0                 '上
#define DFCS_TRANSPARENT &H800          '

Var Shared Button1 As Object

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

Var Shared hDC As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    hDC = Api_GetDC(GethWnd)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var rc As RECT
    Var i As Long
    Var j As Long
    Var Ret As Long

    For i = 1 To 4
        rc.Top = 30 * i - 15
        rc.Bottom = rc.Top + DR_DRAWHEIGHT
        For j = 1 To 8
            rc.Left = 40 * j - 25
            rc.Right = rc.Left + DR_DRAWWIDTH
            Ret = Api_DrawFrameControl(hDC, rc, i, j)
        Next
    Next

    rc.Left = 15
    rc.Right = 240
    Ret = Api_OffsetRect(rc, 0, 30)
    Ret = Api_DrawFrameControl(hDC, rc, 0, DFCS_BUTTON3STATE)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl (Cancel%, Mode%)
Sub MainForm_QueryClose(Cancel%, Mode%)
    Var Ret As Long

    If Cancel% = 0 Then
        Ret = Api_ReleaseDC(GethWnd, hDC)
        End
    End If
End Sub

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