|
|
||||
Tips > |
|||||
SHAppBarMessage でタスクバー領域を取得 |
更新 : 2009/12/09 |
||||
|
|
||
解説: デスクトップに関するアプリケーションを作成していると、画面エリアやタスクバーあるいは OfficeBar などのサイズを知りたい時があります。 今回は、これらの中からタスクバーの領域を取得してみます。 タスクバーの領域は、計算からも求まりそうですが、より簡単に知るにはどうすればよいでしょう? 方法はいくつかあります。ここでは、SHAppBarMessage 関数を使ってみます。 SHAppBarMessage 関数は、構造体を引数に持つので、たくさんのパラメーターがあります。 例では、最小限必要な部分だけを記述しています。詳細はインターネットなどで調べてみてください。 使用例: 以下では、SHAppBarMessage 関数を使って、タスクバーの領域を取得しています。 コンポーネントは、 ListBox と Button を適当に配置するだけです。 Button1 をクリックすると、SHAppBarMessage 関数の引数に ABM_GETTASKBARPOS とAPPBARDATA 構造体を渡し、タスクバー領域を得ています。領域は rc メンバに RECT 型で格納されます。 SHAppBarMessage 関数はタスクバーの領域だけではなく、現在の状態や位置なども調べられますので試しておくことをお勧めします。 ヒント: 以前、SystemParametersInfo 関数を用いて、タスクバーを除いたデスクトップ領域を取得しました。また、Screen 変数を使い、デスクトップ全体の領域が取得できることも確認しています。 これらの Tips から、タスクバーの領域を計算で求めてみるのもいいでしょう。 #include "shellapi.h" //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { APPBARDATA ad; ad.cbSize = sizeof(ad); ad.hWnd = NULL; SHAppBarMessage(ABM_GETTASKBARPOS, &ad); ListBox1->Items->Add("Top : " + IntToStr(ad.rc.top)); ListBox1->Items->Add("Bottom : " + IntToStr(ad.rc.bottom)); ListBox1->Items->Add("Left : " + IntToStr(ad.rc.left)); ListBox1->Items->Add("Right : " + IntToStr(ad.rc.right)); } //------------------------------------------------------------------- |