Конференция "WinAPI" » Рамка окна
 
  • Миракл (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
 
Конференция "WinAPI" » Рамка окна
Есть новые Нет новых   [118640   +43][b:0][p:0.001]