Многоуровневое окно C++ и WM_MOUSEMOVE

Я пытаюсь сделать прозрачную заставку на C++ и WinAPI.

До сих пор он отлично работал на Windows XP, но на WES7 у меня возникла следующая проблема: сделав экран прозрачным, я не могу получать сообщения WM_MOUSMOVE.

SetWindowLongPtr( hWnd,
           GWL_EXSTYLE,
           GetWindowLongPtr(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TOOLWINDOW );
double TransparencyPercentage = 50.0;
double fAlpha = TransparencyPercentage * ( 255.0 /100 );
BYTE byAlpha = static_cast<BYTE>( fAlpha );
SetLayeredWindowAttributes( hWnd, 0, byAlpha, LWA_ALPHA );

Я уже получил информацию о том, что byAlpha должно быть больше 0, потому что в противном случае я не буду получать сообщения мыши, но я все еще получаю сообщения клавиатуры, а также щелчки мышью.

Надеюсь, вы можете помочь мне с этим.


person user2618639    schedule 14.08.2013    source источник
comment
Я провел быстрый тест, просто создав многоуровневое окно и найдя WM_MOUSEMOVE, и он работал нормально. Правильно ли работает этот код?   -  person chris    schedule 14.08.2013
comment
на самом деле я работаю над WES 7, но я думаю, что WES 7 основан на Windows 7, и поэтому его основы должны быть такими же, не так ли?   -  person user2618639    schedule 14.08.2013
comment
Да, Крис, твой код работает   -  person user2618639    schedule 14.08.2013
comment
WM_MOUSEMOVE сообщения генерируются только в том случае, если очередь сообщений пуста. Если вы отправляете много сообщений, вы никогда не сможете полностью опустошить очередь сообщений, чтобы при следующем вызове GetMessage было сгенерировано сообщение WM_MOUSEMOVE.   -  person IInspectable    schedule 14.08.2013
comment
Прозрачные окна прозрачны для глаз пользователя и для мыши. Сообщения мыши отправляются туда, куда, по мнению пользователя, они пойдут. Вы не можете изменить это. Что отличается в Win7, так это Aero, он по-другому делает многослойные окна.   -  person Hans Passant    schedule 14.08.2013


Ответы (1)


Поскольку это хранитель экрана, я предполагаю, что вам нужно WM_MOUSEMOVE, чтобы знать, когда выйти. Вы можете использовать SetCapture, чтобы весь ввод данных с мыши направлялся в ваше окно, независимо от того, куда он на самом деле указывает.

person Adrian McCarthy    schedule 28.03.2014