Код: Выделить всё
int main(int, char**)
{
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpszClassName = TEXT("MRE");
wc.lpfnWndProc = [](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -> LRESULT {
static LRESULT ht = HTNOWHERE;
switch (msg) {
case WM_DESTROY: PostQuitMessage(0); return (LRESULT)0;
case WM_NCLBUTTONDOWN:
if ((wParam == HTCLOSE) || (wParam == HTMINBUTTON)) {
std::printf("\nstart ht: %d\n", wParam);
SetCapture(hwnd);
ht = wParam;
return (LRESULT)0;
}
break;
case WM_NCLBUTTONUP: case WM_LBUTTONUP:
if (ht == HTNOWHERE)
break;
ReleaseCapture();
ht = HTNOWHERE;
RECT rect = { };
GetWindowRect(hwnd, &rect);
std::printf("window (%d x %d) at (%d, %d)\n",
rect.right - rect.left, rect.bottom - rect.top,
rect.left, rect.top
);
POINT p = { };
std::printf("%d at (%d, %d)\n", GetCursorPos(&p), p.x, p.y);
std::printf("end ht: %d\n", SendMessage(hwnd, WM_NCHITTEST, 0, MAKELPARAM(p.x, p.y)));
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
};
if (!RegisterClassEx(&wc)) return 1;
const LONG styles = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX);
RECT rectDimensions = { 0u, 0u, 640u, 480u };
AdjustWindowRect(&rectDimensions, styles, false);
HWND hwnd = CreateWindow(
TEXT("MRE"), TEXT("mre"), styles, 0, 0,
(rectDimensions.right - rectDimensions.left),
(rectDimensions.bottom - rectDimensions.top),
nullptr, nullptr, GetModuleHandle(NULL), nullptr
);
MSG msg = { 0 };
ShowWindow(hwnd, SW_NORMAL);
while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
・ Left Mouse вниз по при htminbutton , левая мышь в верхней левой части экрана
Код: Выделить всё
start ht: 8
window (656 x 519) at (1042, 297)
1 at (0, 0)
end ht: 0
Код: Выделить всё
start ht: 8
window (656 x 519) at (1042, 297)
1 at (1556, 315)
end ht: 2
start ht: 8
window (656 x 519) at (1042, 297)
1 at (1570, 308)
end ht: 2
start ht: 8
window (656 x 519) at (1042, 297)
1 at (1594, 312)
end ht: 8
Код: Выделить всё
start ht: 20
window (656 x 519) at (1042, 297)
1 at (1646, 307)
end ht: 9
start ht: 20
window (656 x 519) at (1042, 297)
1 at (1664, 311)
end ht: 20
start ht: 20
window (656 x 519) at (1042, 297)
1 at (1683, 311)
end ht: 20
< /code>
GetCursorPos()Я использую getcursporspos () , как описано, чтобы получить экраны координат курсора, что и ожидает, что это будет и не то, что и есть.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -hit-tests