- PR -

マウスイベントとタスクバー処理の関係

1
投稿者投稿内容
Gordon
常連さん
会議室デビュー日: 2004/02/18
投稿数: 34
投稿日時: 2004-10-25 19:07
はじめまして,今ツールを作っていまして,以下の問題に直面しています。解決方法をご存知であればよろしくお願いいたします。
 フォームにボタンを作成して,ボタンのBackColorを黒にして,そのボタン上にマウスポインタが通った場合(MouseEnterイベント),色を白にする。マウスポインタがボタンから離れると,色は黒に戻る(MouseLeaveイベント)。このフォームを表示させるときには事前にShowInTaskBarをFalseにする。ボタンを押すとShowInTaskBarをTrueにしてタスクバー上に表示させるようにする。
 上記のような簡単なツールを作りました。ボタンを押す前はマウスイベントが常に有効になって動いていたのですが,ボタンを押した後,マウスイベントが一切効かなくなりました(マウスを押した時点でボタンの色は白になり,それ以降色は変化しません)。どうもタスクバーの処理を入れているのが問題なのですが,今私は上記処理において,ボタンクリック後もマウスイベントが有効になってほしいのです。
 .NET Framework1.0も同じ動作をしていました。私はバグだと思っていまして,1.1で直ると思っていたのですが,いまだに同じ処理が行われます。
 もしいい解決方法がありましたら,宜しくお願いいたします。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-25 23:29
南部です。

こちらでも再現できました。
いや〜、こんなんよく見つけましたねぇ。

#原因はハンドルの再作成かな?
#なんか、イベントがらみでプロックされているのかなぁ

で、とりあえず回避できました。

コード:
private void button1_Click(object sender, System.EventArgs e)
{
  Controls.Remove(button1);
  this.ShowInTaskbar = !this.ShowInTaskbar;
  Controls.Add(button1);
}


のように、はさんでみて下さい。
こちらでは、これで動きました。

動作環境は
Window Server 2003
.NET Framework 1.1 SP1
です。
Gordon
常連さん
会議室デビュー日: 2004/02/18
投稿数: 34
投稿日時: 2004-10-26 09:34
南部様

早速のお返事ありがとうございます。
はい,問題なくできるようになりました。
1.0の時もいろいろ調べてましてバグだと思い込んでいました。
ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-26 20:54
 Win32APIの仕様が絡んでいそうです。

ms-help://MS.MSDNQTR.2004OCT.1041/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/taskbar.htm
"2004OCT"の部分を、VS.NET2003の場合は"2003FEB"に、その他のMSDNの場合は適切に変更してください。
「Task Bar」というタイトルの文書が出てきます。メニューからだと、「ユーザー インターフェイス デザインおよび開発→User Interface Design and Development (英語)→Windows Shell→SDK→Windows Shell→Shell Programmer's Guide→Intermediate Shell Techniques→Imtermediate Shell Techniques: Programing the Shell→Task Bar」

引用:

Managing Taskbar Buttons
To ensure that the window button is placed on the taskbar, create an unowned window with the WS_EX_APPWINDOW extended style. To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style.

テキトー訳
ウインドウボタンがタスクバーの上に置かれることを保証するために、 WS_EX_APPWINDOW 拡張されたスタイルで所有されないウインドウを作成してください。 ウインドウボタンがタスクバーの上に置かれるのを阻止するために、 WS_EX_TOOLWINDOW 拡張されたスタイルを持って所有されないウインドウを作成してください。


 リアルタイムに変更するのは、Win32API的には、「仕様外」なのかな?
_________________
Gordon
常連さん
会議室デビュー日: 2004/02/18
投稿数: 34
投稿日時: 2004-10-27 13:09
Jitta様

yu-yuでございます。
お返事ありがとうございます。
ちょっとこのSiteを見てみます。

おっしゃる通り,使い方が仕様外なのでしょうかね?
1

スキルアップ/キャリアアップ(JOB@IT)