Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
В своей версии WinMain функции MFC регистрирует для вас несколько стандартных классов окон. Так как обычно вы не редактируете MFC, эта функция не дает возможности изменять стили окон по умолчанию MFC WinMain. В этой статье объясняется, как изменить стили такого предварительно зарегистрированного класса окна в существующем приложении.
Изменение стилей в новом приложении MFC
Если вы используете Visual C++ 2.0 или более поздней версии, вы можете изменить стили окон по умолчанию в мастере приложений при создании приложения. На странице возможностей пользовательского интерфейса мастера приложений можно изменить стили для основного окна фрейма и дочерних окон MDI. Для любого типа окна можно указать толщину рамы (толстую или тонкую) и любой из следующих параметров:
Имеет ли окно элементы управления "Свернуть" или "Развернуть".
Отображается ли окно изначально свернутым, развернутым или ни тем, ни другим.
В окнах основного кадра можно также указать, имеет ли окно системное меню. Для дочерних окон MDI можно указать, поддерживает ли окно области разделения.
Изменение стилей в существующем приложении
Если вы изменяете атрибуты окна в существующем приложении, следуйте инструкциям в остальной части этой статьи.
Чтобы изменить атрибуты окна по умолчанию, используемые в программном приложении, созданном с помощью мастера приложений, переопределите виртуальную функцию-член окна PreCreateWindow.
PreCreateWindow позволяет приложению получить доступ к процессу создания, обычно управляемому внутри класса CDocTemplate . Фреймворк вызывает PreCreateWindow непосредственно перед созданием окна. Изменив переданную структуру PreCreateWindow, приложение может изменить атрибуты, используемые для создания окна. Например, чтобы убедиться, что окно не использует заголовок, используйте следующую побитовую операцию:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
Пример приложения CTRLBARS демонстрирует этот метод для изменения атрибутов окна. В зависимости от того, что изменяется в вашем приложении PreCreateWindow, может потребоваться вызвать реализацию функции базового класса.
В следующем обсуждении рассматривается случай SDI и случай MDI.
Случай SDI
В одном приложении интерфейса документа (SDI) стиль окна по умолчанию в платформе представляет собой сочетание стилей WS_OVERLAPPEDWINDOW и FWS_ADDTOTITLE .
FWS_ADDTOTITLE — это стиль, зависящий от MFC, который указывает платформе добавить название документа в подпись окна. Чтобы изменить атрибуты окна в приложении 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 без кнопки Максимизировать.