2017-12-16 6 views
2

を動かしながら、ウィンドウのキャプションにカーソルを変更しますStackOverflowの中に別のポストからのコード、次のとおりです。のC# - ウィンドウキャプションの変更カーソルここ

protected override void WndProc(ref Message m) { 
     if (m.Msg == 0x20) { // Trap WM_SETCUROR 
      if ((m.LParam.ToInt32() & 0xffff) == 2) { // Trap HTCAPTION 
       Cursor.Current = Cursors.Hand; 
       m.Result = (IntPtr)1; // Processed 
       return; 
      } 
     } 
     base.WndProc(ref m); 
    } 

出典:https://stackoverflow.com/a/6484627/4871566

しかし、三つの追加問題があります私は解決したい:

1-ウィンドウを移動している間(左マウスボタンを押しながら)、カーソルはウィンドウのデフォルトに再び変わる。フォームウィンドウを動かしながら、選択したものにカーソルを変更する方法はありますか?

2子フォームをShowDialog()としてロードすると、メインフォームは無効になり、ユーザーはそのフォームと対話できなくなります。子フォームの領域のカーソルが、子フォームの領域外にあるときウィンドウ)、それはシステムウィンドウのデフォルトになります。ここでカーソルを外側に変更する方法はありますか?

3-メッセージボックスのキャプションバーのカーソルを変更する方法はありますか?

答えて

2

1)問題のサンプルアプリケーションを少し作成しましたが、エラーを再現できませんでした。デモでは、私が窓を動かすと、それはずっと同じままになっていました。また、私がキャプション領域を出て戻ったときにそれは元に戻りました。

だから、どこか自分でカーソルをリセットしていないことを確認したいかもしれません。

私が考えることができる回避策は、Control.CursorChangedイベントを傍受し、そこにカーソルを置いて、効果的にWindowsベースで行った変更をリセットすることです。

2)問題は、ShowDialogメソッドを使用すると、親ウィンドウが有効になっていないことです。代わりにShowを使ってみましたが、完璧に動作しました。

ShowDialogメソッドのモーダル属性が失われているので、これは難しいことです。それでもやる必要がある場合は、Enabledプロパティをfalseに設定せずに、同じことを実現するShowDialogロジックを自分自身で再実装することができます。

0

3メッセージボックスのキャプションバーのカーソルを変更する方法はありますか? .NET Frameworkの

MessageBoxnative methodsを使用していますので、あなたはWndProcメソッドをオーバーライドすることはできません。 Control要素がないので、1つもありません。一方、モノでは、MessageBoxFormがありますが、これを実行しようとすることはできますが、それが動作するかどうかは保証できません。いずれにしても、2番目の質問のために独自のダイアログロジックを作成する場合は、メッセージボックスフォームを作成する途中です。

関連する問題