更改 MFC 创建的窗口的样式

在其的 WinMain 函数的版本,MFC 将注册您的若干标准窗口类。 由于通常不编辑 MFC 的 WinMain,则该函数不使您有机会更改 MFC 默认窗口样式。 本文说明如何能够更改这样的预注册窗口类样式在现有的应用程序中。

将新的样式的 MFC 应用程序

如果您使用 Visual C++ 2.0 或更高版本,则您可更改应用程序向导的默认窗口样式,当您创建应用程序时。 在应用程序向导的用户界面功能,页面可以更改主框架窗口和 MDI 子窗口的样式。 对于任一窗口类型,可以指定其帧粗细 (粗细或) 和任何以下操作:

  • 最大化或最小化窗口是否有控件。

  • 最初,最大化或最小化窗口是否显示二者都不是。

对于主框架窗口,还可以指定窗口是否有系统菜单。 在 MDI 子窗口,可以指定是否支持拆分窗口窗格。

将一个现有应用程序的样式

如果将现有的应用程序窗口的特性,请按照其余的指令本文。

若要更改框架应用程序使用特性的默认窗口创建与应用程序向导,请重写窗口中 PreCreateWindow 虚成员函数。 PreCreateWindow 允许应用程序访问 CDocTemplate 类内部通常管理的创建过程。 框架在创建窗口之前调用 PreCreateWindow。 通过修改 CREATESTRUCT 结构传递给 PreCreateWindow,应用程序可以更改用于创建窗口的特性。 例如,确保窗口未使用标题,请使用下列位操作:

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

CTRLBARS 示例应用程序演示更改窗口特征的此方法。 根据应用程序在 PreCreateWindow更改,请调用函数的基类实现可能是必需的。

以下讨论 SDI 包括用例和 MDI 情况。

SDI 用例

在单文档界面 (SDI) (SDI) 应用程序,框架中的默认窗口样式是 WS_OVERLAPPEDWINDOWFWS_ADDTOTITLE 样式的组合。 FWS_ADDTOTITLE 是一框架添加标题。文档窗口的标题、用 MFC 特定样式。 若要更改在 SDI 应用程序窗口的特性,重写从应用程序向导名为 CMainFrame) 的 CFrameWnd 派生类的 PreCreateWindow 函数 (。 例如:

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

此代码创建非主框架窗口最小化和最大化按钮,然后不带调整边框。 窗口在屏幕最初居中。

MDI 用例

有需要执行更多工作。更改一个子窗口的窗口样式在多文档界面 (MDI) (MDI) 应用程序中。 默认情况下,用创建 MDI 应用程序使用 MFC 应用程序向导。定义的默认类。CMDIChildWnd 若要更改 MDI 子窗口的窗口样式,必须从 CMDIChildWnd 派生一个新类并将对新类的引用替换对 CMDIChildWnd 的所有引用。项目。 可能,对 CMDIChildWnd 的引用。应用程序位于应用程序的 InitInstance 成员函数。

在 MDI 应用程序的 Windows 默认样式是 WS_CHILDWS_OVERLAPPEDWINDOWFWS_ADDTOTITLE。样式的组合。 若要更改 MDI 应用程序的子窗口的窗口特性,重写从 CMDIChildWnd派生的类的函数。PreCreateWindow 例如:

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

   return CMDIChildWnd::PreCreateWindow(cs);
}

此代码创建 MDI 子窗口,从而无需最大化按钮。

您想进一步了解什么?

请参见

概念

框架窗口样式 (C++)