CFrameWnd

提供 Windows 单文档界面 (SDI) 重叠式或弹出框架窗口功能,并提供管理窗口的成员。

语法

class CFrameWnd : public CWnd

成员

公共构造函数

名称 描述
CFrameWnd::CFrameWnd 构造 CFrameWnd 对象。

公共方法

名称 描述
CFrameWnd::ActivateFrame 使框架可见并可供用户使用。
CFrameWnd::BeginModalState 将框架窗口设置为模式。
CFrameWnd::Create 调用以创建和初始化与 CFrameWnd 对象关联的 Windows 框架窗口。
CFrameWnd::CreateView 在不是派生自 CView 的框架中创建视图。
CFrameWnd::DockControlBar 停靠控件条。
CFrameWnd::EnableDocking 允许停靠控件条。
CFrameWnd::EndModalState 结束框架窗口的模式状态。 启用所有被 BeginModalState 禁用的窗口。
CFrameWnd::FloatControlBar 浮动控件条。
CFrameWnd::GetActiveDocument 返回活动的 CDocument 对象。
CFrameWnd::GetActiveFrame 返回活动的 CFrameWnd 对象。
CFrameWnd::GetActiveView 返回活动的 CView 对象。
CFrameWnd::GetControlBar 检索控件条。
CFrameWnd::GetDockState 检索框架窗口的停靠状态。
CFrameWnd::GetMenuBarState 检索当前 MFC 应用程序中菜单的显示状态。
CFrameWnd::GetMenuBarVisibility 指示当前 MFC 应用程序中菜单的默认行为是隐藏还是可见。
CFrameWnd::GetMessageBar 返回指向属于框架窗口的状态栏的指针。
CFrameWnd::GetMessageString 检索与命令 ID 对应的消息。
CFrameWnd::GetTitle 检索相关控件条的标题。
CFrameWnd::InitialUpdateFrame 导致调用属于框架窗口中所有视图的 OnInitialUpdate 成员函数。
CFrameWnd::InModalState 返回一个值,指示框架窗口是否处于模式状态。
CFrameWnd::IsTracking 确定拆分器栏当前是否正在移动。
CFrameWnd::LoadAccelTable 调用以加载快捷键表。
CFrameWnd::LoadBarState 调用以还原控件条设置。
CFrameWnd::LoadFrame 调用以从资源信息动态创建框架窗口。
CFrameWnd::NegotiateBorderSpace 协商框架窗口中的边框空间。
CFrameWnd::OnBarCheck 每当对指定的控件条执行操作时调用。
CFrameWnd::OnContextHelp 处理就地项的 SHIFT+F1 帮助。
CFrameWnd::OnSetPreviewMode 将应用程序主框架窗口设置为进入或退出打印预览模式。
CFrameWnd::OnUpdateControlBarMenu 当更新关联菜单时由框架调用。
CFrameWnd::RecalcLayout 重新定位 CFrameWnd 对象的控件条。
CFrameWnd::SaveBarState 调用以保存控件条设置。
CFrameWnd::SetActivePreviewView 将指定视图指定为 Rich Preview 的活动视图。
CFrameWnd::SetActiveView 设置活动的 CView 对象。
CFrameWnd::SetDockState 调用以在主窗口中停靠框架窗口。
CFrameWnd::SetMenuBarState 将当前 MFC 应用程序中菜单的显示状态设置为隐藏或显示。
CFrameWnd::SetMenuBarVisibility 将当前 MFC 应用程序中菜单的默认行为设置为隐藏还是可见。
CFrameWnd::SetMessageText 设置标准状态栏的文本。
CFrameWnd::SetProgressBarPosition 设置任务栏上显示的 Windows 7 进度条的当前位置。
CFrameWnd::SetProgressBarRange 设置任务栏上显示的 Windows 7 进度条的范围。
CFrameWnd::SetProgressBarState 设置任务栏按钮上显示的进度指示器的类型和状态。
CFrameWnd::SetTaskbarOverlayIcon 已重载。 将覆盖应用于任务栏按钮,以指示应用程序状态或给用户的通知。
CFrameWnd::SetTitle 设置相关控件条的标题。
CFrameWnd::ShowControlBar 调用以显示控件条。
CFrameWnd::ShowOwnedWindows 显示 CFrameWnd 对象后代的所有窗口。

受保护方法

名称 描述
CFrameWnd::OnCreateClient 为框架创建客户端窗口。
CFrameWnd::OnHideMenuBar 在当前 MFC 应用程序中的菜单隐藏之前调用。
CFrameWnd::OnShowMenuBar 在当前 MFC 应用程序中的菜单显示之前调用。

公共数据成员

“属性” 描述
CFrameWnd::m_bAutoMenuEnable 控制菜单项的自动启用和禁用功能。
CFrameWnd::rectDefault 创建 CFrameWnd 对象以允许选择窗口的初始大小和位置时,将此静态 CRect 作为参数传递。

注解

