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. PreCreateWindow
umožň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 PreCreateWindow
aplikace 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 CMainFrame
Prů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.