投稿日 | : 2005/01/27(Thu) 12:07 |
投稿者 | : 花ちゃん |
Eメール | : |
URL | : |
タイトル | : これもお気に召しませんか? |
> > 非表示でもいいのですが、画面がずれない方法はないでしょうか?
> それを実現したら次の要求が出てくるでしょう。
> (メニューの高さ分だけコントロールを移動させれば画面がずれないですが)
Option Explicit
'メニューを設定・削除する(P138)
Private Declare Function SetMenu Lib "user32" _
(ByVal hwnd As Long, ByVal hMenu As Long) As Long
'メニューオブジェクトのハンドルを取得する(P124)
Private Declare Function GetMenu Lib "user32" _
(ByVal hwnd As Long) As Long
Private hwndMenu As Long
Private hFlag As Boolean
Private Hbar As Long
Private Sub Command1_Click()
'メニューを削除(非表示)
Dim sh As Long
Dim sh1 As Long
sh = Me.ScaleHeight
Call SetMenu(Me.hwnd, 0)
sh1 = Me.ScaleHeight
If sh <> sh1 Then
hFlag = True
Hbar = sh1 - sh
Dim i As Long
On Error Resume Next
'メニューバーが消えてコントロールのTopが変った分だけ補正
For i = 0 To Controls.Count - 1
Controls(i).Top = Controls(i).Top + Hbar
Next i
End If
End Sub
Private Sub Command2_Click()
'メニューを設定(表示)
Call SetMenu(Me.hwnd, hwndMenu)
If hFlag = True Then
hFlag = False
Dim i As Long
On Error Resume Next
'コントロールのTopを元の位置に戻す
For i = 0 To Controls.Count - 1
Controls(i).Top = Controls(i).Top - Hbar
Next i
End If
End Sub
Private Sub Form_Load()
'メニューのハンドルを取得
hwndMenu = GetMenu(Me.hwnd)
End Sub