VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 フォーム関係のメニュー
1.表示しているフォームを一度に閉じる
2.フォームの背景にグラデーションを描く
3.メニューの下に3Dラインを引く
4.アクティブなウィンドウだけをタスクバーに表示する
5. フォームを常に手前に表示する
6.フォームの最大化・最小化を取得及び設定・画面の中央に表示する
7.システムメニュー(フォームの左上)を操作する
8.タイトルバーなしウィンドウの作成
9.円形・多角形のフォーム及びコントロールを作成する
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載のフォームに関するサンプル


8.タイトルバーなしウィンドウの作成
1.タイトルバーなしウィンドウの作成
2.
3.
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:                  参照設定方法参照
使用 API:SetWindowPos / GetWindowLong / SetWindowLong / GetSystemMetrics
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.タイトルバーなしウィンドウの作成
タスクバーにアイコンとキャプションを残したままタイトルバーを 外す方法

'下記サンプルの著作権は、ゆう(U)さんにあります。

Option Explicit   'SampleNo:061  2002.05.14   @ 2007.01.19

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 Declare Function GetWindowLong Lib "user32" _
            Alias "GetWindowLongA" _
            (ByVal hWnd As Long, _
            ByVal nIndex As Long) As Long
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 GetSystemMetrics Lib "user32" _
            (ByVal nIndex As Long) As Long

Private Sub
Command2_Click()
  'タイトルバーを外す
  Call sTitleReleace2(Form1, True)
End Sub

Private Sub Command3_Click()
  'タイトルバーを付ける
  Call sTitleReleace2(Form1, False)
End Sub

'==========================================================
'タイトルバーを付ける・外す sTitleReleace2 ゆう(U)さん投稿分
'==========================================================
' Call sTitleReleace2(myForm, [blnMenu])
' 引数 myForm :フォーム
'    blnMenu :表示されているメニュー
'     有 True
'     無 False
'----------------------------------------------------------
'MDI親フォームは対象外です
'----------------------------------------------------------
'外したタイトルバーのスタイルにウィンドウサイズを合わせる
'フォームの内部作業領域が変わらない様にサイズ修正
'タイトルバーを表示していないフォームは無処理です
'----------------------------------------------------------
Private Sub sTitleReleace2(ByRef myForm As Form, _
                  Optional ByVal blnMenu _
                  As Boolean = False)
  Const GWL_STYLE = (-16&)
  Const SWP_NOSIZE = &H1&
  Const SWP_NOMOVE = &H2&
  Const SWP_NOZORDER = &H4&
  Const SWP_FRAMECHANGED = &H20&
  Const SWP_DRAWFRAME = SWP_FRAMECHANGED
  Const WS_CAPTION = &HC00000
  Const SM_CYCAPTION = 4&    'タイトル部の高さ
  Const SM_CYSMCAPTION = 51&   '小さいタイトル部の高さ
  Const SM_CXBORDER = 5&     '非立体表示の枠幅
  Const SM_CYBORDER = 6&     '非立体表示の枠高さ
  Const SM_CXDLGFRAME = 7&    'タイトル付き変更不可の枠幅
  Const SM_CYDLGFRAME = 8&    'タイトル付き変更不可の枠高さ
  Const SM_CXFRAME = 32&     'サイズ変更可の枠幅
  Const SM_CYFRAME = 33&     'サイズ変更可の枠高さ
  Dim intBorderStyle As Integer
  Dim lngWidth    As Long
  Dim lngHeight   As Long
  Dim lngTitleHeight As Long
  Dim lngFrame_X   As Long
  Dim lngFrame_Y   As Long
  Dim lngResult   As Long

  With myForm
   intBorderStyle = .BorderStyle
   If intBorderStyle = vbBSNone Then
     If blnMenu Then
      intBorderStyle = vbFixedSingle
     Else
      Exit Sub   '枠なし
     End If
   ElseIf (.ControlBox = False) And (Len(.Caption) = 0&) Then
     Exit Sub     '枠なし
   End If
   lngWidth = .ScaleX(.Width, vbTwips, vbPixels)
   lngHeight = .ScaleX(.Height, vbTwips, vbPixels)
   lngResult = GetWindowLong(.hWnd, GWL_STYLE)
   lngResult = lngResult Xor WS_CAPTION
   '3D枠とフラット枠(この辺の枠幅算出は若干疑問(不安)が残る)
   Select Case intBorderStyle
     Case vbFixedDialog   'タイトルのみでOK
     'フラットスタイルへ
     Case vbFixedSingle, vbFixedToolWindow
      '非立体表示の枠ではなく、枠なしが採用されている
      lngFrame_X = GetSystemMetrics(SM_CXDLGFRAME)
      lngFrame_Y = GetSystemMetrics(SM_CYDLGFRAME)
      If (lngResult And WS_CAPTION) = WS_CAPTION Then
        lngWidth = lngWidth + (lngFrame_X * 2&)
        lngHeight = lngHeight + (lngFrame_X * 2&)
      Else
        lngWidth = lngWidth - (lngFrame_X * 2&)
        lngHeight = lngHeight - (lngFrame_X * 2&)
      End If
     Case vbSizable, vbSizableToolWindow '3Dスタイルのまま
      'タイトルをなくすとタイトル付き変更不可の
      '枠が採用されているようなので・・・
      lngFrame_X = (GetSystemMetrics(SM_CXFRAME) _
              - GetSystemMetrics(SM_CXDLGFRAME))
      lngFrame_Y = (GetSystemMetrics(SM_CYFRAME) _
              - GetSystemMetrics(SM_CYDLGFRAME))
      If (lngResult And WS_CAPTION) = WS_CAPTION Then
        lngWidth = lngWidth + (lngFrame_X * 2&)
        lngHeight = lngHeight + (lngFrame_Y * 2&)
      Else
        lngWidth = lngWidth - (lngFrame_X * 2&)
        lngHeight = lngHeight - (lngFrame_Y * 2&)
      End If
   End Select
   'タイトルバーの高さ調整
   Select Case intBorderStyle
     Case vbFixedSingle, vbSizable, vbFixedDialog
      lngTitleHeight = GetSystemMetrics(SM_CYCAPTION)
     Case vbFixedToolWindow, vbSizableToolWindow
      lngTitleHeight = GetSystemMetrics(SM_CYSMCAPTION)
   End Select
   If (lngResult And WS_CAPTION) = WS_CAPTION Then
     lngHeight = lngHeight + lngTitleHeight
   Else
     lngHeight = lngHeight - lngTitleHeight
   End If
   lngResult = SetWindowLong(.hWnd, GWL_STYLE, lngResult)

   lngResult = SetWindowPos(.hWnd, 0&, 0&, 0&, _
                    lngWidth, lngHeight, _
                    SWP_DRAWFRAME Or _
                    SWP_NOZORDER Or _
                    SWP_NOMOVE)
  End With
End Sub


タイトルバーなしウィンドウの作成(簡易型)

Private Sub Command1_Click()
'BorderStyle を vbBSNone - 0 にすれば同様にタイトルバーは
'表示されませんがこの場合3Dでは表示されません。(モアベター)
'フォームの Controlbox プロパティを False にし、Caption を ""
'(なにも入力しない)に設定するだけでできます。
  Form2.Show
End Sub

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
指定のシステムメニューを削除する  システムメニューを元に戻す  最大化・最小化ボタンをプログラムから削除する  最大化・最小化ボタンをプログラムから元に戻す
メニューバーを再描画する  システムメニューのハンドルを取得  ウィンドウに関する属性を変更する  ウィンドウに関するデータを取得する



このページのトップへ移動します。