2011-10-25 24 views
-3

さてさて、私はドラッグ可能なボーダレスフォームを作成しようとしているC++マイクロソフトのVisual Studio C++ 2010 中に(Winodwsフォームを)簡単な付箋アプリを作ってるんです。私が今持っている コードは次のとおりです。C++ドラッグ可能なボーダレスフォーム

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) 
{ 
this->dragging = false; 
} 

private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 
{ 
this->dragging = true; 
this->offset = Point(e->X, e->Y); 

} 


private: System::Void Form1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 
{ 
if (this->dragging) 
{ 
Point currentScreenPos = PointToScreen(e->Location); 
Location = Point(currentScreenPos.X - this->offset.X, currentScreenPos.Y - this->offset.Y); 
} 

} 

private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 
{ 
this->dragging = false; 
} 

これは私のために動作しません。誰も助けることができますか?

+2

「機能しません」を展開します。 –

+0

MouseMoveイベントで 'e'を使用していません。 –

答えて

2

マウスを手動で追跡するのではなく、OSに任せてください。 WM_NCHITTESTを傍受し、HTCAPTIONを返します。または、MouseDownイベントのみを使用して、ウィンドウに特別なWM_SYSCOMMAND/SC_DRAGメッセージを送信します。ボーダーレスおよび/またはキャプションのないウィンドウをドラッグする方法については、MSDNにはたくさんの情報があります。

+0

私は13歳です。私はちょうど言ったことをどうやってやるのか分かりません。 – Lolsdasfgnhg

+0

MSDNで 'WM_NCHITTEST'を探します。あなたのwinformはメッセージを捕捉するための仮想 'WndProc()'メソッドをオーバーライドさせることができます。 'SC_DRAG'は正式には文書化されていませんが、' SC_MOVE + 2'です。 'SC_MOVE'は' WM_SYSCOMMAND'メッセージの利用可能なパラメータで、 'SendMessage()'関数を使ってwinformに送ることができます。 –

関連する問題