● タイトルバーを非表示にする ●

これまた使う機会がなさそう…。こんなコードを書くより BorderStyle を 「0 - なし」とした方が自然。

'ウインドウスタイルを変更する
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'ウインドウスタイルを取得する
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

'ウインドウの位置を変更する
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const WS_CAPTION = &HC00000
Private Const GWL_STYLE = (-16)   'ウインドウスタイルを取得・変更
Private Const SWP_NOMOVE = &H2 '移動しない
Private Const SWP_NOSIZE = &H1   'サイズ変更しない
Private Const SWP_NOZORDER = &H4 'ZOrderを変更しない
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED 'フレーム描画する

'---------------------------------------------------------------------------
' 関数名 : DeleteTitleBar
' 機  能 : タイトルバーを消す
' 引  数 : (in)hWnd … 対象ウィンドウのハンドル
' 返り値 : なし
'---------------------------------------------------------------------------
Public Sub DeleteTitleBar(ByVal hWnd As Long)

  Dim WinStyle As Long

  'タイトルバーの状態を取得
  WinStyle = GetWindowLong(hWnd, GWL_STYLE)
  WinStyle = WinStyle Xor WS_CAPTION

  'タイトルバーの状態を変更
  WinStyle = SetWindowLong(hWnd, GWL_STYLE, WinStyle)

  'フレームを再描画
  Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, _
         SWP_DRAWFRAME Or SWP_NOZORDER Or SWP_NOMOVE Or SWP_NOSIZE)

End Sub


戻る