Установка курсора на весь рабочий стол

У меня есть многослойное окно, имеющее размер экрана, но почти полностью прозрачное. (кроме небольшого крестика, нарисованного пользователем)

wc.style        = 0;
wc.lpfnWndProc  = (WNDPROC) wnd_top_rect_proc;
wc.cbClsExtra   = 0;
wc.cbWndExtra   = 0;
wc.hInstance    = hInst;
wc.hIcon        = NULL;
wc.hCursor      = LoadCursor(hInst, IDC_CROSS);
wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= L"POGO_WND_TOP";
RegisterClass(&wc);

hWnd = CreateWindowEx(
WS_EX_TOPMOST | WS_EX_LAYERED,
L"POGO_WND_TOP",        //class name
NULL,                   //wnd name
WS_POPUP,               //style
0, 0,                   //x, y
screen.right-screen.left,//w
screen.bottom-screen.top,//h
g_hWnd,                 //parent
NULL,                   //menu
hInst,                  //instance
NULL);                  //lparam
SetLayeredWindowAttributes(hWnd, WND_TOP_BG, 0, LWA_COLORKEY);
ShowWindow(hWnd, SW_SHOW);

Как я могу установить собственный курсор для этого окна или для всего рабочего стола? Я указал курсор класса в классе окна, но он не отображает его (я ожидаю, что это из-за прозрачности)
Кроме того, я хотел бы знать, как на самом деле управляется прозрачность в окнах: почему я не могу получить WM_LBUTTON сообщения, если мышь находится в прозрачной области окна? Нет ли способа заставить прозрачные области окна работать так же, как цветные области?

0

Решение

Чтобы установить курсор, вы используете неожиданно названную функцию SetCursor.

Довольно много SetCursor(wc.hCursor) должен сделать это.

Это общий ресурс, поэтому вам не следует менять курсор для области за пределами вашего собственного окна. Или, как это указано в ссылке:

Курсор является общим ресурсом. Окно должно установить форму курсора
только когда курсор находится в своей клиентской области или когда окно
захват ввода мыши. В системах без мыши окно должно
восстановить предыдущий курсор до того, как курсор покинет клиентскую область
или до того, как он передаст управление другому окну.

Также:

Если ваше приложение должно установить курсор, пока оно находится в окне, сделайте
убедитесь, что курсор класса для указанного класса окна установлен в NULL.
Если курсор класса не равен NULL, система восстанавливает курсор класса
каждый раз, когда мышь двигается.

Я не слишком углубился в это, я ожидаю, что полностью прозрачная область окна на самом деле не захватывает щелчки мышью, так как из этого окна ничего не видно [конечно, вы теоретически можете щелкнуть невидимые вещи, но Одной из точек прозрачности является создание окон, которые имеют странные формы, и если вы должны были позволить приложению обрабатывать обнаружение «это у меня в окне или у парня подо мной», вы можете увидеть, как это может стать неуправляемым — так если окно не вносит вклад в фактический «отображаемый материал», щелчки мыши должны быть переданы в нижний слой, который обеспечивает вклад (другими словами, не является прозрачным на 100%)]. Итак, в соответствии с комментарием, попробуйте установить значение прозрачности «на ступеньку ниже 100% прозрачности».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]