演習35 「API」 の解説 No.4


《APIの参考書籍》 215〜230 ページ参照。

《 [Min, Max]ボタンを 付加する》


'------------- [ThisWorkbook] -------------

Private Sub Workbook_Open()
  UserForm4.Show
End Sub


'--------------- [Module4] ---------------

'API関数と定数の宣言

'クラスからウィンドウハンドルを取得
Declare Function FindWindow Lib "user32" _
  Alias "FindWindowA" _
    (ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long

'ウィンドウに関する情報を取得
Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" _
    (ByVal hwnd As Long, _
     ByVal nIndex As Long) As Long

'ウィンドウの属性を変更
Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" _
    (ByVal hwnd As Long, _
     ByVal nIndex As Long, _
     ByVal dwNewLong As Long) As Long

'ウィンドウのメニューバー外枠を再描画
Declare Function DrawMenuBar Lib "user32" _
    (ByVal hwnd As Long) As Long

'定数の設定
'ウィンドウスタイルを取得
Public Const GWL_STYLE = -16&
'ウィンドウのサイズ変更
Public Const WS_THICKFRAME = &H40000
'最小化ボタン
Public Const WS_MINIMIZEBOX = &H20000
'最大表示ボタン
Public Const WS_MAXIMIZEBOX = &H10000


'-------------- [UserForm4] --------------

Private Sub UserForm_Initialize()
  '[Min,Max]ボタン付加
  
  Dim hwnd As Long
  Dim lngNewLong As Long
  Dim rc As Long
  Dim strClassName As String  'クラス名
    
  'ユーザーフォームのクラス名を指定
  strClassName = "ThunderDFrame"
  
  'ウィンドウのハンドルを取得
  hwnd = FindWindow(strClassName, Me.Caption)
    
  'ウィンドウに関する情報を取得
  lngNewLong = GetWindowLong(hwnd, GWL_STYLE)
    
  'Min,Maxメニューボタンを付加
  rc = SetWindowLong(hwnd, GWL_STYLE, _
         lngNewLong Or WS_THICKFRAME Or _
         WS_MAXIMIZEBOX Or WS_MINIMIZEBOX)
  
  'ウィンドウのメニューバーの外枠を再描画
  rc = DrawMenuBar(hwnd)
End Sub


'-----------------------------------------

Private Sub CommandButton4_Click()
  Unload Me
End Sub
'-----------------------------------------


API No.3 へ戻る.                            back top