-
Миракл (23.03.18 11:29) [0]Имеется окно https://c2n.me/3SShEJv
Убираю рамкуSetWindowLong(wnd, GWL_STYLE, GetWindowLong(wnd, GWL_STYLE) and not(WS_CAPTION or WS_THICKFRAME));
получаю https://c2n.me/3SShP19
Что это может значить? Размер окна не изменился, но внутренняя область уменьшилась. По высоте: на высоту шапки + рамки. По ширине: ширина рамка * 2.
Перерисовка окна ничего не дала.RedrawWindow(wnd, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW);
InvalidateRect(wnd, nil, True);
Как можно подогнать содержимое под размер окна или наоборот окно под содержимое? -
Styx © (24.03.18 12:52) [1]
> но внутренняя область уменьшилась.
Как я вижу, она не уменьшилась, а как раз увеличилась. А Вы в эту дполнительную область ничего не нарисовали, и там получился мусор. Расскажите подробнее, как Вы рисуете содержимое, тогда можно будет что-то обсуждать... -
Миракл (24.03.18 16:40) [2]
> Как я вижу, она не уменьшилась, а как раз увеличилась.
Да, Вы правы https://c2n.me/3SUb8TA
Мусор можно убрать через SetWindowRgn
R.Width := R.Width - 16;
R.Height := R.Height - 16;
Как программа рисует содержимое не знаю.
Видно, что когда рамки нет, она рисует в окне с учётом этой рамки. -
Redmond (26.03.18 03:15) [3]Не похоже на "учёт рамки". Размер рисуемого кажется изменился? На глаз сложно понять, вроде же да?
Похоже что программа заметила изменение клиентской области, но по какой-то причине неправильно получило новые размеры. -
Миракл (26.03.18 14:16) [4]Или не заметила изменения размера клиентской области и рисует по старым. Буду смотреть.
-
Rouse_ © (26.03.18 16:37) [5]Ну у тебя ж там NC область.
BorderStyle := bsNone не? -
Миракл (26.03.18 17:16) [6]После удаления рамки всё окно заполнила клиентская область. Но программа продолжает рисовать содержимое по старым размерам, а всё что выходит за эти размеры выглядит как рябь или как сказал Styx "мусор".
Как написал с другого форума LoneFast: "окно не заметило что изменился размер клиентской области. И продолжает рисоваться со старыми размерами". "сделайте так чтоб она заметила изменение размера - угадывайте к какому событию это привязано."
Буду ставить хук и ловить
WM_NCCALCSIZE
WM_WINDOWPOSCHANGED
WM_WINDOWPOSCHANGING