, если ищите __int64 OnDwpNcLButtonDown(CThhemeWnd*, THEME_MSG*)
под отладчиком, виден следующий код:
wParam = HTVSCROLL != HitTest ? SC_VSCROLL : SC_HSCROLL;
SendMessage(*, WM_SYSCOMMAND, (wParam | HitTest), *)
WM_SYSCOMMAND
с SC_VSCROLL
или SC_HSCROLL
, отправленным с этой точки, но очевидный код содержит логическую ошибку - SC_VSCROLL
и SC_HSCROLL
перепутаны.
правильный код должен быть
wParam = HTVSCROLL == HitTest ? SC_VSCROLL : SC_HSCROLL;
также
В WM_SYSCOMMAND сообщениях четыре младших бита wParam
параметр используется внутри системы. Чтобы получить правильный
результат при тестировании значения wParam , приложение должно объединить
значение 0xFFF0 со значением wParam с использованием побитового И
оператор.
здесь видно, что вместо четырех младших битов мы попали в тестовый код из сообщения WM_NCLBUTTONDOWN
, то есть из WM_NCHITTEST
возврата сообщения
0xf087
- это SC_HSCROLL | HTVSCROLL
, когда на hscroll мы получили 0xf076
, что SC_VSCROLL | HTHSCROLL
это просто ошибка Windows в uxtheme.OnDwpNcLButtonDown