Zmienianie stylów okna utworzonego przez MFC

W wersji WinMain funkcji MFC rejestruje kilka standardowych klas okien. Ponieważ zwykle nie edytujesz biblioteki WinMainMFC, 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 PreCreateWindowprogramu , 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 PreCreateWindowaplikacji 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 CMDIChildWndklasy . 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.

Co chcesz dowiedzieć się więcej o

Zobacz też

Style okien ramowych