若要为应用程序创建有用的框架窗口,请从 CFrameWnd 派生一个类。 将成员变量添加到该派生类,以存储特定于应用程序的数据。 可派生类中实现消息处理程序成员函数和消息映射,以指定在消息定向到窗口时所发生的情况。

有三种方法可以构造框架窗口:

  • 使用 Create 直接构造。

  • 使用 LoadFrame 直接构造。

  • 使用文档模板间接构造。

在调用 CreateLoadFrame 之前,必须使用 C++ new 运算符在堆上构造框架窗口对象。 在调用 Create 之前,还可以向 AfxRegisterWndClass 全局函数注册窗口类,以设置框架的图标和类样式。

使用 Create 成员函数将框架的创建参数作为即时自变量传递。

LoadFrame 需要的自变量少于 Create,并且是从资源检索其大部分默认值,包括框架的标题、图标、快捷键表和菜单。 若要由 LoadFrame 访问,所有这些资源都必须具有相同的资源 ID(例如 IDR_MAINFRAME)。

CFrameWnd 对象包含视图和文档时,它们由框架间接创建,而不是由程序员直接创建。 CDocTemplate 对象协调框架的创建、包含视图的创建以及视图与相应文档的连接。 CDocTemplate 构造函数的参数指定涉及的三个类(文档、框架和视图)的 CRuntimeClassCRuntimeClass 对象由框架使用,在由用户指定时动态创建新框架(例如,通过使用“新建文件”命令或多文档界面 (MDI)“新建窗口”命令)。

必须使用 DECLARE_DYNCREATE 声明派生自 CFrameWnd 的框架窗口类,以便上述 RUNTIME_CLASS 机制能够正常工作。

CFrameWnd 包含默认实现,用于在典型 Windows 应用程序中执行主窗口的以下函数:

  • CFrameWnd 框架窗口会跟踪当前活动视图,该视图独立于 Windows 活动窗口或当前输入焦点。 重新激活框架后,通过调用 CView::OnActivateView 通知该活动视图。

  • 命令消息和许多常见的框架通知消息,包括由 OnSetFocus 处理的命令消息、OnHScroll当前活动视图和 CWndOnVScroll 函数,都由 CFrameWnd 框架窗口委托给当前活动视图。

  • 当前活动视图(或者如果在 MDI 框架中,则是当前活动的 MDI 子框架窗口)可以确定框架窗口的标题。 可以通过关闭框架窗口的 FWS_ADDTOTITLE 样式位来禁用此功能。

  • CFrameWnd 框架窗口管理控件条、视图和其他子窗口在框架窗口的工作区内的位置。 框架窗口还会对工具栏和其他控件条按钮执行空闲时间更新。 CFrameWnd 框架窗口还具有用于切换工具栏和状态栏的命令的默认实现。

  • CFrameWnd 框架窗口管理主菜单栏。 当显示弹出菜单时,框架窗口会使用 UPDATE_COMMAND_UI 机制来确定应启用、禁用或选中哪些菜单项。 当用户选择菜单项时,框架窗口会使用该命令的消息字符串更新状态栏。

  • CFrameWnd 框架窗口具有可选的快捷键表,可自动翻译键盘快捷键。

  • CFrameWnd 框架窗口具有用于上下文相关帮助的 LoadFrame 的可选帮助 ID 集。 框架窗口是上下文敏感帮助 (SHIFT+F1) 和打印预览模式等半模式状态的主协调程序。

  • CFrameWnd 框架窗口将打开从文件管理器拖动并放置在框架窗口中的文件。 如果文件扩展名已注册并与应用程序关联,框架窗口将响应动态数据交换 (DDE) 打开请求,当用户在文件管理器中打开数据文件或调用 Windows ShellExecute 函数时会发生该请求。

  • 如果框架窗口是主应用程序窗口(即 CWinThread::m_pMainWnd),当用户关闭应用程序时,框架窗口会提示用户保存任何修改的文档(对于 OnCloseOnQueryEndSession)。

  • 如果框架窗口是主应用程序窗口,则框架窗口是运行 WinHelp 的上下文。 如果已启动框架窗口以获取此应用程序的帮助,则关闭框架窗口将关闭 WINHELP.EXE

请勿使用 C++ delete 运算符销毁框架窗口。 请改用 CWnd::DestroyWindow。 当销毁窗口时,PostNcDestroyCFrameWnd 实现删除 C++ 对象。 当用户关闭框架窗口时,默认 OnClose 处理程序将调用 DestroyWindow

有关 CFrameWnd 的详细信息,请参阅框架窗口

继承层次结构

CObject

CCmdTarget

CWnd

CFrameWnd

要求

标头afxwin.h

CFrameWnd::ActivateFrame

调用此成员函数以激活和还原框架窗口,使其可见且可供用户使用。

virtual void ActivateFrame(int nCmdShow = -1);

参数

nCmdShow
指定要传递给 CWnd::ShowWindow 的参数。 默认情况下,框架会显示并正确还原。

备注

此成员函数通常在非用户界面事件(如 DDE、OLE 或其他可能向用户显示框架窗口或其内容的事件)之后调用。

