Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
С помощью MFC в Visual Studio 2015 можно создавать диалоги, которые пользователь может изменять размер, и вы можете управлять способом адаптации макета к изменению размера. Например, можно подключить кнопки в нижней части диалогового окна к нижнему краю, чтобы они всегда оставались в нижней части. Вы также можете настроить определенные элементы управления, такие как списки, поля редактирования и текстовые поля, чтобы они расширялись вместе с расширением диалогового окна.
Указание параметров динамического макета для диалогового окна MFC
Когда пользователь изменяет размер диалогового окна, элементы управления в диалоговом окне могут изменять размер или перемещаться в направлениях X и Y. Изменение размера или положения элемента управления при изменении размера диалогового окна называется динамическим макетом. Например, это диалоговое окно перед изменением размера:
После изменения размера область списка увеличивается, чтобы отобразить больше элементов, а кнопки перемещаются вместе с правым нижним углом:
Вы можете управлять динамическим макетом, указывая сведения для каждого элемента управления в редакторе ресурсов в интегрированной среде разработки или программно предоставляя доступ к объекту для определенного элемента управления и устанавливая CMFCDynamicLayout свойства.
Настройка свойств динамического макета в редакторе ресурсов
Вы можете задать динамическое поведение макета для диалогового окна без необходимости писать код с помощью редактора ресурсов.
Для настройки динамических свойств макета в редакторе ресурсов
Открыв проект MFC, откройте диалоговое окно, с которым вы хотите работать в редакторе диалогов.
Выберите элемент управления и в окне свойств (в представлении классов) задайте его свойства динамического макета. В разделе динамического макета окна "Свойства" содержатся свойства тип перемещения и тип изменения размера. В зависимости от выбранных значений для этих свойств, добавляются определенные свойства, которые определяют, насколько элементы управления перемещаются или изменяются в размере. Тип перемещения определяет способ перемещения элемента управления при изменении размера диалогового окна; Тип изменения размера определяет, как элемент управления изменяет размер при изменении размера диалогового окна. Сдвиг текста и изменение размера текста могут быть горизонтальными, вертикальными, обоими или никакими, в зависимости от того, какие размеры вы хотите изменить динамически. Горизонтальное направление — это X; вертикальное направление — это Y.
Если вы хотите, чтобы элемент управления, например кнопка, располагался в фиксированном размере и остается на месте в правом нижнем углу, как обычно для кнопок "ОК" или "Отмена", задайте для параметра "Тип размера" значение "Нет" и задайте для параметра "Перемещение типа" значение "Оба". Для значений перемещения X и перемещения Y в разделе Тип перемещения задайте 100%, чтобы элемент управления оставался на фиксированном расстоянии от нижнего правого угла.
Предположим, что у вас также есть элемент управления, который требуется развернуть при развертывании диалогового окна. Как правило, пользователь может развернуть диалоговое окно, чтобы развернуть многострочную область редактирования, чтобы увеличить размер текстовой области или развернуть элемент управления списком для просмотра дополнительных данных. В этом случае установите для типа размера значение "Оба" и для типа перемещения — "нет". Затем задайте для значений Sizing X и Sizing Y значение 100.
Экспериментируйте с другими значениями, которые могут быть понятны для элементов управления. Диалоговое окно с однострочным текстовым полем может иметь тип размера, установленный только на горизонтальный, например.
Установка свойств динамического макета программным способом
Предыдущая процедура полезна для указания свойств динамического макета для диалогового окна во время разработки, но если вы хотите управлять динамическим макетом во время выполнения, можно программно задать свойства динамического макета.
Установка свойств динамического макета программным способом
Найдите или создайте место в коде реализации класса диалогового окна, где необходимо указать динамический макет для диалогового окна. Например, может потребоваться добавить метод, например
AdjustLayoutв диалоговом окне, и вызвать его из мест, где необходимо изменить макет. Вы можете сначала вызвать это из конструктора или после внесения изменений в диалоговое окно.Для диалога вызовите метод GetDynamicLayout, используемый в классе
CWnd.GetDynamicLayoutвозвращает указатель наCMFCDynamicLayoutобъект.CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();Для первого элемента управления, в который требуется добавить динамическое поведение, используйте статические методы в классе динамического макета, чтобы создать структуру MoveSettings , которая кодирует способ настройки элемента управления. Для этого сначала выберите соответствующий статический метод : CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone или CMFCDynamicLayout::MoveHorizontalAndVertical. Вы указываете процент для перемещения по горизонтали и/или вертикали. Эти статические методы возвращают только что созданный объект MoveSettings, который можно использовать для указания поведения перемещения элемента управления.
Помните, что 100 означает перемещение ровно на столько же, сколько изменяется размер диалогового окна, из-за чего край элемента интерфейса остается на фиксированном расстоянии от новой границы.
MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);Выполните то же самое для поведения размера, которое использует тип SizeSettings . Например, чтобы указать, что элемент управления не изменяет размер при изменении размера диалогового окна, используйте следующий код:
SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();Добавьте элемент управления в диспетчер динамического макета с помощью метода CMFCDynamicLayout::AddItem . Существует две перегрузки для разных способов указания требуемого элемента управления. Один принимает дескриптор окна элемента управления (HWND), а другой принимает идентификатор элемента управления.
dynamicLayout->AddItem(hWndControl, moveSettings, sizeSettings);Повторите для каждого элемента управления, который необходимо переместить или изменить размер.
При необходимости можно использовать метод CMFCDynamicLayout::HasItem , чтобы определить, находится ли элемент управления в списке элементов управления, подверженных динамическим изменениям макета, или метод CMFCDynamicLayout::IsEmpty , чтобы определить, существуют ли элементы управления, подлежащие изменениям.
Чтобы включить макет диалогового окна, вызовите метод CWnd::EnableDynamicLayout .
pDialog->EnableDynamicLayout(TRUE);При следующем изменении размера диалогового окна вызывается метод CMFCDynamicLayout::Adjust , который фактически применяет параметры.
Если вы хотите отключить динамический макет, вызовите CWnd::EnableDynamicLayout со значением FALSE для параметра bEnabled .
pDialog->EnableDynamicLayout(FALSE);
Установка динамического макета программным способом из файла ресурсов
Используйте метод CMFCDynamicLayout::MoveHorizontalAndVertical , чтобы указать имя ресурса в соответствующем файле скрипта ресурсов (RC-файл), который указывает сведения о динамическом макете, как показано в следующем примере:
dynamicLayout->LoadResource("IDD_DIALOG1");Именованный ресурс должен ссылаться на диалоговое окно, содержащее сведения о макете в виде записи AFX_DIALOG_LAYOUT в файле ресурса, как показано в следующем примере:
///////////////////////////////////////////////////////////////////////////// // // AFX_DIALOG_LAYOUT // IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6400, 0x0028, 0x643c, 0x0028 END IDD_DIALOG1 AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6464, 0x0000, 0x6464, 0x0000, 0x0000, 0x6464, 0x0000, 0x0000 END
См. также
Класс CMFCDynamicLayout
Классы элементов управления
Классы диалогового окна
Редактор диалогов
Макет динамического диалогового окна для MFC в Visual C++ 2015