Sdílet prostřednictvím


Změna stylů okna vytvořeného rozhraním MFC

V jeho verzi WinMain funkce mfc za vás zaregistruje několik standardních tříd oken. Vzhledem k tomu, že normálně neupravujete mfc WinMain, tato funkce vám dává možnost změnit výchozí styly oken MFC. Tento článek vysvětluje, jak můžete změnit styly takové předregistrované třídy okna v existující aplikaci.

Změna stylů v nové aplikaci MFC

Pokud používáte Visual C++ 2.0 nebo novější, můžete při vytváření aplikace změnit výchozí styly oken v Průvodci aplikací. Na stránce Funkce uživatelského rozhraní Průvodce aplikací můžete změnit styly okna hlavního rámce a podřízených oken MDI. U každého typu okna můžete zadat jeho tloušťku rámu (silnou nebo tenkou) a některou z následujících možností:

  • Určuje, jestli má okno ovládací prvky Minimalizovat nebo Maximalizovat.

  • Určuje, jestli se okno zpočátku minimalizuje, maximalizuje nebo ani jedno.

U oken hlavního rámce můžete také určit, jestli má okno systémovou nabídku. U podřízených oken MDI můžete určit, jestli okno podporuje příčky rozdělovače.

Změna stylů v existující aplikaci

Pokud měníte atributy okna v existující aplikaci, postupujte podle pokynů ve zbývající části tohoto článku.

Chcete-li změnit výchozí atributy okna používané architekturovou aplikací vytvořenou pomocí Průvodce aplikací, přepište funkci preCreateWindow virtuálního člena okna. PreCreateWindowumožňuje aplikaci přistupovat k procesu vytváření normálně spravované interně CDocTemplate třídy. Architektura volá PreCreateWindow těsně před vytvořením okna. Úpravou struktury CREATESTRUCT předané do PreCreateWindowaplikace může změnit atributy použité k vytvoření okna. Pokud chcete například zajistit, aby okno nepoužít popis, použijte následující bitovou operaci:

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

Ukázková aplikace CTRLBARS ukazuje tuto techniku pro změnu atributů okna. V závislosti na tom, co se aplikace změní PreCreateWindow, může být nutné volat implementaci základní třídy funkce.

Následující diskuze popisuje případ SDI a případ MDI.

Případ SDI

V jedné aplikaci rozhraní dokumentů (SDI) je výchozí styl okna v rámci kombinace WS_OVERLAPPEDWINDOW a FWS_ADDTOTITLE stylů. FWS_ADDTOTITLE je styl specifický pro prostředí MFC, který dává rozhraní pokyn k přidání názvu dokumentu do popis okna. Chcete-li změnit atributy okna v aplikaci SDI, přepište PreCreateWindow funkci ve vaší třídě odvozené od CFrameWnd (které název CMainFramePrůvodce aplikací ). Příklad:

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;
}

Tento kód vytvoří okno hlavního rámce bez tlačítek Minimalizovat a Maximalizovat a bez sizable ohraničení. Okno se zpočátku zacentruje na obrazovce.

Případ MDI

K změně stylu okna podřízeného okna v aplikaci s více rozhraními dokumentů (MDI) je potřeba trochu více práce. Ve výchozím nastavení používá aplikace MDI vytvořená pomocí Průvodce aplikací výchozí třídu CMDIChildWnd definovanou v prostředí MFC. Pokud chcete změnit styl okna podřízeného okna MDI, musíte odvodit novou třídu CMDIChildWnd a nahradit všechny odkazy v CMDIChildWnd projektu odkazy na novou třídu. S největší pravděpodobností se jediný odkaz CMDIChildWnd na aplikaci nachází ve členské funkci vaší aplikace InitInstance .

Výchozí styl okna použitý v aplikaci MDI je kombinace stylů WS_CHILD, WS_OVERLAPPEDWINDOW a FWS_ADDTOTITLE . Chcete-li změnit atributy okna podřízených oken aplikace MDI, přepište PreCreateWindow funkce ve vaší třídě odvozené z CMDIChildWnd. Příklad:

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

   return CMDIChildWnd::PreCreateWindow(cs);
}

Tento kód vytvoří podřízená okna MDI bez tlačítka Maximalizovat.

O čem chcete vědět víc

Viz také

Styly oken s rámečkem