Zmienianie stylów okna utworzonego przez MFC
W wersji z WinMain funkcja MFC rejestruje kilka klas standardowego okna.Ponieważ zwykle nie były edytowane MFC WinMain, że funkcja daje możliwość zmienić domyślne style okna MFC.W tym artykule wyjaśniono, jak zmienić style takie klasy preregistered okna w istniejącej aplikacji.
Zmienianie stylów w nowej aplikacji MFC
Jeśli używasz języka Visual C++ w wersji 2.0 lub nowszej, można zmienić domyślne style okna w Kreatorze aplikacji podczas tworzenia aplikacji.Na stronie funkcje interfejsu użytkownika Kreatora aplikacji można zmienić style okna ramkę główną i okien podrzędnych MDI.Niezależnie od typu okna, można określić jej grubość ramki (grubej lub cienkiej) i jedną z następujących czynności:
Czy okno zawiera formanty Minimalizuj lub Maksymalizuj.
Czy okna pojawia się początkowo zminimalizowanym zmaksymalizowane, lub żadna.
Dla ramce głównej systemu windows można również określić, czy okno ma Menu systemowego.Dla okien podrzędnych MDI można określić, czy okna obsługuje podziału okienka.
Zmienianie stylów w istniejącej aplikacji
Jeśli jesteś zmienia atrybuty okna w istniejącej aplikacji, postępuj zgodnie z instrukcjami w dalszej części tego artykułu.
Aby zmienić domyślne atrybuty okna używane przez framework aplikacji utworzonych za pomocą Kreatora konfiguracji aplikacji, należy zastąpić okna PreCreateWindow funkcji składowej wirtualnych.PreCreateWindowpozwala aplikacjom uzyskać dostęp procesu tworzenia, zwykle zarządzane wewnętrznie przez CDocTemplate klasy.Wywołania framework PreCreateWindow tylko przed utworzeniem okna.Modyfikując CREATESTRUCT struktury przekazany do PreCreateWindow, aplikacji można zmienić atrybuty używane do tworzenia okna.Na przykład aby upewnić się, że okno nie używać podpisu, należy użyć następujących operacji na poziomie bitowym:
// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
CTRLBARS aplikacja przykładowa prezentuje tej techniki do zmiany atrybutów okna.W zależności od tego, jakie zmiany w aplikacji PreCreateWindow, może być konieczne do wywołania funkcji Implementacja klasy podstawowej.
W przypadku interfejsu SDI obejmuje następujące dyskusji i przypadku MDI.
W przypadku interfejsu SDI
W aplikacji interfejsu (SDI) jednolity dokument domyślny styl okna w ramach jest kombinacją WS_OVERLAPPEDWINDOW i FWS_ADDTOTITLE stylów.FWS_ADDTOTITLE jest stylu specyficzne dla MFC, która sprawia, że ramy, aby dodać tytuł dokumentu tytuł okna.Aby zmienić atrybuty okna w aplikacji interfejsu SDI, należy zastąpić PreCreateWindow funkcji w klasie pochodzące z CFrameWnd (który nazwy aplikacji kreatora CMainFrame).Na 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;
}
Kod ten tworzy ramkę główną okno bez przycisków Maksymalizuj i Minimalizuj i bez obramowania może być zmieniany.Okno jest początkowo wyśrodkowany na ekranie.
W przypadku MDI
Trochę więcej pracy jest wymagane do zmiany stylu okno okna podrzędnego w zgłoszeniu zbiorowym interfejs (MDI) dokumentu.Domyślnie aplikacja MDI utworzone za pomocą Kreatora aplikacji używa domyślnie CMDIChildWnd klasy zdefiniowanej w MFC.Aby zmienić styl okna okna podrzędnego MDI, musi pochodzić z nową klasę CMDIChildWnd i zastąpić wszystkie odniesienia do CMDIChildWnd w projekcie z odwołaniami do nowej klasy.Najprawdopodobniej odwoływać się tylko do CMDIChildWnd w aplikacji znajduje się w aplikacji InitInstance funkcji składowej.
Domyślny styl okna używane w aplikacji MDI jest kombinacją WS_CHILD, WS_OVERLAPPEDWINDOW, i FWS_ADDTOTITLE stylów.Aby zmienić atrybuty okna okien podrzędnych MDI aplikacji, należy zastąpić PreCreateWindow funkcji w klasie pochodzące z CMDIChildWnd.Na przykład:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// Create a child window without the maximize button
cs.style &= ~WS_MAXIMIZEBOX;
return CMDIChildWnd::PreCreateWindow(cs);
}
Kod ten tworzy podrzędnych MDI okna bez przycisk Maksymalizuj.