タスクバーを自動的に隠す設定とタスクバーを他のウィンドウの手前に表示する設定を適用する
ここでは、この2つのタスクバープロパティによって、今までに慣れたものとは違う方法をとることにしました。というのも、コードでデスクトップツールバーオブジェクトを作成し、それをタスクバーの場合と同じやり方で操作できるからです。タスクバーを右クリックして、新規ツールバーの作成を選択すれば、それは通常のコンピュータユーザーにとってデスクトップツールバーを意味します。プログラマは、このデスクトップツールバーを「アプリケーションバー(AppBar
)」と呼びます。アプリケーションバーはタスクバーと同じ機能を持っており、ボタンとメニューを収容したり、隠したり、サイズを変更したり、移動したりすることができます。
作業を楽にするため、新しいアプリケーションバークラスを作成することにしました。このクラスは新しいクラスとして追加することも、フォームのクラスの中に入れることもできます。どちらにしても、「TBAppBar
」のような分かりやすい名前を付け、そこに次のコードを追加してください。
Public Class TBAppBar 'Get Message Sent By App Bar Private Declare Function GetAppBarMessage Lib "shell32" _ Alias "SHAppBarMessage" _ (ByVal dwMessage As Integer, _ ByRef pData As APPBARDATA) = As Integer 'Send Message To App BAr Private Declare Function SetAppBarMessage Lib "shell32" _ Alias "SHAppBarMessage" _ (ByVal dwMessage As Integer, _ ByRef pData As APPBARDATA) As Integer 'AppBar Structure Private Structure APPBARDATA Dim cbSize As Integer Dim hwnd As Integer Dim uCallbackMessage As Integer Dim uEdge As Integer Dim rc As Rectangle Dim lParam As Integer End Structure 'Get Current State Private Const ABM_GETSTATE As Int32 = &H4 'Get TaskBar Position Private Const ABM_GETTASKBARPOS As Int32 = &H5 'Apply Setting(s) Private Const ABM_SETSTATE As Int32 = &HA 'Autohide Private Const ABS_AUTOHIDE As Int32 = &H1 'Always on Top Private Const ABS_ALWAYSONTOP As Int32 = &H2 Private TBAppBAutoHide As Boolean Private TBAppBarAlwaysOnTop As Boolean Public Sub New() Me.GetState() 'Get Current State End Sub Private Sub GetState() 'What Setting? Dim AppBarSetting As New APPBARDATA 'Initialise AppBarSetting.cbSize = Marshal.SizeOf(AppBarSetting) 'Get Current State Dim AppBarState As Int32 = _ GetAppBarMessage(ABM_GETSTATE, AppBarSetting) Select Case AppBarState 'Nothing Set Case 0 TBAppBAutoHide = False TBAppBarAlwaysOnTop = False 'Always On Top Case ABS_ALWAYSONTOP TBAppBAutoHide = False TBAppBarAlwaysOnTop = True Case Else 'AutoHide TBAppBAutoHide = True End Select End Sub 'Apply Settings Private Sub SetState() 'Setting We Want To Apply Dim AppBarSetting As New APPBARDATA 'Initialise AppBarSetting.cbSize = Marshal.SizeOf(AppBarSetting) If Me.AutoHide Then AppBarSetting.lParam = ABS_AUTOHIDE 'AutoHide End If 'Always On Top If Me.AlwaysOnTop Then AppBarSetting.lParam = AppBarSetting.lParam Or ABS_ALWAYSONTOP End If SetAppBarMessage(ABM_SETSTATE, AppBarSetting) End Sub Public Property AutoHide() As Boolean 'Autohide Get Return TBAppBAutoHide End Get Set(ByVal Value As Boolean) TBAppBAutoHide = Value Me.SetState() End Set End Property Public Property AlwaysOnTop() As Boolean 'Always On Top Get Return TBAppBarAlwaysOnTop End Get Set(ByVal Value As Boolean) TBAppBarAlwaysOnTop = Value Me.SetState() End Set End Property End Class
用法
フォームクラス内に新しいTBAppBar
オブジェクトを作成することを忘れないでください。
Private AB As New TBAppBar 'AppBar Object
この2つのフォームボタンに次のコードを追加して、TBAppBar
クラスの該当するプロパティを適用します。
Private Sub btnAutoHide_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAutoHide.Click Select Case btnAutoHide.Text Case "Auto Hide TaskBar" btnAutoHide.Text = "Auto Hide TaskBar Off" AB.AutoHide = True 'Set AutoHide On Case "Auto Hide TaskBar Off" btnAutoHide.Text = "Auto Hide TaskBar" AB.AutoHide = False 'Set AutoHide Off End Select End Sub Private Sub btnTop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnTop.Click Select Case btnTop.Text Case "Keep TaskBar on Top" AB.AlwaysOnTop = True 'Set Always On Top On btnTop.Text = "Don't Keep TaskBar on Top" Case "Don't Keep TaskBar on Top" AB.AlwaysOnTop = False 'Set Always On Top Off btnTop.Text = "Keep TaskBar on Top" End Select End Sub
このアプリケーションバークラスにはもっと多くのメソッドと値(API定数)がありますが、ここではAutoHide
とAlwaysOnTop
だけを説明します。このクラスには関連するAPIが2つあります。
GetAppBarMessage
SetAppBarMessage
GetAppBarMessage
はツールバーの現在の状態を取得します。SetAppBarMessage
はツールバーの現在の状態を変更するのに使われます。現在の状態とは、ツールバーのプロパティ、位置、可視性などを指します。このクラスの中で2つのプロパティを作成しましたが、その1つはAutoHide
に対応するもので、もう1つはAlwysOnTop
に対応するものです。この2つの設定は互いに緊密な関係があるので、どちらもSetState
メソッドを使って簡単に操作できます。アプリケーションバーについては各自でもう少し深く研究してみてください。
タスクバー領域に関しては基本的にこれで完了です。まだ触れていないタスクバー領域としては、昔ながらのスタートボタンとスタートメニューがあります。