Zmienianie stylów okna utworzonego przez MFC
W wersji WinMain
funkcji MFC rejestruje kilka standardowych klas okien. Ponieważ zwykle nie edytujesz biblioteki WinMain
MFC, ta funkcja nie daje możliwości zmiany domyślnych stylów okien MFC. W tym artykule wyjaśniono, jak można zmienić style takiej wstępnie wyrejestrowanej klasy okien w istniejącej aplikacji.
Zmienianie stylów w nowej aplikacji MFC
Jeśli używasz programu Visual C++ 2.0 lub nowszego, możesz zmienić domyślne style okna w Kreatorze aplikacji podczas tworzenia aplikacji. Na stronie Funkcje interfejsu użytkownika Kreatora aplikacji można zmienić style okna głównego ramki i okna podrzędne MDI. W przypadku dowolnego typu okna można określić jego grubość ramki (grubą lub cienką) i dowolną z następujących wartości:
Określa, czy okno ma kontrolki Minimalizuj, czy Maksymalizuj.
Określa, czy okno jest początkowo zminimalizowane, zmaksymalizowane, czy też nie.
W przypadku okien głównych ramek można również określić, czy okno ma menu systemowe. W przypadku okien podrzędnych MDI można określić, czy okno obsługuje okienka rozdzielacze.
Zmienianie stylów w istniejącej aplikacji
Jeśli zmieniasz atrybuty okna w istniejącej aplikacji, postępuj zgodnie z instrukcjami w pozostałej części tego artykułu.
Aby zmienić domyślne atrybuty okna używane przez aplikację platformy utworzoną za pomocą Kreatora aplikacji, przesłoń funkcję wstępnie utworzonego elementu członkowskiego systemu Windows . PreCreateWindow
umożliwia aplikacji dostęp do procesu tworzenia zwykle zarządzanego wewnętrznie przez klasę CDocTemplate . Struktura wywołuje się PreCreateWindow
tuż przed utworzeniem okna. Modyfikując strukturę CREATESTRUCT przekazaną do PreCreateWindow
programu , aplikacja może zmienić atrybuty używane do utworzenia okna. Aby na przykład upewnić się, że okno nie używa podpis, użyj następującej operacji bitowej:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
Przykładowa aplikacja CTRLBARS demonstruje tę technikę zmiany atrybutów okna. W zależności od zmian PreCreateWindow
aplikacji może być konieczne wywołanie implementacji klasy bazowej funkcji.
W poniższej dyskusji omówiono przypadek SDI i przypadek MDI.
Przypadek SDI
W aplikacji interfejsu pojedynczego dokumentu (SDI) domyślny styl okna w strukturze jest kombinacją stylów WS_OVERLAPPEDWINDOW i FWS_ADDTOTITLE . FWS_ADDTOTITLE jest stylem specyficznym dla MFC, który instruuje platformę, aby dodać tytuł dokumentu do podpis okna. Aby zmienić atrybuty okna w aplikacji SDI, przesłoń PreCreateWindow
funkcję w klasie pochodnej CFrameWnd
(z której kreator aplikacji nazywa CMainFrame
). Przykład:
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;
}
Ten kod tworzy główne okno ramki bez przycisków Minimalizuj i Maksymalizuj i bez obramowania z możliwością rozmiaru. Okno jest początkowo wyśrodkowane na ekranie.
Przypadek MDI
Aby zmienić styl okna okna okna w aplikacji z wieloma interfejsami dokumentów (MDI, multiple document interface). Domyślnie aplikacja MDI utworzona za pomocą Kreatora aplikacji używa domyślnej klasy CMDIChildWnd zdefiniowanej w MFC. Aby zmienić styl okna okna podrzędnego MDI, należy utworzyć nową klasę z CMDIChildWnd
i zastąpić wszystkie odwołania CMDIChildWnd
do w projekcie odwołaniami do nowej klasy. Najprawdopodobniej jedynym odwołaniem do CMDIChildWnd
aplikacji jest funkcja składowa aplikacji InitInstance
.
Domyślny styl okna używany w aplikacji MDI jest kombinacją stylów WS_CHILD, WS_OVERLAPPEDWINDOW i FWS_ADDTOTITLE . Aby zmienić atrybuty okna podrzędnych aplikacji MDI, przesłoń funkcję PreCreateWindow w klasie pochodzącej z CMDIChildWnd
klasy . Przykład:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Ten kod tworzy okna podrzędne MDI bez przycisku Maksymalizuj.