gpt4 book ai didi

c++ - ScreenToClient 不断将点值设置为整个屏幕分辨率

转载 作者:行者123 更新时间:2023-11-28 05:38:48 25 4
gpt4 key购买 nike

我做了一些函数,这样当你点击一个窗口时它会拖动窗口(就像你在普通窗口上拖动标题栏一样)。但是,每当我尝试拖动它时,它都会一直移动到屏幕上的坐标 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);

移动窗口函数:

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

标题栏鼠标离开功能(修复bug):

private:
void titleBarMouseLeave(Object^ sender, EventArgs^ e){
mClicked = false;
}

如果您需要这篇文章中的更多信息,请告诉我。

最佳答案

在您的 titleBarOnClicked() 函数中,hwnd 未初始化。

我想你想要这样的东西:

HWND hwnd = static_cast<HWND>(this->Handle.ToPointer());

关于c++ - ScreenToClient 不断将点值设置为整个屏幕分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com