Wm_nchittest возвращает неточные тесты на хитC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Wm_nchittest возвращает неточные тесты на хит

Сообщение Anonymous »

Значение теста HIT, полученное WM_NCHITTEST , по -видимому, немного неверно неверно, несмотря на передачу, казалось бы, правильные значения. Нужно ли корректировать LPARAM перед отправкой на процедуру по умолчанию?

Код: Выделить всё

[](
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
・ Left Mouse up of htminbutton

Код: Выделить всё

[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
・ Left Mouse up ожидает htclose

Код: Выделить всё

[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()
успешно и дает правильный результат. Htminbutton в этом случае должен находиться от 530px до 576px от позиции происхождения Windows в этом случае. Каждый тест, ожидающий htminbutton в этом диапазоне, но получающаяся полученная целевая цель от wm_nchittest является неточным.
Я использую getcursporspos () , как описано, чтобы получить экраны координат курсора, что и ожидает, что это будет и не то, что и есть.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -hit-tests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»