CDockablePane
类
实现可在停靠站点停靠或包含在选项卡式窗格中的窗格。
语法
class CDockablePane : public CPane
成员
公共构造函数
名称 | 描述 |
---|---|
CDockablePane::CDockablePane |
构造并初始化一个 CDockablePane 对象。 |
公共方法
受保护方法
名称 | 描述 |
---|---|
CDockablePane::CheckAutoHideCondition |
确定停靠窗格是否已隐藏(在自动隐藏模式下)。 |
CDockablePane::CheckStopSlideCondition |
确定自动隐藏停靠窗格应何时停止滑动。 |
CDockablePane::DrawCaption |
绘制停靠窗格标题栏(控制手柄)。 |
CDockablePane::OnPressButtons |
在用户按下除 AFX_HTCLOSE 和 AFX_HTMAXBUTTON 按钮之外的标题按钮时调用。 |
CDockablePane::OnSlide |
由框架调用,可在显示或隐藏窗格时呈现自动隐藏幻灯片效果。 |
数据成员
名称 | 描述 |
---|---|
CDockablePane::m_bDisableAnimation |
指定是否禁用可停靠的窗格的自动隐藏动画。 |
CDockablePane::m_bHideInAutoHideMode |
确定窗格在处于自动隐藏模式时的行为。 |
CDockablePane::m_nSlideSteps |
指定窗格在自动隐藏模式下显示或隐藏时的窗格动画速度。 |
备注
CDockablePane
实现以下功能:
将窗格停靠到主框架窗口。
将窗格切换到自动隐藏模式。
将窗格附加到选项卡式窗口。
在微型框窗口中浮动窗格。
将一个窗格停靠到另一个浮动在微型框窗口中的窗格。
重设窗格大小。
加载和保存停靠窗格的状态。
注意
状态信息保存到 Windows 注册表。
创建带或不带标题栏的窗格。 标题栏可以有文本标签,并且可以填充渐变色。
在拖动窗格的同时显示窗格内容
在拖动窗格的同时显示拖动矩形。
若要在应用程序中使用停靠窗格,请从 CDockablePane
类派生窗格类。 将派生的对象嵌入主框架窗口对象或控制窗格实例的窗口对象中。 然后,当你在主框架窗口中处理 WM_CREATE
消息时,调用 CDockablePane::Create
方法或 CDockablePane::CreateEx
方法。 最后,通过调用 CBasePane::EnableDocking
、CBasePane::DockPane
或 CDockablePane::AttachToTabWnd
设置窗格对象。
自定义提示
以下提示适用于 CDockablePane
对象:
如果为两个非选项卡式的可停靠的窗格调用
CDockablePane::AttachToTabWnd
,则会在ppTabbedControlBar
参数中返回指向选项卡式窗口的指针。 可以使用此参数继续将选项卡添加到选项卡式窗口。由
CDockablePane::AttachToTabWnd
创建的选项卡式窗格的类型取决于pTabControlBarAttachTo
参数中的CDockablePane
对象。 可以调用CDockablePane::SetTabbedPaneRTC
来设置将由CDockablePane
创建的选项卡式窗格的类型。 默认类型将在你首次创建CDockablePane
时由CDockablePane::Create
的dwTabbedStyle
确定。 如果dwTabbedStyle
为AFX_CBRS_OUTLOOK_TABS
,则默认类型为CMFCOutlookBar
类;如果dwTabbedStyle
为AFX_CBRS_REGULAR_TABS
,则默认类型为CTabbedPane
类。如果要将一个可停靠的窗格停靠到另一个窗格,请调用
CDockablePane::DockToWindow
方法。 在调用此方法之前,原始窗格必须停靠在某个位置。成员变量
CDockablePane::m_bHideInAutoHideMode
控制当你调用CDockablePane::ShowPane
时可停靠的窗格在自动隐藏模式下的行为方式。 如果将此成员变量设置为TRUE
,则会隐藏可停靠的窗格及其自动隐藏按钮。 否则,它们会滑入和滑出。通过将
CDockablePane::m_bDisableAnimation
成员变量设置为TRUE
,可以禁用自动隐藏动画。
示例
以下示例演示如何使用 CDockablePane
类中的各种方法配置 CDockablePane
对象。 该示例演示了如何为可停靠的窗格启用自动隐藏所有功能的功能、如何启用标题栏或控制手柄、如何启用自动隐藏模式、如何显示窗格,以及如何对处于自动隐藏模式的窗格进行动画处理。 此代码片段是 Visual Studio 演示示例的一部分。
// GetOwner is an inherited method.
CDockablePane *pParentBar = DYNAMIC_DOWNCAST(CDockablePane, GetOwner());
pParentBar->EnableAutohideAll();
pParentBar->EnableGripper(true);
pParentBar->SetAutoHideMode(true, CBRS_ALIGN_LEFT);
pParentBar->ShowPane(true, false, true);
pParentBar->Slide(true);
继承层次结构
要求
标头:afxDockablePane.h
CDockablePane::AttachToTabWnd
将当前窗格附加到目标窗格,创建选项卡式窗格。
virtual CDockablePane* AttachToTabWnd(
CDockablePane* pTabControlBarAttachTo,
AFX_DOCK_METHOD dockMethod,
BOOL bSetActive= TRUE,
CDockablePane** ppTabbedControlBar = NULL);
参数
pTabControlBarAttachTo
[in, out] 指定当前窗格附加到的目标窗格。 目标窗格必须是可停靠的窗格。
dockMethod
[in] 指定停靠方法。
bSetActive
[in] 若要在附加操作后激活选项卡式窗格,则为 TRUE
;否则为 FALSE
。
ppTabbedControlBar
[out] 包含附加操作产生的选项卡式窗格。
返回值
如果当前窗格不是选项卡式窗格,则为指向当前窗格的指针;否则为指向附加操作产生的选项卡式窗格的指针。 如果无法附加当前窗格,或者发生错误,则返回值为 NULL
。
注解
当一个可停靠的窗格使用此方法附加到另一个窗格时,会发生以下情况:
框架检查目标窗格
pTabControlBarAttachTo
是常规停靠窗格,还是从CBaseTabbedPane
派生的。如果目标窗格是选项卡式窗格,框架会将当前窗格作为选项卡添加到该窗格。
如果目标窗格是常规停靠窗格,框架会创建选项卡式窗格。
框架调用
pTabControlBarAttachTo->CreateTabbedPane
。 新选项卡式窗格的样式取决于m_pTabbedControlBarRTC
成员。 默认情况下,此成员设置为运行时类CTabbedPane
。 如果将AFX_CBRS_OUTLOOK_TABS
样式作为dwTabbedStyle
参数传递给CDockablePane::Create
方法,则会将运行时类对象设置为运行时类CMFCOutlookBar
。 可以随时更改此成员以更改新窗格的样式。当此方法创建选项卡式窗格时,框架会将指向
pTabControlBarAttachTo
的指针替换(如果窗格停靠或浮在多微型框窗口中)为指向新选项卡式窗格的指针。框架会将
pTabControlBarAttachTo
窗格作为第一个选项卡添加到选项卡式窗格。然后,框架会将当前窗格作为第二个选项卡添加。
如果当前窗格派生自
CBaseTabbedPane
,则会将其所有选项卡移到pTabControlBarAttachTo
并销毁当前窗格。 因此,调用此方法时要小心,因为当方法返回时,指向当前窗格的指针可能无效。
如果在构建停靠布局时将一个窗格附加到另一个窗格,则请将 dockMethod
设置为 DM_SHOW
。
应该先停靠第一个窗格,然后再将另一个窗格附加到该窗格。
CDockablePane::CalcFixedLayout
返回窗格矩形的大小。
virtual CSize CalcFixedLayout(
BOOL bStretch,
BOOL bHorz);
参数
bStretch
[in] 未使用。
bHorz
[in] 未使用。
返回值
一个 CSize
对象,其中包含窗格矩形的大小。
CDockablePane::CanAcceptMiniFrame
确定是否可以将指定的微型框停靠到窗格。
virtual BOOL CanAcceptMiniFrame(CPaneFrameWnd* pMiniFrame) const;
参数
pMiniFrame
[in] 指向 CPaneFrameWnd
对象的指针。
返回值
如果可以将 pMiniFrame
停靠到窗格,则为 TRUE
;否则为 FALSE
。
CDockablePane::CanAcceptPane
确定是否可以将另一个窗格停靠到当前窗格。
virtual BOOL CanAcceptPane(const CBasePane* pBar) const;
参数
pBar
[in] 指定要停靠到当前窗格的窗格。
返回值
如果可以将指定窗格停靠到此窗格,则为 TRUE
;否则为 FALSE
。
备注
在将窗格停靠到当前窗格之前,框架会调用此方法。
重写派生类中的此函数,以启用或禁用停靠到特定窗格的操作。
默认情况下,如果 pBar
或其父级为类型 CDockablePane
,此方法会返回 TRUE
。
CDockablePane::CanAutoHide
确定窗格是否可以自动隐藏。
virtual BOOL CanAutoHide() const;
返回值
如果窗格可以自动隐藏,则为 TRUE
;否则为 FALSE
。
注解
如果遇到以下任何情况,CDockablePane::CanAutoHide
会返回 FALSE
:
窗格没有父级。
停靠管理器不允许窗格自动隐藏。
窗格未停靠。
CDockablePane::CanBeAttached
确定是否可将当前窗格停靠到另一个窗格。
virtual BOOL CanBeAttached() const;
返回值
如果可停靠的窗格可以停靠到另一个窗格或主框架窗口,则为 TRUE
;否则为 FALSE
。
备注
默认情况下,此方法始终返回 TRUE
。 在派生类中重写此方法,以便在不调用 CBasePane::EnableDocking
的情况下启用或禁用停靠。
CDockablePane::CDockablePane
构造并初始化一个 CDockablePane
对象。
CDockablePane();
备注
构造可停靠窗格对象后,请调用 CDockablePane::Create
或 CDockablePane::CreateEx
来创建它。
CDockablePane::ConvertToTabbedDocument
将一个或多个可停靠的窗格转换为 MDI 选项卡式文档。
virtual void ConvertToTabbedDocument(BOOL bActiveTabOnly = TRUE);
参数
bActiveTabOnly
[in] 转换 CTabbedPane
时,指定 TRUE
可仅转换活动选项卡。指定 FALSE
可转换窗格中的所有选项卡。
CDockablePane::CheckAutoHideCondition
确定停靠窗格是否已隐藏(也称自动隐藏模式)。
virtual BOOL CheckAutoHideCondition();
返回值
如果满足隐藏条件,则为 TRUE
;否则为 FALSE
。
注解
框架使用计时器来定期检查是否隐藏某个处于自动隐藏模式的可停靠的窗格。 此方法返回 TRUE
的前提是,窗格未处于活动状态,窗格未重设大小,并且鼠标指针未悬停在窗格上。
如果满足上述所有条件,框架会调用 CDockablePane::Slide
来隐藏窗格。
CDockablePane::CheckStopSlideCondition
确定自动隐藏停靠窗格应何时停止滑动。
virtual BOOL CheckStopSlideCondition(BOOL bDirection);
参数
bDirection
[in] 如果窗格可见,则为 TRUE
;如果窗格已隐藏,则为 FALSE
。
返回值
如果满足停止条件,则为 TRUE
;否则为 FALSE
。
注解
当可停靠的窗格设置为自动隐藏模式时,框架使用滑动效果来显示或隐藏窗格。 当窗格滑动时,框架将调用此函数。 当窗格完全可见或完全隐藏时,CheckStopSlideCondition
返回 TRUE
。
在派生类中重写此方法可实现自定义自动隐藏效果。
CDockablePane::CopyState
复制可停靠的窗格的状态。
virtual void CopyState(CDockablePane* pOrgBar);
参数
pOrgBar
[in] 指向可停靠的窗格的指针。
注解
通过调用以下方法,CDockablePane::CopyState
将 pOrgBar
的状态复制到当前窗格:
CDockablePane::Create
创建 Windows 控件并将其附加到 CDockablePane
对象。
virtual BOOL Create(
LPCTSTR lpszCaption,
CWnd* pParentWnd,
const RECT& rect,
BOOL bHasGripper,
UINT nID,
DWORD dwStyle,
DWORD dwTabbedStyle = AFX_CBRS_REGULAR_TABS,
DWORD dwControlBarStyle = AFX_DEFAULT_DOCKING_PANE_STYLE,
CCreateContext* pContext = NULL);
virtual BOOL Create(
LPCTSTR lpszWindowName,
CWnd* pParentWnd,
CSize sizeDefault,
BOOL bHasGripper,
UINT nID,
DWORD dwStyle = WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_HIDE_INPLACE,
DWORD dwTabbedStyle = AFX_CBRS_REGULAR_TABS,
DWORD dwControlBarStyle = AFX_DEFAULT_DOCKING_PANE_STYLE);
参数
lpszCaption
[in] 指定窗口名称。
pParentWnd
[in, out] 指定父窗口。
rect
[in] 指定窗口的大小和位置,以 pParentWnd
的客户端坐标表示。
bHasGripper
[in] 若要创建带标题栏的窗格,则为 TRUE
;否则为 FALSE
。
nID
[in] 指定子窗口的 ID。 如果要保存此停靠窗格的停靠状态,此值必须独一无二。
dwStyle
[in] 指定窗口样式特性。
dwTabbedStyle
[in] 指定当用户在此窗格的标题栏上拖动窗格时创建的选项卡式窗口的选项卡式样式。
dwControlBarStyle
[in] 指定其他样式特性。
pContext
[in, out] 指定窗口的创建上下文。
lpszWindowName
[in] 指定窗口名称。
sizeDefault
[in] 指定窗口的大小。
返回值
如果已成功创建可停靠的窗格,则为 TRUE
;否则为 FALSE
。
备注
请创建 Windows 窗格并将其附加到 CDockablePane
对象。
如果 dwStyle
窗口样式具有 CBRS_FLOAT_MULTI
标志,则微型框窗口可以与其中的其他窗格一起浮动。 默认情况下,停靠窗格只能单独浮动。
如果 dwTabbedStyle
参数指定了 AFX_CBRS_OUTLOOK_TABS
标志,则当使用 CDockablePane::AttachToTabWnd
方法将另一个窗格附加到此窗格时,此窗格将创建 Outlook 样式的选项卡式窗格。 默认情况下,可停靠的窗格会创建类型为 CTabbedPane
的常规选项卡式窗格。
CDockablePane::CreateDefaultPaneDivider
为窗格创建默认分隔符,因为它将停靠到框架窗口。
static CPaneDivider* __stdcall CreateDefaultPaneDivider(
DWORD dwAlignment,
CWnd* pParent,
CRuntimeClass* pSliderRTC = NULL);
参数
dwAlignment
[in] 指定要将窗格停靠到其中的主框架侧。 如果 dwAlignment
包含 CBRS_ALIGN_LEFT
或 CBRS_ALIGN_RIGHT
标志,此方法将创建垂直 (CPaneDivider::SS_VERT
) 分隔符;否则,此方法将创建水平 (CPaneDivider::SS_HORZ
) 分隔符。
pParent
[in] 指向父框架的指针。
pSliderRTC
[in] 未使用。
返回值
此方法返回指向新创建的分隔符的指针,或者返回 NULL
(如果分隔符创建失败)。
备注
dwAlignment
可以是下列任意值:
值 | 说明 |
---|---|
CBRS_ALIGN_TOP |
窗格将停靠在框架窗口的工作区顶部。 |
CBRS_ALIGN_BOTTOM |
窗格将停靠在框架窗口的工作区底部。 |
CBRS_ALIGN_LEFT |
窗格将停靠在框架窗口的工作区左侧。 |
CBRS_ALIGN_RIGHT |
窗格将停靠在框架窗口的工作区右侧。 |
CDockablePane::CreateEx
创建 Windows 控件并将其附加到 CDockablePane
对象。
virtual BOOL CreateEx(
DWORD dwStyleEx,
LPCTSTR lpszCaption,
CWnd* pParentWnd,
const RECT& rect,
BOOL bHasGripper,
UINT nID,
DWORD dwStyle,
DWORD dwTabbedStyle = AFX_CBRS_REGULAR_TABS,
DWORD dwControlBarStyle = AFX_DEFAULT_DOCKING_PANE_STYLE,
CCreateContext* pContext = NULL);
参数
dwStyleEx
[in] 指定新窗口的扩展样式特性。
lpszCaption
[in] 指定窗口名称。
pParentWnd
[in, out] 指定父窗口。
rect
[in] 指定窗口的大小和位置,以 pParentWnd
的客户端坐标表示。
bHasGripper
[in] 若要创建带标题栏的窗格,则为 TRUE
;否则为 FALSE
。
nID
[in] 指定子窗口的 ID。 如果要保存此停靠窗格的停靠状态,此值必须独一无二。
dwStyle
[in] 指定窗口样式特性。
dwTabbedStyle
[in] 指定当用户在此窗格的标题栏上拖动窗格时创建的选项卡式窗口的选项卡式样式。
dwControlBarStyle
[in] 指定其他样式特性。
pContext
[in, out] 指定窗口的创建上下文。
返回值
如果已成功创建可停靠的窗格,则为 TRUE
;否则为 FALSE
。
备注
请创建 Windows 窗格并将其附加到 CDockablePane
对象。
如果 dwStyle
窗口样式具有 CBRS_FLOAT_MULTI
标志,则微型框窗口可以与其中的其他窗格一起浮动。 默认情况下,停靠窗格只能单独浮动。
如果 dwTabbedStyle
参数指定了 AFX_CBRS_OUTLOOK_TABS
标志,则当使用 CDockablePane::AttachToTabWnd
方法将另一个窗格附加到此窗格时,此窗格将创建 Outlook 样式的选项卡式窗格。 默认情况下,可停靠的窗格会创建类型为 CTabbedPane
的常规选项卡式窗格。
CDockablePane::CreateTabbedPane
从当前窗格创建选项卡式窗格。
virtual CTabbedPane* CreateTabbedPane();
返回值
新的选项卡式窗格,或者 NULL
(如果创建操作失败)。
备注
框架会在创建选项卡式窗格来替换此窗格时调用此方法。 有关详细信息,请参阅 CDockablePane::AttachToTabWnd
。
重写派生类中的此方法可自定义创建和初始化选项卡式窗格的方式。
选项卡式窗格是根据 m_pTabbedControlBarRTC
成员中存储的运行时类信息创建的,该信息由 CDockablePane::CreateEx
方法初始化。
CDockablePane::DockPaneContainer
将容器停靠到窗格。
virtual BOOL DockPaneContainer(
CPaneContainerManager& barContainerManager,
DWORD dwAlignment,
AFX_DOCK_METHOD dockMethod);
参数
barContainerManager
[in] 对停靠的容器的容器管理器的引用。
dwAlignment
[in] DWORD
,指定容器将停靠到其中的窗格侧。
dockMethod
[in] 未使用。
返回值
如果容器已成功停靠到窗格,则为 TRUE
;否则为 FALSE
。
备注
dwAlignment
可以是下列任意值:
值 | 说明 |
---|---|
CBRS_ALIGN_TOP |
容器将停靠在窗格顶部。 |
CBRS_ALIGN_BOTTOM |
容器将停靠在窗格底部。 |
CBRS_ALIGN_LEFT |
容器将停靠在窗格左侧。 |
CBRS_ALIGN_RIGHT |
容器将停靠在窗格右侧。 |
CDockablePane::DockPaneStandard
使用轮廓(标准)停靠来停靠窗格。
virtual CPane* DockPaneStandard(BOOL& bWasDocked);
参数
bWasDocked
[in] 如果窗格已成功停靠,当此方法返回时,此值会包含 TRUE
;否则会包含 FALSE
。
返回值
如果窗格已停靠到选项卡式窗口,或者由于停靠而创建了选项卡式窗口,则此方法会返回一个指向选项卡式窗口的指针。 如果窗格已经以其他方式成功停靠,则此方法会返回 this
指针。 如果停靠失败,此方法会返回 NULL
。
CDockablePane::DockToRecentPos
将窗格停靠到存储的停靠位置。
BOOL CDockablePane::DockToRecentPos();
返回值
如果窗格已成功停靠,则为 TRUE
;否则为 FALSE
。
备注
可停靠的窗格将最新停靠信息存储在 CRecentDockSiteInfo
对象中。
CDockablePane::DockToWindow
将一个停靠窗格停靠到另一个停靠窗格。
virtual BOOL DockToWindow(
CDockablePane* pTargetWindow,
DWORD dwAlignment,
LPCRECT lpRect = NULL);
参数
pTargetWindow
[in, out] 指定要将此窗格停靠到其中的可停靠的窗格。
dwAlignment
[in] 指定窗格的停靠对齐方式。 可能是 CBRS_ALIGN_LEFT
、CBRS_ALIGN_TOP
、CBRS_ALIGN_RIGHT
、CBRS_ALIGN_BOTTOM
、CBRS_ALIGN_ANY
中的一个。 (在 afxres.h
中定义。)
lpRect
[in] 指定窗格的停靠矩形。
返回值
如果窗格已成功停靠,则为 TRUE
;否则为 FALSE
。
备注
调用此方法,将一个窗格停靠到另一个窗格,其对齐方式由 dwAlignment
指定。
CDockablePane::DrawCaption
绘制停靠窗格的标题栏(也称控制手柄)。
virtual void DrawCaption(
CDC* pDC,
CRect rectCaption);
参数
pDC
[in] 表示用于绘制的设备上下文。
rectCaption
[in] 指定窗格的标题栏的边框。
备注
框架调用此方法以绘制可停靠的窗格的标题栏。
在派生类中重写此方法以自定义标题栏的外观。
CDockablePane::EnableAutohideAll
启用或禁用此窗格以及容器中的其他窗格的自动隐藏模式。
void EnableAutohideAll(BOOL bEnable = TRUE);
参数
bEnable
[in] 若要为可停靠的窗格启用自动隐藏所有功能的功能,则为 TRUE
;否则为 FALSE
。
备注
当用户按住 Ctrl 键并单击固定按钮以将窗格切换到自动隐藏模式时,同一容器中的所有其他窗格也将切换到自动隐藏模式。
调用此方法时,若将 bEnable
设置为 FALSE
,则可禁用特定窗格的此功能。
CDockablePane::EnableGripper
显示或隐藏标题栏(也称控制手柄)。
virtual void EnableGripper(BOOL bEnable);
参数
bEnable
[in] 若要启用标题栏,则为 TRUE
;否则为 FALSE
。
备注
当框架创建可停靠的窗格时,这些窗格没有 WS_STYLE
窗口样式(即使已指定)。 这意味着窗格的标题栏是由框架控制的非工作区,但该区不同于标准窗口标题栏。
可以随时显示或隐藏标题栏。 将窗格作为选项卡添加到选项卡式窗口时,或在微型框窗口中浮动窗格时,框架会隐藏标题栏。
CDockablePane::GetAHRestoredRect
指定自动隐藏模式下的窗格的位置。
CRect GetAHRestoredRect() const;
返回值
一个 CRect
对象,其中包含窗格处于自动隐藏模式时的位置。
注解
CDockablePane::GetAHSlideMode
检索窗格的自动隐藏幻灯片模式。
virtual UINT GetAHSlideMode() const;
返回值
UINT
,指定窗格的自动隐藏幻灯片模式。 返回值可能是 AFX_AHSM_MOVE
或 AFX_AHSM_STRETCH
,但实现仅使用 AFX_AHSM_MOVE
。
备注
CDockablePane::GetCaptionHeight
返回当前标题栏的高度(以像素为单位)。
virtual int GetCaptionHeight() const;
返回值
标题栏的高度(以像素为单位)。
备注
如果标题栏已通过 CDockablePane::EnableGripper
方法隐藏,或者窗格没有标题栏,则标题栏高度为 0。
CDockablePane::GetDefaultPaneDivider
返回窗格的容器的默认窗格分隔符。
CPaneDivider* GetDefaultPaneDivider() const;
返回值
如果可停靠的窗格停靠到主框架窗口,则为有效的 CPaneDivider
对象;如果可停靠的窗格未停靠或处于浮动状态,则为 NULL
。
注解
有关窗格分隔符的详细信息,请参阅 CPaneDivider
类。
CDockablePane::GetDockingStatus
确定基于提供的指针位置停靠窗格的功能。
virtual AFX_CS_STATUS GetDockingStatus(
CPoint pt,
int nSensitivity);
参数
pt
[in] 指针在屏幕坐标中的位置。
nSensitivity
[in] 启用停靠时指针必须距离矩形边缘的距离(以像素为单位)。
返回值
以下状态值之一:
AFX_CS_STATUS 值 |
含义 |
---|---|
CS_NOTHING |
指针不在停靠站点上。 框架不会停靠窗格。 |
CS_DOCK_IMMEDIATELY |
在即时模式下,指针位于停靠站点上(窗格使用 DT_IMMEDIATE 停靠模式)。 框架会立即停靠窗格。 |
CS_DELAY_DOCK |
指针位于一个是另一个停靠窗格或主框架边缘的停靠站点上。 框架会在经历一段延迟后停靠窗格。 请参阅“注解”部分,详细了解该延迟。 |
CS_DELAY_DOCK_TO_TAB |
指针位于使窗格停靠在选项卡式窗口中的停靠站点上。 当指针位于另一个停靠窗格的标题栏上或选项卡窗格的选项卡区域上时,会发生此情况。 |
注解
框架调用此方法来处理浮动窗格的停靠。
对于使用 DT_IMMEDIATE
停靠模式的浮动工具栏或停靠窗格,框架会延迟停靠命令,使用户能够在停靠发生前将窗口移出父框架的工作区。 延迟的长度以毫秒为单位进行度量,由 CDockingManager::m_nTimeOutBeforeToolBarDock
数据成员控制。 CDockingManager::m_nTimeOutBeforeToolBarDock
的默认值为 200。 此行为模拟 Microsoft Word 2007 的停靠行为。
对于延迟的停靠状态(CS_DELAY_DOCK
和 CS_DELAY_DOCK_TO_TAB
),框架在用户松开鼠标按钮之前不会执行停靠。 如果窗格使用 DT_STANDARD
停靠模式,框架会在投影的停靠位置显示一个矩形。 如果窗格使用 DT_SMART
停靠模式,框架会在投影的停靠位置显示智能停靠标记和半透明矩形。 若要为窗格指定停靠模式,请调用 CBasePane::SetDockingMode
方法。 有关智能停靠的详细信息,请参阅 CDockingManager::GetSmartDockingParams
。
CDockablePane::GetDragSensitivity
返回停靠窗格的拖动敏感度。
static const CSize& GetDragSensitivity();
返回值
一个 CSize
对象,其中包含以拖动点为中心的矩形的宽度和高度(以像素为单位)。 在鼠标指针在此矩形外部移动之前,拖动操作不会开始。
CDockablePane::GetLastPercentInPaneContainer
检索窗格在其容器中占用的空间百分比(CPaneContainer
类)。
int GetLastPercentInPaneContainer() const;
返回值
一个 int
,指定窗格在其容器中占用的空间百分比。
备注
当容器调整其布局时,将使用此方法。
CDockablePane::GetTabArea
检索窗格的选项卡区域。
virtual void GetTabArea(
CRect& rectTabAreaTop,
CRect& rectTabAreaBottom) const;
参数
rectTabAreaTop
[in] 如果选项卡位于窗格顶部,GetTabArea
会用选项卡区域填充此变量。 如果选项卡位于窗格底部,则会使用空矩形填充此变量。
rectTabAreaBottom
[in] 如果选项卡位于窗格底部,GetTabArea
会用选项卡区域填充此变量。 如果选项卡位于窗格顶部,则会使用空矩形填充此变量。
备注
此方法仅在派生自 CDockablePane
且具有选项卡的类中使用。 有关详细信息,请参阅 CTabbedPane::GetTabArea
和 CMFCOutlookBar::GetTabArea
。
CDockablePane::GetTabbedPaneRTC
返回当另一个窗格停靠到当前窗格时创建的选项卡式窗口的运行时类信息。
CRuntimeClass* GetTabbedPaneRTC() const;
返回值
可停靠的窗格的运行时类信息。
注解
调用此方法可检索动态创建的选项卡式窗格的运行时类信息。 当用户将一个窗格拖到另一个窗格的标题栏时,或者你调用 CDockablePane::AttachToTabWnd
方法以编程方式从两个可停靠的窗格创建选项卡式窗格时,可能会出现这种情况。
可以通过调用 CDockablePane::SetTabbedPaneRTC
方法来设置运行时类信息。
CDockablePane::HasAutoHideMode
指定是否可以将停靠窗格切换到自动隐藏模式。
virtual BOOL HasAutoHideMode() const;
返回值
如果可停靠的窗格可以切换到自动隐藏模式,则为 TRUE
;否则为 FALSE
。
注解
在派生类中重写此方法,以禁用特定的可停靠的窗格的自动隐藏模式。
CDockablePane::HitTest
指定用户在窗格中单击鼠标时的位置。
virtual int HitTest(
CPoint point,
BOOL bDetectCaption = FALSE);
参数
point
[in] 指定要测试的点。
bDetectCaption
[in] 如果当点位于窗格的标题栏上时应返回 HTCAPTION
,则为 TRUE
;否则为 FALSE
。
返回值
以下值之一:
HTNOWHERE
:如果point
不在可停靠的窗格中。HTCLIENT
:如果point
在可停靠的窗格的工作区中。HTCAPTION
:如果point
在可停靠的窗格的标题区中。AFX_HTCLOSE
:如果point
在关闭按钮上。HTMAXBUTTON
:如果point
在固定按钮上。
CDockablePane::IsAutohideAllEnabled
指示是否可以将停靠窗格和容器中的所有其他窗格切换到自动隐藏模式。
virtual BOOL IsAutohideAllEnabled() const;
返回值
如果可以将可停靠的窗格和容器中的所有其他窗格切换到自动隐藏模式,则为 TRUE
;否则为 FALSE
。
注解
用户通过在按住 Ctrl 键的同时单击停靠固定按钮来启用自动隐藏模式
若要启用或禁用此行为,请调用 CDockablePane::EnableAutohideAll
方法。
CDockablePane::IsAutoHideMode
确定窗格是否处于自动隐藏模式。
virtual BOOL IsAutoHideMode() const;
返回值
如果可停靠的窗格处于自动隐藏模式,则为 TRUE
;否则为 FALSE
。
CDockablePane::IsDocked
确定当前窗格是否已停靠。
virtual BOOL IsDocked() const;
返回值
如果可停靠的窗格不属于微型框窗口,或者它浮动在具有另一个窗格的微型框窗口中,则为 TRUE
。 如果窗格是微型框窗口的子级,并且没有属于此微型框窗口的其他窗格,则为 FALSE
。
备注
若要确定窗格是否停靠到主框架窗口,请调用 CDockablePane::GetDefaultPaneDivider
。 如果方法返回非 NULL
指针,则窗格停靠在主框架窗口中。
CDockablePane::IsHideInAutoHideMode
在通过调用 CDockablePane::ShowPane
来显示(或隐藏)窗格的情况下,确定处于自动隐藏模式的窗格的行为。
virtual BOOL IsHideInAutoHideMode() const;
返回值
如果在自动隐藏模式下应隐藏可停靠的窗格,则为 TRUE
;否则为 FALSE
。
备注
当可停靠的窗格处于自动隐藏模式时,它在你调用 ShowPane
来隐藏或显示窗格时的行为方式会有所不同。 此行为由静态成员 CDockablePane::m_bHideInAutoHideMode
控制。 如果此成员是 TRUE
,则可停靠的窗格及其相关的自动隐藏工具栏或自动隐藏按钮会在你调用 ShowPane
时被隐藏或显示。 否则,可停靠的窗格会被激活或停用,其相关的自动隐藏工具栏或自动隐藏按钮将始终可见。
在派生类中重写此方法以更改各个窗格的默认行为。
m_bHideInAutoHideMode
的默认值为 FALSE
。
CDockablePane::IsInFloatingMultiPaneFrameWnd
指定窗格是否位于多窗格框架窗口中 (CMultiPaneFrameWnd Class
)。
virtual BOOL IsInFloatingMultiPaneFrameWnd() const;
返回值
如果窗格位于多窗格框架窗口中,则为 TRUE
;否则为 FALSE
。
注解
CDockablePane::IsResizable
指定窗格是否可重设大小。
virtual BOOL IsResizable() const;
返回值
如果窗格可重设大小,则为 TRUE
;否则为 FALSE
。
备注
默认情况下,可停靠的窗格可重设大小。 若要防止重设大小,请重写派生类中的此方法并返回 FALSE
。 请注意,在 CPane::DockPane
中,值为 FALSE
会导致 ASSERT
失败。 改用 CDockingManager::AddPane
可将窗格停靠在父框架中。
无法重设大小的窗格既不能浮动,也不能进入自动隐藏模式,并且始终位于父框架的外缘。
CDockablePane::IsTabLocationBottom
指定选项卡位于窗格的顶部还是底部。
virtual BOOL IsTabLocationBottom() const;
返回值
如果选项卡位于窗格底部,则为 TRUE
;如果选项卡位于窗格顶部,则为 FALSE
。
备注
有关详细信息,请参阅 CTabbedPane::IsTabLocationBottom
。
CDockablePane::IsTracked
指定用户是否在移动窗格。
BOOL IsTracked() const;
返回值
如果在移动窗格,则为 TRUE
;否则为 FALSE
。
CDockablePane::IsVisible
确定当前窗格是否可见。
virtual BOOL IsVisible() const;
返回值
如果可停靠的窗格可见,则为 TRUE
;否则为 FALSE
。
备注
调用此方法可确定可停靠的窗格是否可见。 可以使用此方法,而不是调用 CWnd::IsWindowVisible
或针对 WS_VISIBLE
样式进行测试。 返回的可见性状态取决于自动隐藏模式是已禁用还是已启用,以及取决于 CDockablePane::IsHideInAutoHideMode
属性的值。
如果可停靠的窗格处于自动隐藏模式,并且 IsHideInAutoHideMode
返回 FALSE
,则可见性状态始终为 FALSE
。
如果可停靠的窗格处于自动隐藏模式,并且 IsHideInAutoHideMode
返回 TRUE
,则可见性状态取决于相关的自动隐藏工具栏的可见性状态。
如果可停靠的窗格不在自动隐藏模式下,则可见性状态由 CBasePane::IsVisible
方法确定。
## CDockablePane::LoadState
仅供内部使用。 有关更多详细信息,请参阅 Visual Studio 安装的 mfc
文件夹中的源代码。 例如 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\atlmfc\src\mfc
。
virtual BOOL LoadState(
LPCTSTR lpszProfileName = NULL,
int nIndex = -1,
UINT uiID = (UINT) -1
);
CDockablePane::m_bDisableAnimation
指定是否禁用可停靠的窗格的自动隐藏动画。
AFX_IMPORT_DATA static BOOL m_bDisableAnimation;
CDockablePane::m_bHideInAutoHideMode
确定窗格在处于自动隐藏模式时的行为。
AFX_IMPORT_DATA static BOOL m_bHideInAutoHideMode;
备注
此值影响应用程序中的所有停靠窗格。
如果将此成员设置为 TRUE
,则当你调用 CDockablePane::ShowPane
时,可停靠的窗格处于隐藏状态,或与其相关的自动隐藏工具栏和按钮一起显示。
如果将此成员设置为 FALSE
,则当你调用 CDockablePane::ShowPane
时,会激活或停用可停靠的窗格。
CDockablePane::m_nSlideSteps
指定窗格在处于自动隐藏模式时的动画速度。
AFX_IMPORT_DATA static int m_nSlideSteps;
注解
如需较快的动画效果,请减小此值。 如需较慢的动画效果,请增加此值。
CDockablePane::OnAfterChangeParent
有关更多详细信息,请参阅 Visual Studio 安装的 mfc
文件夹中的源代码。 例如 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\atlmfc\src\mfc
。
virtual void OnAfterChangeParent(CWnd* pWndOldParent);
参数
[in] pWndOldParent
\
备注
CDockablePane::OnAfterDockFromMiniFrame
当浮动停靠栏停靠在框架窗口中时由框架调用。
virtual void OnAfterDockFromMiniFrame();
注解
默认情况下,此方法不执行任何操作。
CDockablePane::OnBeforeChangeParent
框架在更改窗格的父级之前调用此方法。
virtual void OnBeforeChangeParent(
CWnd* pWndNewParent,
BOOL bDelay = FALSE);
参数
pWndNewParent
[in] 指向新的父窗口的指针。
bDelay
[in] BOOL,指定是否在取消停靠窗格时推迟停靠布局的重新计算。 有关详细信息,请参阅 CDockablePane::UndockPane
。
备注
如果窗格已停靠,但新父级不允许停靠,则此方法会取消停靠窗格。
如果窗格在转换为选项卡式文档,此方法将存储其最新停靠位置。 框架使用最新停靠位置在窗格转换回已停靠状态时还原窗格的位置。
CDockablePane::OnBeforeFloat
框架在窗格转换为浮动状态之前调用此方法。
virtual BOOL OnBeforeFloat(
CRect& rectFloat,
AFX_DOCK_METHOD dockMethod);
参数
rectFloat
[in] 指定窗格在处于浮动状态时的位置和大小。
dockMethod
[in] 指定停靠方法。 有关可能值的列表,请参阅 CPane::DockPane
。
返回值
如果可以浮动窗格,则为 TRUE
;否则为 FALSE
。
备注
此方法在窗格即将浮动时由框架调用。 如果要在窗格浮动之前进行任何处理,则可在派生类中重写此方法。
CDockablePane::OnPressButtons
在用户按下除 AFX_HTCLOSE
和 AFX_HTMAXBUTTON
按钮之外的标题按钮时调用。
virtual void OnPressButtons(UINT nHit);
参数
nHit
[in] 不使用此参数。
备注
如果将自定义按钮添加到可停靠的窗格的标题栏,请重写此方法以在用户按下按钮时接收通知。
CDockablePane::OnSlide
由框架调用,可在窗格处于自动隐藏模式时对窗格进行动画处理。
virtual void OnSlide(BOOL bSlideOut);
参数
bSlideOut
[in] TRUE
可显示窗格;FALSE
可隐藏窗格。
注解
在派生类中重写此方法可实现自定义自动隐藏效果。
CDockablePane::RemoveFromDefaultPaneDividier
框架会在窗格取消停靠时调用此方法。
void RemoveFromDefaultPaneDividier();
备注
此方法将默认窗格分隔符设置为 NULL
,并将窗格从其容器中删除。
CDockablePane::ReplacePane
将窗格替换为指定的窗格。
BOOL ReplacePane(
CDockablePane* pBarToReplaceWith,
AFX_DOCK_METHOD dockMethod,
BOOL bRegisterWithFrame = FALSE);
参数
pBarToReplaceWith
[in] 指向可停靠的窗格的指针。
dockMethod
[in] 未使用。
bRegisterWithFrame
[in] 如果为 TRUE
,则会将新窗格注册到旧窗格的父级的停靠管理器。 在由停靠管理器维护的窗格列表中,新窗格将插入到旧窗格的索引中。
返回值
如果替换成功,则为 TRUE
;否则为 FALSE
。
CDockablePane::RestoreDefaultPaneDivider
反序列化窗格时,框架会调用此方法,以还原默认窗格分隔符。
void RestoreDefaultPaneDivider();
注解
还原的默认窗格分隔符会替换当前的默认窗格分隔符(如果存在)。
CDockablePane::SetAutoHideMode
在可见模式和自动隐藏模式之间切换停靠窗格。
virtual CMFCAutoHideBar* SetAutoHideMode(
BOOL bMode,
DWORD dwAlignment,
CMFCAutoHideBar* pCurrAutoHideBar = NULL,
BOOL bUseTimer = TRUE);
参数
bMode
[in] TRUE
可启用自动隐藏模式;FALSE
可启用常规停靠模式。
dwAlignment
[in] 指定要创建的自动隐藏窗格的对齐方式。
pCurrAutoHideBar
[in, out] 指向当前的自动隐藏工具栏的指针。 可以为 NULL
。
bUseTimer
[in] 指定当用户将窗格切换到自动隐藏模式时是使用自动隐藏效果,还是立即隐藏窗格。
返回值
因切换为自动隐藏模式或 NULL
而创建的自动隐藏工具栏。
注解
当用户单击固定按钮以将可停靠的窗格切换到自动隐藏模式或常规停靠模式时,框架将调用此方法。
调用此方法可将可停靠的窗格以编程方式切换为自动隐藏模式。 窗格必须停靠到主框架窗口(CDockablePane::GetDefaultPaneDivider
必须返回指向 CPaneDivider
的有效指针)。
CDockablePane::SetAutoHideParents
设置窗格的自动隐藏按钮和自动隐藏工具栏。
void SetAutoHideParents(
CMFCAutoHideBar* pToolBar,
CMFCAutoHideButton* pBtn);
参数
pToolBar
[in] 指向自动隐藏工具栏的指针。
pBtn
[in] 指向自动隐藏按钮的指针。
CDockablePane::SetLastPercentInPaneContainer
设置窗格在其容器中占用的空间百分比。
void SetLastPercentInPaneContainer(int n);
参数
n
[in] 一个 int
,指定窗格在其容器中占用的空间百分比。
备注
框架会调整窗格以在重新计算布局时使用新值。
CDockablePane::SetRestoredDefaultPaneDivider
设置还原的默认窗格分隔符。
void SetRestoredDefaultPaneDivider(HWND hRestoredSlider);
参数
hRestoredSlider
[in] 窗格分隔符的句柄(滑块)。
备注
反序列化窗格时,将获取还原的默认窗格分隔符。 有关详细信息,请参阅 CDockablePane::RestoreDefaultPaneDivider
。
CDockablePane::SetTabbedPaneRTC
设置当两个窗格停靠在一起时创建的选项卡式窗口的运行时类信息。
void SetTabbedPaneRTC(CRuntimeClass* pRTC);
参数
pRTC
[in] 选项卡式窗格的运行时类信息。
注解
调用此方法可设置动态创建的选项卡式窗格的运行时类信息。 当用户将一个窗格拖到另一个窗格的标题栏时,或者你调用 CDockablePane::AttachToTabWnd
方法以编程方式从两个可停靠的窗格创建选项卡式窗格时,可能会出现这种情况。
根据 CDockablePane::Create
和 CDockablePane::CreateEx
的 dwTabbedStyle
参数设置默认运行时类。 若要自定义新的选项卡式窗格,请从以下类之一派生类:
然后,使用指向运行时类信息的指针调用此方法。
CDockablePane::ShowPane
显示或隐藏窗格。
virtual void ShowPane(
BOOL bShow,
BOOL bDelay,
BOOL bActivate);
参数
bShow
[in] TRUE
可显示窗格;FALSE
可隐藏窗格。
bDelay
[in] TRUE
可延迟停靠布局的调整;FALSE
可立即调整停靠布局。
bActivate
[in] TRUE
可在窗格显示时激活窗格;其他情况为 FALSE
。
注解
在显示或隐藏可停靠的窗格时调用此方法,而不调用 CWnd::ShowWindow
。
CDockablePane::Slide
将处于自动隐藏模式的窗格动画化。
virtual void Slide(
BOOL bSlideOut,
BOOL bUseTimer = TRUE);
参数
bSlideOut
[in] TRUE
可显示窗格;FALSE
可隐藏窗格。
bUseTimer
[in] TRUE
可显示或隐藏具有自动隐藏效果的窗格;FALSE
可立即显示或隐藏窗格。
备注
框架调用此方法可将处于自动隐藏模式的窗格动画化。
此方法使用 CDockablePane::m_nSlideDefaultTimeOut
值来确定幻灯片效果的超时。 超时的默认值为 1。 如果自定义自动隐藏算法,请修改此成员以更改超时。
CDockablePane::ToggleAutoHide
在始终可见模式和自动隐藏模式之间切换窗格。
virtual void ToggleAutoHide();
注解
此方法通过调用 CDockablePane::SetAutoHideMode
切换窗格的自动隐藏模式。
CDockablePane::UndockPane
从主框架窗口或微型框窗口容器中取消停靠窗格。
virtual void UndockPane(BOOL bDelay = FALSE);
参数
bDelay
[in] TRUE
可延迟停靠布局的计算;FALSE
可立即重新计算停靠布局。
注解
调用此方法可从主框架窗口或多微型框窗口容器中取消停靠窗格(一个在单个微型框窗口(包含其他窗格)中浮动的窗格)。
必须先取消停靠窗格,然后才能执行未由 CDockingManager
执行的任何外部操作。 例如,必须先取消停靠窗格,然后才能以编程方式将窗格从一个位置移到另一个位置。
框架在窗格被销毁之前自动取消停靠窗格。