C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

フォームタイトルバーのマウスイベント取得について

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■82488 / inTopicNo.1)  フォームタイトルバーのマウスイベント取得について
  
□投稿者/ 夜叉丸 (34回)-(2017/01/11(Wed) 18:05:14)

分類:[.NET 全般] 

フォームのタイトルバーでマウスの離れた時のイベントを取りたかったので、
以下のようにしたのですが、引っかかってきません。

  [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
  protected override void WndProc(ref Message m)
  {
   const int WM_NCLBUTTONUP = 0xA2;

   if(m.Msg == WM_NCLBUTTONUP) label1.Text = "離れた ";

   base.WndProc(ref m);
  }

ためしに以下の場合にすると「押された」は引っかかるのですが
「離れた」は引っかかりません。

  [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
  protected override void WndProc(ref Message m)
  {
   const int WM_NCLBUTTONDOWN = 0xA1;
   const int WM_NCLBUTTONUP = 0xA2;

   if(m.Msg == WM_NCLBUTTONDOWN) label1.Text = "押された";
   if(m.Msg == WM_NCLBUTTONUP) label1.Text = "離れた ";

   base.WndProc(ref m);
  }

何がおかしいのでしょうか?

引用返信 編集キー/
■82489 / inTopicNo.2)  Re[1]: フォームタイトルバーのマウスイベント取得について
□投稿者/ Hongliang (487回)-(2017/01/11(Wed) 18:20:39)
WM_NCLBUTTONUPで検索しただけですが。
https://oshiete.goo.ne.jp/qa/2710782.html
引用返信 編集キー/
■82493 / inTopicNo.3)  Re[2]: フォームタイトルバーのマウスイベント取得について
□投稿者/ 夜叉丸 (35回)-(2017/01/11(Wed) 19:06:40)
No82489 (Hongliang さん) に返信

ありがとうございます。

VisualStudio2013 .Net c# を使っているのですが。
WIN32 やら、MessageBox 等ほとんどが使えないようで、
この環境では、処理(対応?)できないみたいですね。

他に方法はないのでしょうか?


引用返信 編集キー/
■82502 / inTopicNo.4)  Re[3]: フォームタイトルバーのマウスイベント取得について
□投稿者/ とっちゃん (415回)-(2017/01/12(Thu) 10:25:55)
No82493 (夜叉丸 さん) に返信

> VisualStudio2013 .Net c# を使っているのですが。
> WIN32 やら、MessageBox 等ほとんどが使えないようで、
> この環境では、処理(対応?)できないみたいですね。
>
WIN32などが使えないというのがよくわからんですが。。。

Spy++ などでマウスメッセージをチェックするとすぐにわかりますが
タイトルバーで WM_NCLBUTTONDOWN がくると、ウィンドウドラッグのために
マウスを「キャプチャー」しているので、WM_MOUSEMOVE と WM_LBUTTONUP になります。

実装の都合を考えると、ドラッグ中のマウスメッセージはアプリケーションのウィンドウプロシージャには
飛んでこないと思います(確認していませんけどね)。

なお、キャプチャーした時点で、その座標はそのウィンドウのクライアント領域内という扱いに変わるため(Windowsの仕様です)
NC(Non Client)ではなくなり、WM_NCLBUTTONUP が来ることはなくなります(ボタンを離すまでキャプチャーが解除されないため)。


一応。。。ウィンドウ移動「後」が検知できればいいだけなら
Hongling さんの提示してくれたリンク先同様、「WM_EXITSIZEMOVE」メッセージを受け取ることで確認が取れます。
もしくは、移動したよという通知になる、WM_MOVE メッセージでもいいと思います。

引用返信 編集キー/
■82503 / inTopicNo.5)  Re[1]: フォームタイトルバーのマウスイベント取得について
□投稿者/ 魔界の仮面弁士 (1049回)-(2017/01/12(Thu) 10:51:05)
No82488 (夜叉丸 さん) に返信
> ためしに以下の場合にすると「押された」は引っかかるのですが
> 「離れた」は引っかかりません。

ボタンが押されたことを WM_NCLBUTTONDOWN で検知できるのであれば、
DirectX を併用して、その後ボタンが押されていない状態に遷移したかどうかを
捕らえてみては如何でしょう。
http://bbs.wankuma.com/index.cgi?mode=al2&mo=81351&namber=81351&space=0&page=0&KLOG=138
http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse3.html
引用返信 編集キー/
■82510 / inTopicNo.6)  Re[2]: フォームタイトルバーのマウスイベント取得について
□投稿者/ Jitta (258回)-(2017/01/12(Thu) 17:57:44)
No82488 (夜叉丸 さん) に返信
>>ためしに以下の場合にすると「押された」は引っかかるのですが
>>「離れた」は引っかかりません。
なぜ捉えられないかについては、書かれている通り。
特定のものだけを表示するのではなく、
とりあえず全部表示すれば、
自力解決もできたのでは?
引用返信 編集キー/
■82574 / inTopicNo.7)  Re[3]: フォームタイトルバーのマウスイベント取得について
□投稿者/ 夜叉丸 (36回)-(2017/01/17(Tue) 08:52:29)
すみません。

理解できませんでした。
違う方向でアプローチしてみます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