Поделиться через


Изменение стилей окна, созданного MFC

В этой версии функции WinMain, MFC регистрирует несколько стандартных классов окна автоматически. Поскольку обычно не вносятся изменения WinMain MFC, эта функция не дает никакой возможность изменения стилей окна по умолчанию MFC. В этой статье описывается, как можно изменить стили preregistered такого класса окна в существующих приложениях.

Изменение стилей в новом приложении MFC

При использовании Visual C++ 2.0 или более поздней версии, можно изменить стили окна по умолчанию в мастере приложений при создании приложения. На странице функций пользовательского интерфейса мастера приложений можно стили изменения в основных фреймового окна и дочерних окон MDI. Для любого типа окна можно указать его толщину фрейма (толстую или компактный) и любые из:

  • Имеет ли развернуть или свернуть окно элементы управления.

  • Окно, должен ли изначально свернутым, развернутый, или ни одного.

Для фреймовых основных окон можно также определить имеет ли окно меню системы. Для дочерних окон MDI можно определить поддерживает ли окно области разделителя.

Изменение стилей существующего приложения

Если изменить атрибуты окна в существующих приложениях, следуйте инструкциям в остальной части этой статьи вместо.

Чтобы изменить атрибуты окна по умолчанию, используемые приложением платформы создание с помощью мастера приложений, переопределите виртуальной функции-члена PreCreateWindow окна. PreCreateWindow позволяет приложению получать процесс создания обычно так внутренне классом CDocTemplate. Платформа вызывает PreCreateWindow только до создания окна. Путем изменения структуры CREATESTRUCT, переданная PreCreateWindow, приложение может изменять атрибуты, используемые для создания окна. Например, чтобы убедиться, что окно не использует заголовок, используйте следующую битовую операцию:

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

Пример приложения CTRLBARS показан этот метод для изменения атрибутов окна. В зависимости от того что приложение изменяет в PreCreateWindow, может быть необходимо вызвать реализацию базового класса функции.

Далее рассматриваются регистр SDI и В случае MDI.

В случае SDI

В приложении (SDI) однодокументного интерфейса, стиль окна по умолчанию в платформе сочетание стилей WS_OVERLAPPEDWINDOW и FWS_ADDTOTITLE. FWS_ADDTOTITLE стиль образце заставляет платформу, для добавления заголовок документа в качестве заголовка окна. Чтобы изменить атрибуты окна в приложении SDI, переопределении функции PreCreateWindow в классе, производном от CFrameWnd (предоставляет имена CMainFrame мастера приложений). Примеры.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // Call the base-class version 
   if( !CFrameWnd::PreCreateWindow(cs) )
      return FALSE;

    // Create a window without min/max buttons or sizable border 
    cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

    // Size the window to 1/3 screen size and center it 
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3; 
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3; 
    cs.y = ((cs.cy * 3) - cs.cy) / 2; 
    cs.x = ((cs.cx * 3) - cs.cx) / 2;

   return TRUE;
}

Этот код создает главного фреймовое окно вне свернуть и развернуть кнопки и без изменяемые границы. Окно исходного располагается по центру на экране.

В случае MDI

Требуется изменить несколько больше работы стиль окна дочернего окна в приложении (MDI)). По умолчанию приложение MDI, созданное с помощью мастера приложений использует заданный класс по умолчанию CMDIChildWnd в MFC. Чтобы изменить стиль окна дочернего окна MDI, необходимо создать новый класс, производный от CMDIChildWnd и заменить все ссылки на CMDIChildWnd в проекте ссылками на новый класс. Вероятнее всего, расположенной единственная ссылку на CMDIChildWnd в приложении в функции-члене InitInstance приложения.

Стиль окна по умолчанию, используемый в приложении MDI сочетание стилей WS_CHILD, WS_OVERLAPPEDWINDOW и FWS_ADDTOTITLE. Чтобы изменить атрибуты окна дочерние окна приложения MDI, переопределении функции PreCreateWindow в классе, производном от CMDIChildWnd. Примеры.

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
   // Create a child window without the maximize button 
    cs.style &= ~WS_MAXIMIZEBOX; 

   return CMDIChildWnd::PreCreateWindow(cs);
}

Этот код создает дочерние окна интерфейса MDI без кнопки развертывания.

Дополнительные сведения

См. также

Основные понятия

Стили окна фрейма (C++)