gpt4 book ai didi

c++ - 无法在应用程序启动后立即使用 ShowCursor(FALSE) 隐藏鼠标光标

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:04 24 4
gpt4 key购买 nike

我需要在应用程序启动后立即隐藏鼠标光标。我为此使用 ShowCursor(FALSE)。但通常在 ShowCursor(FALSE) 之后,光标会一直停留在屏幕上,直到鼠标移动。我和其他人在使用 Windows XP 到 10 的不同 PC 上重现了这一点。为了重现这一点,只需双击可执行文件从 Windows 资源管理器启动应用程序,并且绝对不要在双击和之后移动鼠标。如果应用程序以任何其他方式启动,则光标会按预期隐藏。似乎光标停留在屏幕上时属于Windows资源管理器,有时除了光标在屏幕上仍然是资源管理器工具提示。

不总是有效的代码:

#include <Windows.h>

LRESULT __stdcall WndProcFull(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg==WM_DESTROY)
{
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pszCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
PCWSTR pszFullName=L"FullWindow";
WNDCLASSEX wc={sizeof (WNDCLASSEX), 0, WndProcFull, 0, 0, hInstance, 0, LoadCursor(0, IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH), 0, pszFullName, 0};
RegisterClassEx(&wc);
hWnd=CreateWindow(pszFullName, L"HideCursor", WS_POPUP | WS_MAXIMIZE | WS_VISIBLE, 0, 0, 0, 0, 0, 0, hInstance, 0);
UpdateWindow(hWnd);
ShowCursor(FALSE);
while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg);
return 0;
}

源码在任意VS中编译

目前唯一有用的是设置计时器,在计时器间隔到期后,以编程方式移动鼠标光标,然后它会隐藏。但我更愿意找到更合适和稳定的解决方案。

带有解决方法的代码:

#include <Windows.h>

#define HIDECURSOR_TIMER_ID 1

LRESULT __stdcall WndProcFull(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_TIMER:
POINT pt;
GetCursorPos(&pt);
SetCursorPos(pt.x+1, pt.y);
KillTimer(hWnd, HIDECURSOR_TIMER_ID);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pszCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
PCWSTR pszFullName=L"FullWindow";
WNDCLASSEX wc={sizeof (WNDCLASSEX), 0, WndProcFull, 0, 0, hInstance, 0, LoadCursor(0, IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH), 0, pszFullName, 0};
RegisterClassEx(&wc);
hWnd=CreateWindow(pszFullName, L"HideCursor", WS_POPUP | WS_MAXIMIZE | WS_VISIBLE, 0, 0, 0, 0, 0, 0, hInstance, 0);
UpdateWindow(hWnd);
ShowCursor(FALSE);
SetTimer(hWnd, HIDECURSOR_TIMER_ID, 200, 0);
while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg);
return 0;
}

200 毫秒是光标稳定消失的最小超时值。

最佳答案

根据the documentation :

If bShow is TRUE, the display count is incremented by one. If bShow is FALSE, the display count is decremented by one.

所以要隐藏光标,你需要这样的东西:

while(ShowCursor(FALSE) >= 0);

关于c++ - 无法在应用程序启动后立即使用 ShowCursor(FALSE) 隐藏鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330727/

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