默认实现将激活框架并将其置于 Z 顺序的顶部,并在必要时对应用程序的主框架窗口执行相同的步骤。

替代此成员函数以更改框架的激活方式。 例如,可以强制最大化 MDI 子窗口。 添加适当的功能,然后使用显式 nCmdShow 调用基类版本。

示例

void CChildFrame::ActivateFrame(int nCmdShow)
{
   // Create the child frame window maximized
   nCmdShow = SW_MAXIMIZE;

   CMDIChildWnd::ActivateFrame(nCmdShow);
}

CFrameWnd::BeginModalState

调用此成员函数以使框架窗口具有模式。

virtual void BeginModalState();

CFrameWnd::CFrameWnd

构造 CFrameWnd 对象,但不创建可见的框架窗口。

CFrameWnd();

注解

调用 Create 以创建可见窗口。

CFrameWnd::Create

调用以创建和初始化与 CFrameWnd 对象关联的 Windows 框架窗口。

virtual BOOL Create(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle = WS_OVERLAPPEDWINDOW,
    const RECT& rect = rectDefault,
    CWnd* pParentWnd = NULL,
    LPCTSTR lpszMenuName = NULL,
    DWORD dwExStyle = 0,
    CCreateContext* pContext = NULL);

参数

lpszClassName
指向命名 Windows 类的以 null 终止的字符串。 类名称可以是向 AfxRegisterWndClass 全局函数或 RegisterClass Windows 函数注册的任何名称。 如果是 NULL,请使用预定义的默认 CFrameWnd 属性。

lpszWindowName
指向表示窗口名称的以 null 终止的字符串。 用作标题栏的文本。

dwStyle
指定窗口样式特性。 如果希望标题栏自动显示窗口中表示的文档的名称,请包含 FWS_ADDTOTITLE 样式。

rect
指定窗口的大小和位置。 rectDefault 值允许 Windows 指定新窗口的大小和位置。

pParentWnd
指定此框架窗口的父窗口。 对于顶级框架窗口,此参数应该为 NULL

lpszMenuName
标识要与窗口一起使用的菜单资源的名称。 如果菜单具有整数 ID 而不是字符串,请使用 MAKEINTRESOURCE。 此参数可以为 NULL

dwExStyle
指定窗口扩展样式特性。

pContext
指定指向 CCreateContext 结构的指针。 此参数可以为 NULL

返回值

如果初始化成功,则为非零值;否则为 0。

注解

分两步构造 CFrameWnd 对象。 首先,调用构造函数,该构造函数构造 CFrameWnd 对象,然后调用 Create,它将创建 Windows 框架窗口,并将其附加到 CFrameWnd 对象。 Create 初始化窗口的类名称和窗口名称,并为其样式、父菜单和关联菜单注册默认值。

使用 LoadFrame(而不是 Create)从资源加载框架窗口,而不是指定其自变量。

CFrameWnd::CreateView

调用 CreateView 以在框架内创建视图。

CWnd* CreateView(
    CCreateContext* pContext,
    UINT nID = AFX_IDW_PANE_FIRST);

参数

pContext
指定视图和文档的类型。

nID
视图的 ID 编码。

返回值

如果成功,则为指向 CWnd 对象的指针;否则为 NULL

备注

使用此成员函数在框架内创建不是 CView 派生的“视图”。 调用 CreateView 后,必须手动将视图设置为活动,并将其设置为可见;这些任务不会自动由 CreateView 执行。

CFrameWnd::DockControlBar

导致控件条停靠到框架窗口。

void DockControlBar(
    CControlBar* pBar,
    UINT nDockBarID = 0,
    LPCRECT lpRect = NULL);

参数

pBar
指向要停靠的控件条。

nDockBarID
确定要考虑停靠在框架窗口的哪一侧。 可以为 0,或者以下一项或多项:

  • AFX_IDW_DOCKBAR_TOP 停靠到框架窗口的顶部。

  • AFX_IDW_DOCKBAR_BOTTOM 停靠到框架窗口的底部。

  • AFX_IDW_DOCKBAR_LEFT 停靠到框架窗口的左侧。

  • AFX_IDW_DOCKBAR_RIGHT 停靠到框架窗口的右侧。

如果为 0,则可以将控件条停靠到在目标框架窗口中启用停靠的任何一侧。

lpRect
确定控件条将停靠在目标框架窗口的非工作区中的哪个位置(以屏幕坐标为单位)。

备注

控件条将停靠到对 CControlBar::EnableDockingCFrameWnd::EnableDocking 调用中指定的框架窗口的其中一侧。 选择的一侧由 nDockBarID 确定。

CFrameWnd::EnableDocking

调用此函数以在框架窗口中启用可停靠的控件条。

void EnableDocking(DWORD dwDockStyle);

参数

