2009-05-29 11 views
1

フォームの任意の部分をクリックしてドラッグすることで移動できるウィンドウフォームがあります。私はWndProcをオーバーライドし、NCHITTEST関数の結果をHTCAPTIONに設定して、キャプションをクリックしたと思ってフォームをだますようにしました。ドラッグすることができます。ドラッグ可能なWinFormの問題

このためのコードは素晴らしい作品、そして以下の通りです:

protected override void WndProc(ref Message msg) 
    { 
     if (msg.Msg == (int)WinAPI.NCHITTEST) 
      { 
       DefWndProc(ref msg); 
       if ((int)msg.Result == (int)MousePositionCodes.HTCLIENT) 
       { 
        msg.Result = (IntPtr)MousePositionCodes.HTCAPTION; 
        return; 
       } 
      } 
     } 
     base.WndProc(ref msg); 
    } 

問題は、私は(これはドラッグ可能なツールバーとして動作している)の形にToolStripPanelをドッキングするときに発生します。 ToolStripで覆われていないToolStripPanelの部分は、フォーム全体をドラッグモードにするために必要なメッセージを渡す必要があります。

私はにWndProc関数をオーバーライドするために自分自身のToolStripContainerクラスを作成し、上記と同じ機能を使用して試してみましたが、それはToolStripContainerが内で所望の機能ではないフォームを、ドラッグモードを入射させます。

また、親にNCHITTESTメッセージを渡し、現在のマウス座標で新しいメッセージを作成して、WinAPIと親のウィンドウハンドルを使用して親に送信しようとしました。

私はここで簡単なものを紛失している必要があります...誰でもアイデアはありますか?

+0

ウィンドウマネージャを欺くのではなく、マウスの左ボタンとマウスの移動イベントを処理し、フォームを動かすだけでいいですか? –

答えて

6

ドラッグが発生する領域のHTTRANSPARENT(-1)を返すWM_NCHITTESTのテストがある、独自のToolStripContainerのWndProcで試してください。これにより、メッセージを処理してHTCAPTIONを返すフォームにチェーン内でメッセージが上がり、ドラッグが行われます。

これが役に立ちます。

+0

それは完璧でした!ありがとうございました!! 私はこれを1週間以上苦労してきました。あなたは私の期限を救っただけです;) –

+0

喜んで私は助けることができました:-) –