CFrameWnd
类
提供 Windows 单文档界面 (SDI) 重叠式或弹出框架窗口功能,并提供管理窗口的成员。
语法
class CFrameWnd : public CWnd
成员
公共构造函数
名称 | 描述 |
---|---|
CFrameWnd::CFrameWnd |
构造 CFrameWnd 对象。 |
公共方法
受保护方法
名称 | 描述 |
---|---|
CFrameWnd::OnCreateClient |
为框架创建客户端窗口。 |
CFrameWnd::OnHideMenuBar |
在当前 MFC 应用程序中的菜单隐藏之前调用。 |
CFrameWnd::OnShowMenuBar |
在当前 MFC 应用程序中的菜单显示之前调用。 |
公共数据成员
“属性” | 描述 |
---|---|
CFrameWnd::m_bAutoMenuEnable |
控制菜单项的自动启用和禁用功能。 |
CFrameWnd::rectDefault |
创建 CFrameWnd 对象以允许选择窗口的初始大小和位置时,将此静态 CRect 作为参数传递。 |
注解
若要为应用程序创建有用的框架窗口,请从 CFrameWnd
派生一个类。 将成员变量添加到该派生类,以存储特定于应用程序的数据。 可派生类中实现消息处理程序成员函数和消息映射,以指定在消息定向到窗口时所发生的情况。
有三种方法可以构造框架窗口:
在调用 Create
或 LoadFrame
之前,必须使用 C++ new
运算符在堆上构造框架窗口对象。 在调用 Create
之前,还可以向 AfxRegisterWndClass
全局函数注册窗口类,以设置框架的图标和类样式。
使用 Create
成员函数将框架的创建参数作为即时自变量传递。
LoadFrame
需要的自变量少于 Create
,并且是从资源检索其大部分默认值,包括框架的标题、图标、快捷键表和菜单。 若要由 LoadFrame
访问,所有这些资源都必须具有相同的资源 ID(例如 IDR_MAINFRAME
)。
当 CFrameWnd
对象包含视图和文档时,它们由框架间接创建,而不是由程序员直接创建。 CDocTemplate
对象协调框架的创建、包含视图的创建以及视图与相应文档的连接。 CDocTemplate
构造函数的参数指定涉及的三个类(文档、框架和视图)的 CRuntimeClass
。 CRuntimeClass
对象由框架使用,在由用户指定时动态创建新框架(例如,通过使用“新建文件”命令或多文档界面 (MDI)“新建窗口”命令)。
必须使用 DECLARE_DYNCREATE
声明派生自 CFrameWnd
的框架窗口类,以便上述 RUNTIME_CLASS
机制能够正常工作。
CFrameWnd
包含默认实现,用于在典型 Windows 应用程序中执行主窗口的以下函数:
CFrameWnd
框架窗口会跟踪当前活动视图,该视图独立于 Windows 活动窗口或当前输入焦点。 重新激活框架后,通过调用CView::OnActivateView
通知该活动视图。命令消息和许多常见的框架通知消息,包括由
OnSetFocus
处理的命令消息、OnHScroll
当前活动视图和CWnd
的OnVScroll
函数,都由CFrameWnd
框架窗口委托给当前活动视图。当前活动视图(或者如果在 MDI 框架中,则是当前活动的 MDI 子框架窗口)可以确定框架窗口的标题。 可以通过关闭框架窗口的
FWS_ADDTOTITLE
样式位来禁用此功能。CFrameWnd
框架窗口管理控件条、视图和其他子窗口在框架窗口的工作区内的位置。 框架窗口还会对工具栏和其他控件条按钮执行空闲时间更新。CFrameWnd
框架窗口还具有用于切换工具栏和状态栏的命令的默认实现。CFrameWnd
框架窗口管理主菜单栏。 当显示弹出菜单时,框架窗口会使用UPDATE_COMMAND_UI
机制来确定应启用、禁用或选中哪些菜单项。 当用户选择菜单项时,框架窗口会使用该命令的消息字符串更新状态栏。CFrameWnd
框架窗口具有可选的快捷键表,可自动翻译键盘快捷键。CFrameWnd
框架窗口具有用于上下文相关帮助的LoadFrame
的可选帮助 ID 集。 框架窗口是上下文敏感帮助 (SHIFT+F1) 和打印预览模式等半模式状态的主协调程序。CFrameWnd
框架窗口将打开从文件管理器拖动并放置在框架窗口中的文件。 如果文件扩展名已注册并与应用程序关联,框架窗口将响应动态数据交换 (DDE) 打开请求,当用户在文件管理器中打开数据文件或调用 WindowsShellExecute
函数时会发生该请求。如果框架窗口是主应用程序窗口(即
CWinThread::m_pMainWnd
),当用户关闭应用程序时,框架窗口会提示用户保存任何修改的文档(对于OnClose
和OnQueryEndSession
)。如果框架窗口是主应用程序窗口,则框架窗口是运行 WinHelp 的上下文。 如果已启动框架窗口以获取此应用程序的帮助,则关闭框架窗口将关闭
WINHELP.EXE
。
请勿使用 C++ delete
运算符销毁框架窗口。 请改用 CWnd::DestroyWindow
。 当销毁窗口时,PostNcDestroy
的 CFrameWnd
实现删除 C++ 对象。 当用户关闭框架窗口时,默认 OnClose
处理程序将调用 DestroyWindow
。
有关 CFrameWnd
的详细信息,请参阅框架窗口。
继承层次结构
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::EnableDocking
和 CFrameWnd::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 应用程序中的活动视图。 可以通过调用函数 MDIGetActive
或 GetActiveFrame
找到活动的 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::SaveState
或 Serialize
将 CDockState
的内容写入存储。 如果以后想要将控件条还原到以前的状态,请使用 CDockState::LoadState
或 Serialize
加载状态,然后调用 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_UI
或 ON_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
= 1borderRequest
= 2borderSet
= 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
调用 CCmdUI
的 Enable
成员函数来更新用户界面。
CFrameWnd::RecalcLayout
当打开或关闭标准控件条或调整框架窗口大小时,由框架调用。
virtual void RecalcLayout(BOOL bNotify = TRUE);
参数
bNotify
确定框架窗口的活动就地项是否会收到布局更改的通知。 如果为 TRUE
,则此项会收到通知;如果为 FALSE
则不会收到。
注解
此成员函数的默认实现将调用 CWnd
成员函数 RepositionBars
以重新定位框架以及主客户端窗口中的所有控件条(通常为 CView
或 MDICLIENT
)。
替代此成员函数,以在框架窗口的布局发生更改后控制控件条的外观和行为。 例如,在打开或关闭控件条或添加另一个控件条时调用它。
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::LoadState
或 Serialize
加载存储的状态,然后使用 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_NOPROGRESS
、TBPF_INDETERMINATE
、TBPF_NORMAL
、TBPF_ERROR
、TBPF_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
结构