我做了一些功能,这样当你点击一个窗口时它会拖动窗口(就像你在常规窗口上拖动标题栏一样)。 但是,每当我尝试拖动它时,它都会继续在我的屏幕上找到坐标0,0。 (一旦你看到代码,你就会理解标题。)我尝试了IF语句,但是当我拖动它时窗口仍然是0,0(我无法正常工作)。在我尝试从那里再次拖动它之后,它完美地工作(仅适用于那个时间)。然后它会回到屏幕上的坐标0,0如果我再次尝试拖动它并继续这样做。
标题将事件分配给函数的条形码:
this->menuStrip1->MouseMove += gcnew MouseEventHandler(this, &CPPGUIForm::MoveWindow);
this->menuStrip1->MouseDown += gcnew MouseEventHandler(this, &CPPGUIForm::titleBarOnClicked);
this->menuStrip1->MouseUp += gcnew MouseEventHandler(this, &CPPGUIForm::titleBarOnReleased);
this->menuStrip1->MouseLeave += gcnew EventHandler(this, &CPPGUIForm::titleBarMouseLeave);
MoveWindow功能:
private:
void MoveWindow(Object^ sender, MouseEventArgs^ e){
POINT p;
GetCursorPos(&p);
if (mClicked == true){
this->Location = System::Drawing::Point(p.x - mouseXLocOnWindow, p.y - mouseYLocOnWindow);
}
}
标题栏点击和释放功能:
private:
void titleBarOnClicked(Object^ sender, MouseEventArgs^ e){
HWND hwnd;
POINT pt;
GetCursorPos(&pt);
ScreenToClient(hwnd, &pt);
mouseXLocOnWindow = pt.x;
mouseYLocOnWindow = pt.y;
mClicked = true;
}
private:
void titleBarOnReleased(Object^ sender, MouseEventArgs^ e){
mClicked = false;
}
标题栏鼠标离开功能(修复错误):
private:
void titleBarMouseLeave(Object^ sender, EventArgs^ e){
mClicked = false;
}
如果您在这篇文章中需要更多信息,请告诉我。
答案 0 :(得分:1)
在titleBarOnClicked()
函数中,hwnd
未初始化。
我想你想要这样的东西:
HWND hwnd = static_cast<HWND>(this->Handle.ToPointer());