gpt4 book ai didi

c++ - 在应用程序中独占/释放鼠标(Windows、C++)

转载 作者:可可西里 更新时间:2023-11-01 10:30:30 26 4
gpt4 key购买 nike

我浪费了很多时间试图在我的应用程序中专门获取鼠标并重新释放它。

现在,我正确地捕获了它:鼠标光标从屏幕上消失了,我可以很好地读取它的属性。

但是,我无法正确释放它!鼠标光标重新出现在屏幕上,但其他应用程序不再接收任何鼠标点击;除了我的。

这是有问题的代码:

IDirectInputDevice8* mMouse;

void Win32Mouse::grab(bool grab)
{
if (mGrabMouse == grab)
return;

mMouse->Unacquire();

if (grab)
{
// grab = true; seems to work fine
coopSetting &= ~DISCL_BACKGROUND;
coopSetting &= ~DISCL_NONEXCLUSIVE;
coopSetting |= DISCL_FOREGROUND | DISCL_EXCLUSIVE;
}
else
{
// grab = false; this surely isn't working as it should
coopSetting &= ~DISCL_FOREGROUND;
coopSetting &= ~DISCL_EXCLUSIVE;
coopSetting |= DISCL_BACKGROUND | DISCL_NONEXCLUSIVE;
}

if( FAILED(mMouse->SetCooperativeLevel(mHwnd, coopSetting)) ) {
std::cout << "Failed to set coop level\n";
}

HRESULT hr = mMouse->Acquire();
if (FAILED(hr) && hr != DIERR_OTHERAPPHASPRIO) {
std::cout << "Failed to aquire mouse!\n";
}

mGrabMouse = grab;
}

问题是我有 Windows7 吗?!

最佳答案

可能是因为这个
http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/input/ref/ifaces/idirectinputdevice9/setcooperativelevel.htm
""以独占模式获取鼠标或键盘设备的应用程序在收到 WM_ENTERSIZEMOVE 和 WM_ENTERMENULOOP 消息时应始终取消获取设备。
否则,用户无法操作菜单或移动和调整窗口大小。""

可能不是完全的答案
但也请尝试检查您是否在其他一些消息上没有取消获取鼠标。
例如 WM_LOSTFOCUS 等。

关于c++ - 在应用程序中独占/释放鼠标(Windows、C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1789883/

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