Как мне получить мое окно для регистрации mouseclicks, даже tho ws_ex_transparent включен?Регистрация mouseclicks с ws_ex_transparent active C++
HWND hWnd = CreateWindowEx(WS_EX_LAYERED| WS_EX_TRANSPARENT, szAppName, wcWndName,
WS_VISIBLE | WS_POPUP, 255, 150, w, h,
NULL, NULL, hThisInst, NULL);
окно попадет быть слоистыми и прозрачными, наряду с
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_FRAMECHANGED);
поместив его «верхний» (Infront) делает его работу в качестве наложения, но, к сожалению, оно не регистр клик мышей вообще ,
case WM_LBUTTONDOWN:
PostQuitMessage(0); //does it listen?
Так что мой вопрос прост: Как мне получить слоистые, верхний, прозрачное окно, чтобы зарегистрировать меня щелчком мыши?
Любая помощь была бы полезной. благодаря
Решение оказывается с помощью достаточно стандартной функции крюк, включенную в заголовке окна.
Ключ для клавиатуры выглядит немного иначе, чем mousehook, но поскольку im после mousehook, это решение im posting. (Если и случится искать a keyboard hook)
mousehook; //global declaration
LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
PKBDLLHOOKSTRUCT k = (PKBDLLHOOKSTRUCT)(lParam);
if (wParam == WM_LBUTTONDOWN)
{
MessageBox(NULL, "LM is pressed", "key pressed", MB_ICONINFORMATION);
}
if (wParam == WM_RBUTTONDOWN)
{
MessageBox(NULL, "RM is pressed", "key pressed", MB_ICONINFORMATION);
}
return CallNextHookEx(Mousehook, nCode, wParam, lParam);
}
и назвав его в WinMain (до сообщ)
Mousehook = SetWindowsHookEx(WH_MOUSE_LL, HookCallback, NULL, 0);
Как и путаница над 'WS_EX_TRANSPARENT', если ваше окно на самом деле 100% прозрачно (т. Е. Его альфа-значение равно 0), то он все равно не увидит никакого ввода мыши. Вы можете дать ему альфа-значение 1, что приводит к тому, что оно будет эффективно невидимым, но будет регистрировать ввод мыши как обычное окно. –
Im в настоящее время способен нарисовать круг, но я хочу, чтобы он рисовал разные вещи, когда нажимал кнопку мыши. Я не знаю, что именно означает изменение альфа-значения, для чего? функция createwindow? или мой glclear()? без ws_ex_layered, он становится черным, или не имеет ws_ex_transparent (чтобы разрешить прокрутку) – Charlie
Итак, вы не используете 'SetLayeredWindowAttributes'? В этом случае у вас нет действительно прозрачного окна, у вас просто окно, которое ничего не рисует. –