dwDockStyle
指定框架窗口的哪一侧可用作控件条的停靠点。 可以是以下一项或多项:

  • CBRS_ALIGN_TOP 允许停靠在工作区的顶部。

  • CBRS_ALIGN_BOTTOM 允许停靠在工作区的底部。

  • CBRS_ALIGN_LEFT 允许停靠在工作区的左侧。

  • CBRS_ALIGN_RIGHT 允许停靠在工作区的右侧。

  • CBRS_ALIGN_ANY 允许停靠在工作区的任何一侧。

备注

默认情况下,控件条按以下顺序停靠在框架窗口的一侧:顶部、底部、左侧、右侧。

示例

请参阅 CToolBar::Create 的示例。

CFrameWnd::EndModalState

调用此成员函数以将框架窗口从有模式更改为无模式。

virtual void EndModalState();

注解

EndModalState 将启用所有被 BeginModalState 禁用的窗口。

CFrameWnd::FloatControlBar

调用此函数,使控件条不停靠到框架窗口。

void FloatControlBar(
    CControlBar* pBar,
    CPoint point,
    DWORD dwStyle = CBRS_ALIGN_TOP);

参数

pBar
指向要浮动的控件条。

point
将放置控件条栏左上角的位置(以屏幕坐标为单位)。

dwStyle
指定是控件条在其新框架窗口中水平对齐还是垂直对齐。 可以为以下任一项:

  • CBRS_ALIGN_TOP 垂直定位控件条。

  • CBRS_ALIGN_BOTTOM 垂直定位控件条。

  • CBRS_ALIGN_LEFT 水平定位控件条。

  • CBRS_ALIGN_RIGHT 水平定位控件条。

如果传递同时指定水平方向和垂直方向的样式,则工具栏将水平定位。

备注

通常,当程序从上一次执行还原设置时,会在应用程序启动时完成此操作。

当用户在将控件条拖动到不可用于停靠的位置的同时通过松开鼠标左键来引发放置操作时,框架将调用此函数。

CFrameWnd::GetActiveDocument

调用此成员函数以获取指向附加到当前活动视图的当前 CDocument 的指针。

virtual CDocument* GetActiveDocument();

返回值

指向当前 CDocument 的指针。 如果没有当前文档,则返回 NULL

CFrameWnd::GetActiveFrame

调用此成员函数以获取指向 MDI 框架窗口的活动多文档界面 (MDI) 子窗口的指针。

virtual CFrameWnd* GetActiveFrame();

返回值

指向活动的 MDI 子窗口的指针。 如果应用程序是 SDI 应用程序,或者 MDI 框架窗口没有活动文档,则返回隐式 this 指针。

注解

如果没有活动的 MDI 子级或者应用程序是单文档界面 (SDI),则返回隐式 this 指针。

CFrameWnd::GetActiveView

调用此成员函数以获取指向附加到框架窗口 (CFrameWnd) 的活动视图(如果有)的指针。

CView* GetActiveView() const;

返回值

指向当前 CView 的指针。 如果没有当前视图,则返回 NULL

备注

针对 MDI 主框架窗口 (CMDIFrameWnd) 调用时,此函数返回 NULL。 在 MDI 应用程序中,MDI 主框架窗口没有与之关联的视图。 相反,每个子窗口 (CMDIChildWnd) 都有一个或多个关联的视图。 可以通过首先查找活动 MDI 子窗口,然后查找该子窗口的活动视图来获取 MDI 应用程序中的活动视图。 可以通过调用函数 MDIGetActiveGetActiveFrame 找到活动的 MDI 子窗口,如下所示:

CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->GetMainWnd();

// Get the active MDI child window.
CMDIChildWnd *pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();

// or CMDIChildWnd *pChild = pFrame->MDIGetActive();

// Get the active view attached to the active MDI child window.
CMyView *pView = (CMyView*)pChild->GetActiveView();

CFrameWnd::GetControlBar

调用 GetControlBar 以获取对与 ID 关联的控件条的访问权限。

CControlBar* GetControlBar(UINT nID);

参数

nID
控件条的 ID 编码。

返回值

指向与 ID 关联的控件条的指针。

注解

nID 参数引用传递给控件条的 Create 方法的唯一标识符。 有关控件条的详细信息,请参阅标题为控件条的主题。

GetControlBar 将返回控件条(即使它是浮动的),因此当前不是框架的子窗口。

CFrameWnd::GetDockState

调用此成员函数以在 CDockState 对象中存储有关框架窗口控件条的状态信息。

void GetDockState(CDockState& state) const;

参数

state
返回时包含框架窗口控件条的当前状态。

备注

然后可以使用 CDockState::SaveStateSerializeCDockState 的内容写入存储。 如果以后想要将控件条还原到以前的状态,请使用 CDockState::LoadStateSerialize 加载状态,然后调用 SetDockState 以将以前的状态应用于框架窗口的控件条。

CFrameWnd::GetMenuBarState

检索当前 MFC 应用程序中菜单的显示状态。

virtual DWORD GetMenuBarState();

返回值

返回值可以有下列值:

  • AFX_MBS_VISIBLE (0x01) - 菜单可见。

  • AFX_MBS_HIDDEN (0x02) - 菜单隐藏。

注解

如果发生运行时错误,此方法将在调试模式下断言,并引发派生自 CException 类的异常。

