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

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

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

Re[2]: WndProcのフックによるドラッグ移動について


(過去ログ 10 を表示中)

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

■2095 / inTopicNo.1)  WndProcのフックによるドラッグ移動について
  
□投稿者/ Hirotow (75回)-(2007/03/18(Sun) 12:59:30)
Hirotow さんの Web サイト

分類:[C# (Windows)] 

WndProcをオーバーライドしてタイトルバーのないフォームをドラッグ移動する方法がありますが、
この方法を使うと「ポインタがクライアント領域上に存在しない」ことになってしまうため、当然のことながらカーソルの指定が効かなかったり、コンテキストメニューを表示できなかったりと弊害があります。

# 実のところこの原因に気付くまでに相当な時間がかかってしまいました。

そこで、これらの弊害が発生しないようにWndProcを実装することはできないでしょうか?
どなたか詳しい方がいましたら助言をお願いします。
引用返信 編集キー/
■2096 / inTopicNo.2)  Re[1]: WndProcのフックによるドラッグ移動について
□投稿者/ 渋木宏明(ひどり) (156回)-(2007/03/18(Sun) 13:40:26)
渋木宏明(ひどり) さんの Web サイト
> そこで、これらの弊害が発生しないようにWndProcを実装することはできないでしょうか?

可能です。

WndProc をオーバーライドしてナニが行われているかをきちんと把握していれば、どうれば良いかはすぐに分かるはずです。
WM_NCHITTEST に対して適切な応答を返してやることで動作が制御できます。

WM_NCHITTEST メッセージの lParam にはマウス座標値が入っているので、その座標値が「ポインタがクライアント上に存在して欲しい時」に該当したら、HTBORDER ではなく HTCLIENT を返せばよいのです。

引用返信 編集キー/
■2097 / inTopicNo.3)  Re[2]: WndProcのフックによるドラッグ移動について
□投稿者/ Hirotow (76回)-(2007/03/18(Sun) 14:21:46)
Hirotow さんの Web サイト
No2096 (渋木宏明(ひどり) さん) に返信
>>そこで、これらの弊害が発生しないようにWndProcを実装することはできないでしょうか?
>
> 可能です。
>
> WndProc をオーバーライドしてナニが行われているかをきちんと把握していれば、どうれば良いかはすぐに分かるはずです。
> WM_NCHITTEST に対して適切な応答を返してやることで動作が制御できます。
>
> WM_NCHITTEST メッセージの lParam にはマウス座標値が入っているので、その座標値が「ポインタがクライアント上に存在して欲しい時」に該当したら、HTBORDER ではなく HTCLIENT を返せばよいのです。
>

単純に座標値のみから判断するとすると、ドラッグできる場所とできない場所を分ける必要がありそうですね。

引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -