Windows 7を使用している場合、同様の機能に既に気づいているかもしれません。たとえば、Windows Media Playerにも同様のボタンがあります。 トラックを切り替えたり、再生を停止したりできます。 合計で、これらのボタンは7つまで作成できます。
間違いなく、このような機能はMedia Playerだけでなく、アプリケーションにも役立つ可能性があります。 アプリケーションでこれを実装する方法を見てみましょう。
前述したように、すべてのWindows 7システム関数には、.NET Interop Sample Libraryと呼ばれる.NETのラッパーがあります。 プログレスバーのステータスを制御するときに、このライブラリのサービスを使用しました。 次に、このライブラリも使用します。
ボタンの作成は、WM_TaskbarButtonCreatedイベントが処理されるときに発生する必要があります。 したがって、フォームでは、WndProcメソッドをオーバーライドし、このイベントが発生した瞬間を処理する必要があります。
protected override void WndProc(ref Message m)
{
if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
{
// initialize buttons
}
base.WndProc(ref m);
}
ボタンを初期化するには、ThumbButtonManagerオブジェクトが必要です。 このオブジェクトは、これらのボタンの動作と表示を制御します。 このオブジェクトは、CreateThumbButtonManager拡張メソッドを使用して作成できます。 その後、CreateThumbButtonメソッドを使用してボタンオブジェクトを作成する必要があります。 すべてのボタンを作成したら、AddThumbButtonsメソッドを使用してボタンをタスクバーに追加する必要があります。
protected override void WndProc(ref Message m)
{
if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
{
InitializeThumbButtons();
}
base.WndProc(ref m);
}
protected void InitializeThumbButtons()
{
ThumbButtonManager thumbButtonManager =
WindowsFormsExtensions.CreateThumbButtonManager(this);
var decreaseThumbButton = thumbButtonManager.CreateThumbButton(1,
Icons.Navigation_First_2, "To reduce the progress");
decreaseThumbButton.Clicked += delegate
{
// ..
};
thumbButtonManager.AddThumbButtons(decreaseThumbButton);
}
これで、アプリケーションを起動すると、1つのコントロールボタンが表示されたことがわかります。 ただし、クリックしようとすると、イベントハンドラーが機能しないことがわかります。 ハンドラーが動作を開始するには、ThumbButtonManagerの機能を明示的に渡して、WndProcメソッドでイベントを処理する必要があります。
その結果、次の簡単なコードが得られます。
private ThumbButtonManager _thumbButtonManager;
protected override void WndProc(ref Message m)
{
if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
{
InitializeThumbButtons();
}
if (_thumbButtonManager != null)
_thumbButtonManager.DispatchMessage(ref m);
base.WndProc(ref m);
}
protected void InitializeThumbButtons()
{
if (_thumbButtonManager == null)
{
_thumbButtonManager = WindowsFormsExtensions.CreateThumbButtonManager(this);
}
var decreaseThumbButton = _thumbButtonManager.CreateThumbButton(1, Icons.Navigation_First_2, "To reduce the progress");
decreaseThumbButton.Clicked += delegate
{
Progress.Text = (float.Parse(Progress.Text) - 10).ToString();
WindowsFormsExtensions.SetTaskbarProgress(this, float.Parse(Progress.Text));
};
// other buttons
_thumbButtonManager.AddThumbButtons(decreaseThumbButton, normalStateThumbButton, indeterminateStateThumbButton, pauseStateThumbButton, errorStateThumbButton, increaseThumbButton);
}
このアプリケーションには、進行状況を管理するためのボタン(前の場合のように)と6つのボタンが含まれています。
Windows 7向けのアプリケーションの開発にお役立てください!
デモアプリケーション:
ThumbButtons.zip