Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Размер клиентской области


Автор: ZIFIR 8.12.2010, 22:00
Необходимо установить размер клиентской области окна. Как это можно сделать?
Можно изменить размеры MainFrame в CREATESTRUCT, но это же получается подгон.

Автор: Earnest 9.12.2010, 07:59
Смотря что ты хочешь: можно изменить размер клиентской области за счет "нестандартной" рамки. Или, если рамка и прочие элементы стандартны, именно "подогнать" размер фрейма под клиентскую область. Удобнее всего это делать в PreCreateWindow и использовать функцию AdjustWindowRect.

Автор: ZIFIR 9.12.2010, 23:39
Earnest,  спасибо, это я и хотел узнать.

Теперь еще вопрос.
Разбираюсь с системами координат и режимами отображения. 
Цитата: (Айвор Хортон VS 2005 Базовый курс)
"В режиме отображения MM_LOENGLISH ед. изм. в доль осей составляют 0,01 дюйма, так что точка (50,-100) находится на пол дюйма влево и 1 дюйм вниз. Объект всегда имеет один и тотже размер на экране, независимо от разрешения монитора"

Нарисовал линию в клиентской области, попробовал поменять разрешение экрана, линия изменила размер.

Растолкуйте.

Автор: Earnest 10.12.2010, 08:45
Может, перо не геометрическое? По-моему, косметическое перо в экранных пикселах рисуется.
Кроме того, автор наверняка под размером подразумевает нечто более существенное: например, размер прямоугольника или эллипса.

Автор: ZIFIR 22.12.2010, 18:56
В PreCreateWindow устанавливаю размер желаемой клиентской области окна
Код

              RECT WndRect;
    WndRect.top     = 100;
              WndRect.left    = 100;
    WndRect.bottom  = 400;
    WndRect.right   = 400;

    cs.style = WS_CAPTION|WS_SYSMENU;
    
    AdjustWindowRect(&WndRect,WS_CAPTION|WS_SYSMENU,0);

    cs.cx = WndRect.right;
    cs.cy = WndRect.bottom;
    cs.x  = WndRect.left;
    cs.y  = WndRect.top;


После AdjustWindowRect top=75, bottom=403, left=97, right=403. 

Когда вызываю GetClientRect top=0, bottom=351, left=0, right=393

Режим MM_TEXT

Как же сделать размер клиентской области 300х300?

Автор: ZIFIR 23.12.2010, 16:54
Решил проблему так:
Код

RECT WndRect;
    WndRect.top     = 0;
    WndRect.left    = 0;
    WndRect.bottom  = 300;
    WndRect.right   = 300;

    cs.style = WS_CAPTION|WS_SYSMENU;
    cs.lpszName = m_AppName;

    AdjustWindowRectEx(&WndRect,cs.style,TRUE,cs.dwExStyle);

    cs.x  = 100;
    cs.y  = 100;
    cs.cx = WndRect.right - WndRect.left;
    cs.cy = WndRect.bottom - WndRect.top;


top и left требуемого клиентского прямоугольника необходимо сделать равными 0.
И еще учесть расширенный стиль dwExStyle.

Только тогда получил требуемое окно

Автор: Earnest 24.12.2010, 11:37
Цитата(Earnest @  9.12.2010,  08:59 Найти цитируемый пост)
Удобнее всего это делать в PreCreateWindow и использовать функцию AdjustWindowRect.

А я тебе что рекомендовала?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)