HCURSOR从另一个窗口,可能
HCURSOR from another window, possible?
我正在寻找绘制HCURSOR在我的窗口。光标必须是来自另一个窗口(HWND)的真实光标。
下面是我的代码:GetCursorPos(&pos);
ScreenToClient(hwnd, &pos);
DrawIcon(hdcMemDC, pos.x, pos.y,GetCursor());
它在我的窗口上画了一个光标,但它不是"真正的"Windows光标。例如,当在另一个窗口我有一个鼠标图标,我的没有改变。
所以我想知道是否有可能从指定窗口(HWND)处理"真实"光标并绘制它。像GetCursorOf(hwnd, &myCursorInfo)
这样的会很酷。
这段代码将获得任何窗口的光标。然后,它将创建一个线程,该线程将不断地将光标绘制到我们的窗口上。
#if defined(UNICODE) && !defined(_UNICODE)
#define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
#include <tchar.h>
#include <windows.h>
DWORD WINAPI BltThreadProc(void *lpParam)
{
while(true)
{
if (!IsIconic((HWND)lpParam)) //if our window isn't minimised, then we get the cursor and draw it.. Makes no sense drawing on a minimised window.
{
CURSORINFO Info = {0};
Info.cbSize = sizeof(Info);
GetCursorInfo(&Info);
HDC hDC = GetDC((HWND)lpParam);
DrawIconEx(hDC, 0, 0, Info.hCursor, 0, 0, 0, (HBRUSH)GetStockObject(COLOR_BACKGROUND), DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE);
ReleaseDC((HWND)lpParam, hDC);
}
Sleep(1);
}
return 0;
}
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
{
CreateThread(NULL, 0, BltThreadProc, hwnd, 0, 0);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = _T("CLS");
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH)GetStockObject(COLOR_BACKGROUND);
if (!RegisterClassEx (&wincl))
return 0;
hwnd = CreateWindowEx(0, _T("CLS"), _T("Title"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
ShowWindow(hwnd, nCmdShow);
while (GetMessage(&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 问:如何使用C++中的按钮从窗口打开窗口
- 有可能在Armadillo中复制MATLAB circshift方法吗
- SDL 窗口不会弹出
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- GetWindowRect()返回的大小小于游戏的实际可见窗口的可能原因是什么
- 窗口创建错误 - 可能是事件处理
- Qvalidator是否有可能显示弹出窗口
- 如何在 MFC 中创建窗口时获取最大可能的窗口大小
- 如何在 c++ 中将光标移动到上次打开的窗口(可能是弹出窗口)
- 静态qt对话框窗口不可能
- 改进窗口大小调整行为,可能通过手动设置更大的帧缓冲大小
- HCURSOR从另一个窗口,可能
- 向属于另一个线程的窗口发送消息.可能的僵局
- 是否有可能模拟鼠标移动和鼠标点击隐藏窗口
- 是否有可能由windows管理的2个窗口具有相同的窗口句柄值?
- 是否有可能钩全局窗口的创建,这样我就可以控制窗口放置在屏幕上的位置
- 是否有可能在Qt上的一个窗口中显示两个不同的对话框窗口