CFrameWnd::GetMenuBarVisibility

指示当前 MFC 应用程序中菜单的默认状态是隐藏还是可见。

virtual DWORD CFrameWnd::GetMenuBarVisibility();

返回值

此方法可返回以下值之一:

  • AFX_MBV_KEEPVISIBLE (0x01) - 菜单一直显示,并且默认情况下没有焦点。

  • AFX_MBV_DISPLAYONFOCUS (0x02) - 默认情况下,菜单处于隐藏状态。 如果菜单处于隐藏状态,按 Alt 键可显示菜单并为其提供焦点。 如果菜单处于显示状态,按 Alt 或 ESC 键可将其隐藏。

  • AFX_MBV_ DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10 (0x06) - 默认情况下,菜单处于隐藏状态。 如果菜单处于隐藏状态,按 F10 键可显示菜单并为其提供焦点。 如果菜单处于显示状态,按 F10 键可打开或关闭菜单的焦点。 菜单会一直显示,直到按 Alt 或 ESC 键将其隐藏。

注解

如果发生运行时错误,此方法将在调试模式下断言,并引发派生自 CException 类的异常。

CFrameWnd::GetMessageBar

调用此成员函数以获取指向状态栏的指针。

virtual CWnd* GetMessageBar();

返回值

指向状态栏窗口的指针。

CFrameWnd::GetMessageString

替代此函数为命令 ID 提供自定义字符串。

virtual void GetMessageString(
    UINT nID,
    CString& rMessage) const;

参数

nID
所需消息的资源 ID。

rMessage
要将消息放入其中的 CString 对象。

备注

默认实现只会从资源文件加载由 nID 指定的字符串。 当状态栏中的消息字符串需要更新时,框架会调用此函数。

CFrameWnd::GetTitle

检索窗口对象的标题。

CString GetTitle() const;

返回值

包含窗口对象的当前标题的 CString 对象。

CFrameWnd::InitialUpdateFrame

使用 Create 创建新框架后调用 IntitialUpdateFrame

void InitialUpdateFrame(
    CDocument* pDoc,
    BOOL bMakeVisible);

参数

pDoc
指向框架窗口关联到的文档。 可以为 NULL

bMakeVisible
如果为 TRUE,指示框架应变为可见和活动状态。 如果为 FALSE,则不显示任何后代。

注解

这会导致该框架窗口中的所有视图都接收其 OnInitialUpdate 调用。

此外,如果以前没有活动视图,框架窗口的主视图将处于活动状态。 主视图是子 ID 为 AFX_IDW_PANE_FIRST 的视图。 最后,如果 bMakeVisible 为非零值,则框架窗口可见。 如果 bMakeVisible 为 0,则框架窗口的当前焦点和可见状态将保持不变。 使用框架的“新建文件”和“打开文件”实现时,无需调用此函数。

CFrameWnd::InModalState

调用此成员函数以检查框架窗口是模式还是无模式。

BOOL InModalState() const;

返回值

如果是,则为非零值,否则为 0。

CFrameWnd::IsTracking

调用此成员函数以确定窗口中的拆分器栏当前是否正在移动。

BOOL IsTracking() const;

返回值

如果拆分器操作正在进行中,则为非零值;否则为 0。

CFrameWnd::LoadAccelTable

调用以加载指定的快捷键表。

BOOL LoadAccelTable(LPCTSTR lpszResourceName);

参数

lpszResourceName
标识快捷键资源的名称。 如果资源以整数 ID 进行标识,请使用 MAKEINTRESOURCE

返回值

如果快捷键表已成功加载,则为非零值;否则为 0。

注解

一次只能加载一个表。

从资源加载的快捷键表在应用程序终止时自动释放。

如果调用 LoadFrame 以创建框架窗口,框架将加载快捷键表以及菜单和图标资源,然后将不需要对此成员函数的后续调用。

CFrameWnd::LoadBarState

调用此函数以还原框架窗口拥有的每个控件条的设置。

void LoadBarState(LPCTSTR lpszProfileName);

参数

lpszProfileName
初始化 (INI) 文件中某个部分的名称或者存储状态信息的 Windows 注册表中的一个键。

备注

还原的信息包括可见性、水平/垂直方向、停靠状态和控件条位置。

要还原的设置必须在调用 LoadBarState 之前写入注册表。 通过调用 CWinApp::SetRegistryKey 将信息写入注册表。 通过调用 SaveBarState 将信息写入 INI 文件。

CFrameWnd::LoadFrame

调用以从资源信息动态创建框架窗口。

virtual BOOL LoadFrame(
    UINT nIDResource,
    DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
    CWnd* pParentWnd = NULL,
    CCreateContext* pContext = NULL);

参数

nIDResource
与框架窗口关联的共享资源的 ID。

dwDefaultStyle
框架的样式。 如果希望标题栏自动显示窗口中表示的文档的名称,请包含 FWS_ADDTOTITLE 样式。

pParentWnd
指向框架的父窗口的指针。

