Код: Выделить всё
[](
HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
) -> LRESULT {
typedef LRESULT ht_t;
static ht_t ht = HTNOWHERE;
switch (msg) {
default:
break;
case WM_NCLBUTTONDOWN:
if (//(wParam == HTCAPTION) ||
(wParam == HTCLOSE) ||
(wParam == HTMINBUTTON)
) {
tk::logf("--");
tk::logf("start %d", wParam);
ht = (SetCapture(hwnd), wParam);
return (LRESULT)0;
}
break;
case WM_NCLBUTTONUP:
case WM_LBUTTONUP:
if (ht == HTNOWHERE)
break;
const ht_t htExpected = ht;
ht = (ReleaseCapture(), HTNOWHERE);
/* print window info */ {
RECT rect;
GetWindowRect(hwnd, &rect);
tk::logf(
"window (%d x %d) at (%d, %d)",
rect.right - rect.left,
rect.bottom - rect.top,
rect.left, rect.top
);
}
POINT p;
tk::logf("%d at (%d, %d)", GetCursorPos(&p), p.x, p.y);
const ht_t htNow = SendMessage(hwnd, WM_NCHITTEST, 0, MAKELPARAM(p.x, p.y));
tk::logf("got %d", htNow);
return (LRESULT)0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
};
・ Left Mouse вниз по при htminbutton , левая мышь в верхней левой части экрана
Код: Выделить всё
[17:53:02] --
[17:53:02] start 8
[17:53:04] window (656 x 519) at (573, 318)
[17:53:04] 1 at (0, 0)
[17:53:04] got 0
Код: Выделить всё
[17:53:06] --
[17:53:06] start 8
[17:53:07] window (656 x 519) at (573, 318)
[17:53:07] 1 at (1107, 342)
[17:53:07] got 2
[17:53:08] --
[17:53:08] start 8
[17:53:08] window (656 x 519) at (573, 318)
[17:53:08] 1 at (1123, 334)
[17:53:08] got 8
Код: Выделить всё
[17:53:11] --
[17:53:11] start 8
[17:53:11] window (656 x 519) at (573, 318)
[17:53:11] 1 at (1165, 333)
[17:53:11] got 9
[17:53:14] --
[17:53:14] start 20
[17:53:14] window (656 x 519) at (573, 318)
[17:53:14] 1 at (1197, 330)
[17:53:14] got 20
< /code>
GetCursorPos()Я использую getcursporspos () , как описано, чтобы получить экраны координат курсора, что и ожидает, что это будет и не то, что и есть.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -hit-tests
Мобильная версия