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


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

《閉じる[x]ボタンを 削除する》


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

Private Sub Workbook_Open()
  UserForm3.Show
End Sub


'--------------- [Module3] ---------------

'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_SYSMENU = &H80000


'-------------- [UserForm3] --------------

Private Sub UserForm_Initialize()
'[x]ボタン削除
  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)
  
  'ウィンドウの属性を変更(削除)
  rc = SetWindowLong(hwnd, GWL_STYLE, _
         lngNewLong And (Not WS_SYSMENU))
       
  'ウィンドウのメニューバーの外枠を再描画
  rc = DrawMenuBar(hwnd)
End Sub


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

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


API No.2 へ戻る.
API No.4 へ移る.                            back top