pContext
指向 CCreateContext 结构的指针。 此参数可以为 NULL

备注

分两步构造 CFrameWnd 对象。 首先,调用构造函数,该构造函数将构造 CFrameWnd 对象,然后调用 LoadFrame,它将加载 Windows 框架窗口和关联的资源,并将框架窗口附加到 CFrameWnd 对象。 nIDResource 参数指定框架窗口标题的菜单、快捷键表、图标和字符串资源。

在想要指定框架窗口的所有创建参数时,请使用 Create 成员函数,而不是 LoadFrame

使用文档模板对象创建框架窗口时,框架会调用 LoadFrame

框架使用 pContext 自变量指定要连接到框架窗口的对象,包括任何包含的视图对象。 可以在调用 LoadFrame 时将 pContext 自变量设置为 NULL

CFrameWnd::m_bAutoMenuEnable

启用此数据成员(默认设置)后,当用户下拉菜单时,不会自动禁用没有 ON_UPDATE_COMMAND_UION_COMMAND 处理程序的菜单项。

BOOL m_bAutoMenuEnable;

注解

具有 ON_COMMAND 处理程序但没有 ON_UPDATE_COMMAND_UI 处理程序的菜单项会自动启用。

设置此数据成员时,菜单项会以与启用工具栏按钮相同的方式自动启用。

注意

m_bAutoMenuEnable 对顶级菜单项不起作用。

此数据成员简化了基于当前选择的可选命令的实现,并减少了编写 ON_UPDATE_COMMAND_UI 用于启用和禁用菜单项的处理程序的需求。

示例

// CMainFrame is application-defined object of type CFrameWnd
CMainFrame::CMainFrame()
    : m_hDrawMenu(NULL), m_hDrawAccel(NULL), m_bCheck(false), m_nWindowTimer(0), m_nCallbackTimer(0)
{
   // Set to FALSE so no ON_UPDATE_COMMAND_UI
   // or ON_COMMAND handlers are needed, and
   // CMenu::EnableMenuItem() will work as expected.
   m_bAutoMenuEnable = FALSE;
}

CFrameWnd::NegotiateBorderSpace

调用此成员函数,以在 OLE 就地激活期间在框架窗口中协商边框空间。

virtual BOOL NegotiateBorderSpace(
    UINT nBorderCmd,
    LPRECT lpRectBorder);

参数

nBorderCmd
包含 enum BorderCmd 中的以下值之一:

  • borderGet = 1

  • borderRequest = 2

  • borderSet = 3

lpRectBorder
指向指定边框坐标的 RECT 结构或 CRect 对象的指针。

返回值

如果成功,则不为 0;否则为 0。

注解

此成员函数是 OLE 边界空间协商的 CFrameWnd 实现。

CFrameWnd::OnBarCheck

每当对指定的控件条执行操作时调用。

afx_msg BOOL OnBarCheck(UINT nID);

参数

nID
所显示的控件条的 ID。

返回值

如果控件条存在,则为非零值;否则为 0。

CFrameWnd::OnContextHelp

处理就地项的 SHIFT+F1 帮助。

afx_msg void OnContextHelp();

备注

若要启用上下文相关帮助,必须

ON_COMMAND(ID_CONTEXT_HELP, &CMainFrame::OnContextHelp)

CFrameWnd 类消息映射添加语句,并添加快捷键表条目(通常为 SHIFT+F1)以启用此成员函数。

如果应用程序是 OLE 容器,请使 OnContextHelp 框架窗口对象中包含的所有就地项进入帮助模式。 光标会更改为箭头和问号,随后用户可移动鼠标指针,再按鼠标左键来选择对话框、窗口、菜单或命令按钮。 此成员函数使用光标下对象的帮助上下文调用 Windows 函数 WinHelp

CFrameWnd::OnCreateClient

OnCreate 执行过程中由框架调用。

virtual BOOL OnCreateClient(
    LPCREATESTRUCT lpcs,
    CCreateContext* pContext);

参数

lpcs
指向 Windows CREATESTRUCT 结构的指针。

pContext
指向 CCreateContext 结构的指针。

返回值

如果成功,则不为 0;否则为 0。

备注

从不调用此函数。

如果可能,此函数的默认实现将从 CView 中提供的信息创建一个 pContext 对象。

替代此函数以替代 CCreateContext 对象中传递的值,或更改创建框架窗口主工作区中的控件的方式。 可以替代的 CCreateContext 成员在 CCreateContext 类中进行了介绍。

注意

请勿替换 CREATESTRUCT 结构中传递的值。 它们仅供参考。 如果要替代初始窗口矩形,例如替代 CWnd 成员函数 PreCreateWindow

CFrameWnd::OnHideMenuBar

当系统即将隐藏当前 MFC 应用程序中的菜单栏时,将调用此函数。

virtual void OnHideMenuBar();

备注

此事件处理程序使应用程序能够在系统即将隐藏菜单时执行自定义操作。 你无法阻止菜单被隐藏,但可以调用其他方法来检索菜单样式或状态。

