Перетаскиваемая форма C ++ без полей - PullRequest
0 голосов
/ 25 октября 2011

Хорошо, я делаю простое приложение для заметок (Winodws Forms) в C ++ в Microsoft Visual Studio C ++ 2010. Я пытаюсь создать перетаскиваемую форму без полей.Код, который у меня сейчас есть:

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;
}

Это не работает для меня.Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 25 октября 2011

Вместо того, чтобы отслеживать мышь вручную, позвольте ОС сделать это за вас. Перехватить WM_NCHITTEST и вернуть HTCAPTION. Или, используя только событие MouseDown, отправьте в окно специальное сообщение WM_SYSCOMMAND/SC_DRAG. В MSDN есть много информации о перетаскивании окон без полей и / или без заголовков.

...