更改MFC创建的窗口的样式

在其 WinMain 功能的版本,几个 MFC 注册标准 windows 为类别。由于您通常不编辑 MFC 的 WinMain,该函数不提供您有机会更改 MFC 默认窗口样式。本文说明如何更改这些预注册窗口类样式在现有应用程序的。

在新 MFC 应用程序的更改的样式

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

  • 窗口是否具有最小化或多个控件。

  • 窗口是否显示最初,最小化、最大化或关闭和/或。

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

在现有应用程序的更改的样式

如果将现有应用程序的窗口属性,请按照其余部分的命令本文。

若要更改 framework 应用程序使用的默认窗口属性创建应用程序向导,请重写窗口的 PreCreateWindow 虚拟成员函数。PreCreateWindow 允许应用程序以创建处理在内部通常由所 CDocTemplate 类的访问。框架在创建窗口之前调用 PreCreateWindow 。通过修改 CREATESTRUCT 结构传递给 PreCreateWindow,应用程序可以更改用于的属性创建一个窗口。例如,确保窗口不使用声明,请使用按位以下操作:

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

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

下面的讨论包括 SDI 用例和 MDI 用例。

SDI 用例

在单文档 (SDI)界面 (mdi) 应用程序,框架的默认窗口样式是 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 应用程序的默认窗口样式是 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 子窗口,而无需最大化按钮。

x07xt611.collapse_all(zh-cn,VS.110).gif您想进一步了解什么?

请参见

概念

框架窗口样式(C++)