CFrameWnd::OnSetPreviewMode

调用该成员函数以设置应用程序主框架窗口打印预览模式的流入和流出。

virtual void OnSetPreviewMode(
    BOOL bPreview,
    CPrintPreviewState* pState);

参数

bPreview
指定是否将应用程序置于打印预览模式下。 设置为 TRUE 可置于打印预览模式下,设置为 FALSE 可取消预览模式。

pState
指向 CPrintPreviewState 结构的指针。

备注

默认实现会禁用所有标准工具栏,并隐藏主菜单和主客户端窗口。 这会将 MDI 框架窗口转换为临时 SDI 框架窗口。

替代此成员函数以在打印预览期间自定义控件条和其他框架窗口部分的隐藏和显示。 从替代后的版本内调用基类实现。

CFrameWnd::OnShowMenuBar

当系统即将显示当前 MFC 应用程序中的菜单栏时,将调用此函数。

virtual void OnShowMenuBar();

备注

此事件处理程序使应用程序能够在菜单即将显示时执行自定义操作。 你无法阻止菜单显示,但可以调用其他方法来检索菜单样式或状态。

CFrameWnd::OnUpdateControlBarMenu

当更新关联菜单时由框架调用。

afx_msg void OnUpdateControlBarMenu(CCmdUI* pCmdUI);

参数

pCmdUI
指向表示生成更新命令的菜单的 CCmdUI 对象的指针。 更新处理程序将通过 pCmdUI 调用 CCmdUIEnable 成员函数来更新用户界面。

CFrameWnd::RecalcLayout

当打开或关闭标准控件条或调整框架窗口大小时,由框架调用。

virtual void RecalcLayout(BOOL bNotify = TRUE);

参数

bNotify
确定框架窗口的活动就地项是否会收到布局更改的通知。 如果为 TRUE,则此项会收到通知;如果为 FALSE 则不会收到。

注解

此成员函数的默认实现将调用 CWnd 成员函数 RepositionBars 以重新定位框架以及主客户端窗口中的所有控件条(通常为 CViewMDICLIENT)。

替代此成员函数,以在框架窗口的布局发生更改后控制控件条的外观和行为。 例如,在打开或关闭控件条或添加另一个控件条时调用它。

CFrameWnd::rectDefault

创建窗口以允许选择窗口的初始大小和位置时,将此静态 CRect 作为参数传递。

static AFX_DATA const CRect rectDefault;

CFrameWnd::SaveBarState

调用此函数,以存储有关框架窗口拥有的每个控件条的信息。

void SaveBarState(LPCTSTR lpszProfileName) const;

参数

lpszProfileName
初始化文件中某个部分的名称,或者存储状态信息的 Windows 注册表中的一个键。

备注

可使用 LoadBarState 从初始化文件读取此信息。 存储的信息包括可见性、水平/垂直方向、停靠状态和控件条位置。

CFrameWnd::SetActivePreviewView

将指定视图指定为 Rich Preview 的活动视图。

void SetActivePreviewView(CView* pViewNew);

参数

pViewNew
指向要激活的视图的指针。

注解

CFrameWnd::SetActiveView

调用此成员函数以设置活动视图。

void SetActiveView(
    CView* pViewNew,
    BOOL bNotify = TRUE);

参数

pViewNew
指定指向 CView 对象的指针,如果没有活动视图,则指定 NULL

bNotify
指定是否通知视图进行激活。 如果为 TRUE,将为新视图调用 OnActivateView;如果为 FALSE,则不调用。

备注

当用户将焦点更改为框架窗口中的视图时,框架将自动调用此函数。 可以显式调用 SetActiveView 以将焦点更改为指定视图。

CFrameWnd::SetDockState

调用此成员函数以将 CDockState 对象中存储的状态信息应用于框架窗口的控件条。

void SetDockState(const CDockState& state);

参数

state
将存储的状态应用于框架窗口的控件条。

注解

若要还原控件条的以前状态,可以通过 CDockState::LoadStateSerialize 加载存储的状态,然后使用 SetDockState 将其应用于框架窗口的控件条。 上一个状态通过 GetDockState 存储在 CDockState对象中

CFrameWnd::SetMenuBarState

将当前 MFC 应用程序中菜单的显示状态设置为隐藏或显示。

virtual BOOL SetMenuBarState(DWORD nState);

参数

nState
[in] 指定是显示还是隐藏菜单。 nState 参数可以具有下列值:

  • AFX_MBS_VISIBLE (0x01) - 如果菜单已隐藏,则显示菜单,但如果菜单可见,则不起作用。
  • AFX_MBS_HIDDEN (0x02) - 如果菜单可见,则隐藏菜单,但如果菜单已隐藏,则不起作用。

返回值

如果此方法成功更改菜单状态,则为 TRUE;否则为 FALSE

注解

如果发生运行时错误,此方法将在调试模式下断言,并引发派生自 CException 类的异常。

CFrameWnd::SetMenuBarVisibility

将当前 MFC 应用程序中菜单的默认行为设置为隐藏还是可见。

virtual void SetMenuBarVisibility(DWORD nStyle);

参数

nStyle
[in] 指定菜单在默认情况下是隐藏还是可见且具有焦点。 nStyle 参数可以具有下列值:

  • AFX_MBV_KEEPVISIBLE (0x01) - 菜单一直显示,并且默认情况下没有焦点。

  • AFX_MBV_DISPLAYONFOCUS (0x02) - 默认情况下,菜单处于隐藏状态。 如果菜单处于隐藏状态,按 Alt 键可显示菜单并为其提供焦点。 如果菜单处于显示状态,按 Alt 或 ESC 键可隐藏菜单。

  • AFX_MBV_DISPLAYONFOCUS | AFX_MBV_DISPLAYONF10 (0x06) - 默认情况下,菜单处于隐藏状态。 如果菜单处于隐藏状态,按 F10 键可显示菜单并为其提供焦点。 如果菜单处于显示状态,按 F10 键可打开或关闭菜单的焦点。 菜单会一直显示,直到按 Alt 或 ESC 键将其隐藏。

备注

如果 nStyle 参数的值无效,此方法将在调试模式下断言并在发布模式下引发 CInvalidArgException。 如果发生运行时错误,此方法将在调试模式下断言并引发派生自 CException 类的异常。

此方法会影响为 Windows Vista 及更高版本编写的应用程序中的菜单状态。

CFrameWnd::SetMessageText

调用此函数以在状态栏窗格中放置 ID 为 0 的字符串。

void SetMessageText(LPCTSTR lpszText);
void SetMessageText(UINT nID);

参数

lpszText
指向要放置在状态栏上的字符串。

nID
要放置在状态栏上的字符串的字符串资源 ID。

备注

这通常是状态栏最左侧、最长的窗格。

CFrameWnd::SetProgressBarPosition

设置任务栏上显示的 Windows 7 进度条的当前位置。

void SetProgressBarPosition(int nProgressPos);

参数

nProgressPos
指定要设置的位置。 必须位于由 SetProgressBarRange 设置的范围内。

注解

CFrameWnd::SetProgressBarRange

设置任务栏上显示的 Windows 7 进度条的范围。

void SetProgressBarRange(
    int nRangeMin,
    int nRangeMax);

参数

nRangeMin
最小值。

nRangeMax
最大值。

注解

CFrameWnd::SetProgressBarState

设置任务栏按钮上显示的进度指示器的类型和状态。

void SetProgressBarState(TBPFLAG tbpFlags);

参数

tbpFlags
控制进度按钮当前状态的标志。 请仅指定以下标志之一,因为所有状态是互斥的:TBPF_NOPROGRESSTBPF_INDETERMINATETBPF_NORMALTBPF_ERRORTBPF_PAUSED

备注

CFrameWnd::SetTaskbarOverlayIcon

已重载。 将覆盖应用于任务栏按钮,以指示应用程序状态或者通知用户。

BOOL SetTaskbarOverlayIcon(
    UINT nIDResource,
    LPCTSTR lpcszDescr);

BOOL SetTaskbarOverlayIcon(
    HICON hIcon,
    LPCTSTR lpcszDescr);

参数

nIDResource
指定要用作覆盖的图标的资源 ID。 有关详细信息,请参阅 hIcon 的说明。

lpcszDescr
指向字符串的指针,该字符串提供覆盖所传达信息的替换文字版本,以提供辅助功能。

hIcon
要用作覆盖的图标的句柄。 这应该是一个小图标,大小为 16x16 像素,每英寸 96 点 (dpi)。 如果覆盖图标已应用于任务栏按钮,则会替换现有覆盖。 此值可为 NULL。 如何处理 NULL 值取决于任务栏按钮是表示单个窗口还是一组窗口。 调用应用程序负责在不再需要 hIcon 时将其释放。

返回值

如果成功,则为 TRUE;如果操作系统版本低于 Windows 7 或设置图标时出错,则返回 FALSE

备注

CFrameWnd::SetTitle

设置窗口对象的标题。

void SetTitle(LPCTSTR lpszTitle);

参数

lpszTitle
指向包含窗口对象的标题的字符串的指针。

CFrameWnd::ShowControlBar

调用此成员函数以显示或隐藏控件条。

void ShowControlBar(
    CControlBar* pBar,
    BOOL bShow,
    BOOL bDelay);

参数

pBar
指向要显示或隐藏的控件条的指针。

bShow
如果为 TRUE,则指定显示控件条。 如果为 FALSE,则指定隐藏控件条。

bDelay
如果为 TRUE,则延迟显示控件条。 如果为 FALSE,则立即显示控件条。

CFrameWnd::ShowOwnedWindows

调用此成员函数以显示 CFrameWnd 对象后代的所有窗口。

void ShowOwnedWindows(BOOL bShow);

参数

bShow
指定是显示还是隐藏拥有的窗口。

另请参阅

CWnd
层次结构图
CWnd
CMDIFrameWnd
CMDIChildWnd
CView
CDocTemplate
CRuntimeClass 结构