CWnd

提供 Microsoft 基础类库中所有窗口类的基本功能。

语法

class CWnd : public CCmdTarget

成员

公共构造函数

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

公共方法

名称 描述
CWnd::accDoDefaultAction 由框架调用以执行对象的默认操作。
CWnd::accHitTest 由框架调用以检索屏幕上给定点处的子元素或子对象。
CWnd::accLocation 由框架调用以检索指定对象的当前屏幕位置。
CWnd::accNavigate 由框架调用以移到容器内的另一个用户界面元素,如果可能还检索对象。
CWnd::accSelect 由框架调用以修改选定内容或移动指定对象的键盘焦点。
CWnd::AnimateWindow 对关联窗口对象进行动画处理。
CWnd::ArrangeIconicWindows 排列所有最小化(图标)子窗口。
CWnd::Attach 将 Windows 句柄附加到 CWnd 对象。
CWnd::BeginModalState 调用此成员函数以使框架窗口具有模式。
CWnd::BeginPaint 为进行绘制准备好 CWnd
CWnd::BindDefaultProperty 将调用对象的默认简单绑定属性(按照在类型库中进行的标记)绑定到与数据源控件关联的光标。
CWnd::BindProperty 将数据绑定控件上的光标绑定属性绑定到数据源控件,并向 MFC 绑定管理器注册该关系。
CWnd::BringWindowToTop CWnd 置于一堆重叠窗口的顶部。
CWnd::CalcWindowRect 调用以从客户端矩形计算窗口矩形。
CWnd::CancelToolTips 禁用工具提示控件。
CWnd::CenterWindow 使窗口相对于其父级居中。
CWnd::ChangeClipboardChain 从剪贴板查看器链中移除 CWnd
CWnd::CheckDlgButton 将复选标记置于按钮控件旁,或从按钮控件移除复选标记。
CWnd::CheckRadioButton 选中指定单选按钮,并从指定按钮组中的所有其他单选按钮移除复选标记。
CWnd::ChildWindowFromPoint 确定哪些(如果有)子窗口包含指定点。
CWnd::ClientToScreen 将显示中的给定点或矩形的客户端坐标转换为屏幕坐标。
CWnd::CloseWindow 最小化窗口。
CWnd::ContinueModal 继续窗口的模式状态。
CWnd::Create 创建并初始化与 CWnd 对象关联的子窗口。
CWnd::CreateAccessibleProxy 为指定对象创建 Active Accessibility 代理服务器。
CWnd::CreateCaret 为系统插入符号创建新形状并获取插入符号的所有权。
CWnd::CreateControl 创建在 MFC 程序中由 CWnd 对象表示的 ActiveX 控件。
CWnd::CreateEx 创建 Windows 重叠、弹出或子窗口,并将它附加到 CWnd 对象。
CWnd::CreateGrayCaret 为系统插入符号创建灰色块并获取插入符号的所有权。
CWnd::CreateSolidCaret 为系统插入符号创建实心块并获取插入符号的所有权。
CWnd::DeleteTempMap CWinApp 空闲时间处理程序自动调用,删除任何由 FromHandle 创建的临时 CWnd 对象。
CWnd::DestroyWindow 销毁附加的 Windows 窗口。
CWnd::Detach CWnd 对象分离 Windows 句柄并返回该句柄。
CWnd::DlgDirList 使用文件或目录列表填充列表框。
CWnd::DlgDirListComboBox 使用文件或目录列表填充组合框的列表框。
CWnd::DlgDirSelect 从列表框检索当前所选内容。
CWnd::DlgDirSelectComboBox 从组合框的列表框检索当前所选内容。
CWnd::DragAcceptFiles 指示窗口将接受拖动的文件。
CWnd::DragDetect 捕获鼠标并跟踪其移动,直到用户释放左键、按 ESC 键或将鼠标移动到围绕指定点的拖动矩形外部。
CWnd::DrawAnimatedRects 绘制透明框架矩形并对它进行动画处理,以指示图标的打开或是窗口的最小化或最大化。
CWnd::DrawCaption 绘制标题。
CWnd::DrawMenuBar 重绘菜单栏。
CWnd::EnableActiveAccessibility 启用用户定义的 Active Accessibility 函数。
CWnd::EnableDynamicLayout 使子窗口的位置和大小可以在用户调整窗口大小时动态调整。
CWnd::EnableD2DSupport 启用或禁用窗口 D2D 支持。 在初始化主窗口之前调用此方法。
CWnd::EnableScrollBar 启用或禁用滚动条的一个或两个箭头。
CWnd::EnableScrollBarCtrl 启用或禁用同级滚动条控件。
CWnd::EnableToolTips 启用工具提示控件。
CWnd::EnableTrackingToolTips 在跟踪模式下启用工具提示控件。
CWnd::EnableWindow 启用或禁用鼠标和键盘输入。
CWnd::EndModalLoop 启用窗口的模式状态。
CWnd::EndModalState 调用此成员函数以将框架窗口从有模式更改为无模式。
CWnd::EndPaint 标记绘制的末尾。
CWnd::ExecuteDlgInit 启动对话框资源。
CWnd::FilterToolTipMessage 检索与对话框中的控件关联的标题或文本。
CWnd::FindWindow 返回由其窗口名和窗口类标识的窗口的句柄。
CWnd::FindWindowEx 返回由其窗口名和窗口类标识的窗口的句柄。
CWnd::FlashWindow 使窗口闪烁一次。
CWnd::FlashWindowEx 使具有其他功能的窗口闪烁。
CWnd::FromHandle 在提供了窗口的句柄时返回指向 CWnd 对象的指针。 如果 CWnd 对象未附加到该句柄,则会创建并附加一个临时 CWnd 对象。
CWnd::FromHandlePermanent 在提供了窗口的句柄时返回指向 CWnd 对象的指针。
CWnd::get_accChild 由框架调用以检索指定子级的 IDispatch 接口地址。
CWnd::get_accChildCount 由框架调用调用以检索属于该对象的子级的个数。
CWnd::get_accDefaultAction 由框架调用以检索描述对象默认操作的字符串。
CWnd::get_accDescription 由框架调用以检索描述指定对象的可视外观的字符串。
CWnd::get_accFocus 由框架调用以检索具有键盘焦点的对象。
CWnd::get_accHelp 由框架调用以检索对象的 Help 属性字符串
CWnd::get_accHelpTopic 由框架调用以检索与指定对象关联的 WinHelp 文件的完整路径以及该文件内相应主题的标识符。
CWnd::get_accKeyboardShortcut 由框架调用以检索指定对象的快捷键或访问键。
CWnd::get_accName 由框架调用以检索指定对象的名称。
CWnd::get_accParent 由框架调用以检索对象父级的 IDispatch 接口。
CWnd::get_accRole 由框架调用以检索描述指定对象的角色的信息。
CWnd::get_accSelection 由框架调用以检索该对象的选定子级。
CWnd::get_accState 由框架调用以检索指定对象的当前状态。
CWnd::get_accValue 由框架调用以检索指定对象的值。
CWnd::GetActiveWindow 检索活动窗口。
CWnd::GetAncestor 检索指定窗口的上级先窗口对象。
CWnd::GetCapture 检索具有鼠标捕获的 CWnd
CWnd::GetCaretPos 检索插入符号的当前位置的客户端坐标。
CWnd::GetCheckedRadioButton 返回按钮中当前选中的单选按钮的 ID。
CWnd::GetClientRect 获取 CWnd 工作区的尺寸。
CWnd::GetClipboardOwner 检索指向剪贴板当前所有者的指针。
CWnd::GetClipboardViewer 检索指向剪贴板查看器链中第一个窗口的指针。
CWnd::GetControlUnknown 检索指向未知 ActiveX 控件的指针。
CWnd::GetDC 检索工作区的显示上下文。
CWnd::GetDCEx 检索工作区的显示上下文,并在绘制启用剪辑。
CWnd::GetDCRenderTarget 检索 CWnd 窗口的设备上下文 (DC) 呈现目标。
CWnd::GetDescendantWindow 搜索所有子代窗口,并返回具有指定 ID 的窗口。
CWnd::GetDesktopWindow 检索 Windows 桌面窗口。
CWnd::GetDlgCtrlID 如果 CWnd 是子窗口,则调用此函数会返回其 ID 值。
CWnd::GetDlgItem 从指定对话框中检索具有指定 ID 的控件。
CWnd::GetDlgItemInt 将给定对话框中控件的文本转换为整数值。
CWnd::GetDlgItemText 检索与控件关联的标题或文本。
CWnd::GetDSCCursor 检索指向由数据源控件的 DataSource、UserName、Password 和 SQL 属性定义的基础光标的指针。
CWnd::GetDynamicLayout 检索指向动态布局管理器对象的指针。
CWnd::GetExStyle 返回窗口的扩展样式。
CWnd::GetFocus 检索当前具有输入焦点的 CWnd
CWnd::GetFont 检索当前字体。
CWnd::GetForegroundWindow 返回指向前台窗口(用户当前正在使用的顶级窗口)的指针。
CWnd::GetIcon 检索图标的句柄。
CWnd::GetLastActivePopup 确定最近处于活动状态的由 CWnd 拥有的弹出窗口。
CWnd::GetLayeredWindowAttributes 检索分层窗口的不透明度和透明度颜色键。
CWnd::GetMenu 检索指向指定菜单的指针。
CWnd::GetNextDlgGroupItem 在控件组中搜索的下一个(或上一个)控件。
CWnd::GetNextDlgTabItem 检索位于指定控件之后(或之前)的具有 WS_TABSTOP 样式的第一个控件。
CWnd::GetNextWindow 返回窗口管理器列表中的下一个(或上一个)窗口。
CWnd::GetOleControlSite 检索指定 ActiveX 控件的自定义站点。
CWnd::GetOpenClipboardWindow 检索指向当前打开剪贴板的窗口的指针。
CWnd::GetOwner 检索指向 CWnd 所有者的指针。
CWnd::GetParent 检索 CWnd 的父窗口(如果有)。
CWnd::GetParentFrame 检索 CWnd 对象的父框架窗口。
CWnd::GetParentOwner 返回指向子窗口的父窗口的指针。
CWnd::GetProperty 检索 ActiveX 控件属性。
CWnd::GetRenderTarget 获取与此窗口相关联的呈现目标。
CWnd::GetSafeHwnd 返回 m_hWnd;如果 this 指针为 NULL,则返回 NULL。
CWnd::GetSafeOwner 检索给定窗口的安全所有者。
CWnd::GetScrollBarCtrl 返回同级滚动条控件。
CWnd::GetScrollBarInfo 检索有关指定滚动条的信息。
CWnd::GetScrollInfo 检索 SCROLLINFO 结构维护的有关滚动条的信息。
CWnd::GetScrollLimit 检索滚动条的限制。
CWnd::GetScrollPos 检索滚动框的当前位置。
CWnd::GetScrollRange 复制给定滚动条的当前最小和最大滚动条位置。
CWnd::GetStyle 返回当前窗口样式。
CWnd::GetSystemMenu 允许应用程序访问控件菜单以进行复制和修改。
CWnd::GetTitleBarInfo 检索有关指定标题栏的信息。
CWnd::GetTopLevelFrame 检索窗口的顶级框架窗口。
CWnd::GetTopLevelOwner 检索顶级窗口。
CWnd::GetTopLevelParent 检索窗口的顶级父级。
CWnd::GetTopWindow 返回属于 CWnd 的第一个子窗口。
CWnd::GetUpdateRect 检索完全包围 CWnd 更新区域的最小矩形的坐标。
CWnd::GetUpdateRgn 检索 CWnd 更新区域。
CWnd::GetWindow 返回与此窗口具有指定关系的窗口。
CWnd::GetWindowContextHelpId 检索帮助上下文标识符。
CWnd::GetWindowDC 检索整个窗口的显示上下文,包括标题栏、菜单和滚动条。
CWnd::GetWindowedChildCount 返回关联子窗口的数量。
CWnd::GetWindowInfo 返回有关窗口的信息。
CWnd::GetWindowlessChildCount 返回关联无窗口子窗口的数量。
CWnd::GetWindowPlacement 检索窗口的显示状态以及正常(已还原)、最小化和最大化位置。
CWnd::GetWindowRect 获取 CWnd 的屏幕坐标。
CWnd::GetWindowRgn 检索窗口的窗口区域的副本。
CWnd::GetWindowText 返回窗口文本或标题(如果有)。
CWnd::GetWindowTextLength 返回窗口文本或标题的长度。
CWnd::HideCaret 通过从显示屏幕中移除来隐藏插入符号。
CWnd::HiliteMenuItem 突出显示顶级(菜单栏)菜单项或从顶级(菜单栏)菜单项移除突出显示。
CWnd::HtmlHelp 调用以启动 HTMLHelp 应用程序。
CWnd::Invalidate 使整个工作区无效。
CWnd::InvalidateRect 通过将给定矩形添加到当前更新区域,使该矩形内的工作区无效。
CWnd::InvalidateRgn 通过将给定区域添加到当前更新区域,使该区域内的工作区无效。
CWnd::InvokeHelper 调用 ActiveX 控件方法或属性。
CWnd::IsChild 指示 CWnd 是否为指定窗口的子窗口或其他直接子代。
CWnd::IsD2DSupportEnabled 确定是否启用 D2D 支持。
CWnd::IsDialogMessage 确定给定消息是否用于无模式对话框,如果是,则处理它。
CWnd::IsDlgButtonChecked 确定是否选中按钮控件。
CWnd::IsDynamicLayoutEnabled 确定是否在此窗口上启用动态布局。 如果启用动态布局,则子窗口的位置和大小可以在用户调整父窗口大小时进行更改。
CWnd::IsIconic 确定 CWnd 是否进行最小化(图标化)。
CWnd::IsTouchWindow 指定 CWnd 是否具有触摸支持。
CWnd::IsWindowEnabled 确定是否针对鼠标和键盘输入启用窗口。
CWnd::IsWindowVisible 确定窗口是否可见。
CWnd::IsZoomed 确定 CWnd 是否进行最大化。
CWnd::KillTimer 终止系统计时器。
CWnd::LockWindowUpdate 在给定窗口中禁用或重新启用绘制。
CWnd::MapWindowPoints 将一组点从 CWnd 的坐标空间转换(映射)到另一个窗口的坐标空间。
CWnd::MessageBox 创建并显示包含应用程序提供的消息和标题的窗口。
CWnd::ModifyStyle 修改当前窗口样式。
CWnd::ModifyStyleEx 修改窗口的扩展样式。
CWnd::MoveWindow 更改 CWnd 的位置和尺寸。
CWnd::NotifyWinEvent 向系统发出信号,指出发生了预定义事件。
CWnd::OnAmbientProperty 实现环境属性值。
CWnd::OnDrawIconicThumbnailOrLivePreview 由框架在需要获取要在 Windows 7 选项卡缩略图上或客户端上(进行应用程序速览)显示的位图时进行调用。
CWnd::OnHelp 处理应用程序中的 F1 帮助(使用当前上下文)。
CWnd::OnHelpFinder 处理 ID_HELP_FINDERID_DEFAULT_HELP 命令。
CWnd::OnHelpIndex 处理 ID_HELP_INDEX 命令,并提供默认帮助主题。
CWnd::OnHelpUsing 处理 ID_HELP_USING 命令。
CWnd::OnToolHitTest 确定点是否在指定工具的边框内并检索有关此工具的信息。
CWnd::OpenClipboard 打开剪贴板。 在调用 Windows CloseClipboard 函数之前,其他应用程序将无法修改剪贴板。
CWnd::PaintWindowlessControls 在控件容器上绘制无窗口控件。
CWnd::PostMessage 将消息置于应用程序队列中,然后返回而不等待窗口处理该消息。
CWnd::PreCreateWindow 在创建附加到此 CWnd 对象的 Windows 窗口之前调用。
CWnd::PreSubclassWindow 允许在调用 SubclassWindow 之前创建其他必要的子类。
CWnd::PreTranslateMessage CWinApp 用于在窗口消息调度到 TranslateMessageDispatchMessage Windows 函数之前筛选它们。
CWnd::Print 在指定设备上下文中绘制当前窗口。
CWnd::PrintClient 在指定设备上下文(通常是打印机设备上下文)中绘制任何窗口。
CWnd::PrintWindow 将可视窗口复制到指定设备上下文(通常是打印机设备上下文)。
CWnd::RedrawWindow 更新工作区中的指定矩形或区域。
CWnd::RegisterTouchWindow 注册/注销窗口 Windows 触摸支持。
CWnd::ReleaseDC 释放客户端和窗口设备上下文,从而使它们可供其他应用程序使用。
CWnd::RepositionBars 在工作区中重新定位控件条。
CWnd::RunModalLoop 为处于模式状态的窗口检索、转换或调度消息。
CWnd::ScreenToClient 将显示中的给定点或矩形的屏幕坐标转换为客户端坐标。
CWnd::ScrollWindow 滚动工作区的内容。
CWnd::ScrollWindowEx 滚动工作区的内容。 类似于 ScrollWindow,不过具有附加功能。
CWnd::SendChildNotifyLastMsg 从父窗口向子窗口提供通知消息,以便子窗口可以处理任务。
CWnd::SendDlgItemMessage 将消息发送到指定控件。
CWnd::SendMessage 将消息发送到 CWnd 对象并且不返回,直到它处理了消息。
CWnd::SendMessageToDescendants 将消息发送到窗口的所有子代窗口。
CWnd::SendNotifyMessage 将指定消息发送到窗口并尽快返回,具体取决于调用线程是否创建了窗口。
CWnd::SetActiveWindow 激活窗口。
CWnd::SetCapture 使所有后续鼠标输入都发送到 CWnd
CWnd::SetCaretPos 将插入符号移动到指定位置。
CWnd::SetClipboardViewer CWnd 添加到每当剪贴板内容发生更改时便会收到通知的窗口的链。
CWnd::SetDlgCtrlID 为窗口(可以是任何子窗口,而不仅是对话框中的控件)设置窗口或控件 ID。
CWnd::SetDlgItemInt 将控件的文本设置为表示整数值的字符串。
CWnd::SetDlgItemText 在指定对话框中设置控件的标题或文本。
CWnd::SetFocus 声明输入焦点。
CWnd::SetFont 设置当前字体。
CWnd::SetForegroundWindow 将创建窗口的线程置于前台,并激活窗口。
CWnd::SetIcon 设置特定图标的句柄。
CWnd::SetLayeredWindowAttributes 设置分层窗口的不透明度和透明度颜色键。
CWnd::SetMenu 将菜单设置为指定菜单。
CWnd::SetOwner 更改 CWnd 的所有者。
CWnd::SetParent 更改父窗口。
CWnd::SetProperty 设置 ActiveX 控件属性。
CWnd::SetRedraw 允许重绘 CWnd 中的更改,或阻止重绘更改。
CWnd::SetScrollInfo 设置有关滚动条的信息。
CWnd::SetScrollPos 设置滚动框的当前位置,并且(如果指定)重绘滚动条以反映新位置。
CWnd::SetScrollRange 设置给定滚动条的最小和最大位置值。
CWnd::SetTimer 安装在触发时发送 WM_TIMER 消息的系统计时器。
CWnd::SetWindowContextHelpId 设置帮助上下文标识符。
CWnd::SetWindowPlacement 设置窗口的显示状态以及正常(已还原)、最小化和最大化位置。
CWnd::SetWindowPos 更改子窗口、弹出窗口和顶级窗口的大小、位置和的顺序。
CWnd::SetWindowRgn 设置窗口的区域。
CWnd::SetWindowText 将窗口文本或标题(如果有)设置为指定文本。
CWnd::ShowCaret 在显示上插入符号的当前位置处显示插入符号。 显示之后,插入符号开始自动闪烁。
CWnd::ShowOwnedPopups 显示或隐藏窗口所拥有的所有弹出窗口。
CWnd::ShowScrollBar 显示或隐藏滚动条。
CWnd::ShowWindow 显示或隐藏窗口。
CWnd::SubclassDlgItem 将 Windows 控件附加到 CWnd 对象,并使它通过 CWnd 的消息映射来路由消息。
CWnd::SubclassWindow 将窗口附加到 CWnd 对象,并使它通过 CWnd 的消息映射来路由消息。
CWnd::UnlockWindowUpdate 解锁使用 CWnd::LockWindowUpdate 锁定的窗口。
CWnd::UnsubclassWindow CWnd 对象分离窗口
CWnd::UpdateData 从对话框初始化或检索数据。
CWnd::UpdateDialogControls 调用以更新对话框按钮和其他控件的状态。
CWnd::UpdateLayeredWindow 更新分层窗口的位置、大小、形状、内容和透明度。
CWnd::UpdateWindow 更新工作区。
CWnd::ValidateRect 通过从当前更新区域移除给定矩形,来验证该矩形内的工作区。
CWnd::ValidateRgn 通过从当前更新区域移除给定区域,来验证该区域内的工作区。
CWnd::WindowFromPoint 标识包含给定点的窗口。
CWnd::WinHelp 调用以启动 WinHelp 应用程序。

受保护方法

名称 描述
CWnd::Default 调用默认窗口过程,该过程为应用程序不处理的任何窗口消息提供默认处理。
CWnd::DefWindowProc 调用默认窗口过程,该过程为应用程序不处理的任何窗口消息提供默认处理。
CWnd::DoDataExchange 用于对话框数据交换和验证。 由 UpdateData 调用。
CWnd::GetCurrentMessage 返回指向此窗口当前正在处理的消息的指针。 只应在处于 OnMessage 消息处理程序成员函数中时才进行调用。
CWnd::InitDynamicLayout 由框架调用以初始化窗口的动态布局。
CWnd::LoadDynamicLayoutResource 从资源文件加载动态布局信息。
CWnd::OnActivate 当正在激活或停用 CWnd 时调用。
CWnd::OnActivateApp 要激活或停用应用程序时调用。
CWnd::OnAppCommand 当用户生成应用程序命令事件时调用。
CWnd::OnAskCbFormatName 由剪贴板查看器应用程序在剪贴板所有者显示剪贴板内容时调用。
CWnd::OnCancelMode 调用以允许 CWnd 取消任何内部模式(如鼠标捕获)。
CWnd::OnCaptureChanged 将消息发送到要失去鼠标捕获的窗口。
CWnd::OnChangeCbChain 通知正在从链中移除指定窗口。
CWnd::OnChangeUIState 在应更改用户界面 (UI) 状态时调用。
CWnd::OnChar 当击键转换为非系统字符时调用。
CWnd::OnCharToItem 由具有 LBS_WANTKEYBOARDINPUT 样式的子列表框调用以响应 WM_CHAR 消息。
CWnd::OnChildActivate 每当 CWnd 大小或位置更改或 CWnd 激活时,针对多文档界面 (MDI) 子窗口进行调用。
CWnd::OnChildNotify 由父窗口调用以使通知控件有机会响应控件通知。
CWnd::OnClipboardUpdate 在剪贴板内容已更改时调用。
CWnd::OnClose 作为指示 CWnd 应关闭的信号进行调用。
CWnd::OnColorizationColorChanged 在非工作区的呈现策略已更改时调用。
CWnd::OnCommand 当用户选择命令时调用。
CWnd::OnCompacting 当 Windows 检测到系统内存不足时调用。
CWnd::OnCompareItem 调用以确定新项在子所有者描述组合框或列表框中的相对位置。
CWnd::OnCompositionChanged 在桌面窗口管理器 (DWM) 组合已启用或已禁用时针对所有顶级窗口进行调用。
CWnd::OnContextMenu 当用户窗口中单击鼠标右键时调用。
CWnd::OnCopyData 将数据从一个应用程序复制到另一个应用程序。
CWnd::OnCreate 在窗口创建过程中调用。
CWnd::OnCtlColor 如果 CWnd 在要绘制控件时是控件的父级,则进行调用。
CWnd::OnDeadChar 当击键转换为非系统语音符号字符(如重音字符)时调用。
CWnd::OnDeleteItem 当销毁所有者描述子列表框或组合框时,或是当从控件中移除项时调用。
CWnd::OnDestroy 当销毁 CWnd 时调用。
CWnd::OnDestroyClipboard 当通过调用 Windows EmptyClipboard 函数来清空剪贴板时调用。
CWnd::OnDeviceChange 向应用程序或设备驱动程序通知设备或计算机的硬件配置已更改。
CWnd::OnDevModeChange 当用户更改设备模式设置时针对所有顶级窗口进行调用。
CWnd::OnDrawClipboard 当剪贴板内容已更改时调用。
CWnd::OnDrawItem 当需要绘制所有者描述子按钮控件、组合框控件、列表框控件或菜单的可视方面时调用。
CWnd::OnDropFiles 当用户在已将自己注册为拖放文件接收者的窗口上方释放鼠标左键时调用。
CWnd::OnEnable 当启用或禁用 CWnd 时调用。
CWnd::OnEndSession 当会话结束时调用。
CWnd::OnEnterIdle 调用以向应用程序的主窗口过程通知模式对话框或菜单正在进入空闲状态。
CWnd::OnEnterMenuLoop 当进入了菜单模式循环时调用。
CWnd::OnEnterSizeMove 在受影响的窗口进入移动或大小调整模式循环之后调用。
CWnd::OnEraseBkgnd 当窗口背景需要擦除时调用。
CWnd::OnExitMenuLoop 当退出了菜单模式循环时调用。
CWnd::OnExitSizeMove 在受影响的窗口退出移动或大小调整模式循环之后调用。
CWnd::OnFontChange 当字体资源池更改时调用。
CWnd::OnGetDlgCode 针对控件进行调用,以便控件可以自己处理箭头键和 TAB 键输入。
CWnd::OnGetMinMaxInfo 每当 Windows 需要知道最大化位置或尺寸或是最小或最大跟踪大小时调用。
CWnd::OnHelpInfo 当用户按 F1 键时,由框架调用。
CWnd::OnHotKey 当用户按系统范围热键时调用。
CWnd::OnHScroll 当用户单击 CWnd 的水平滚动条时调用。
CWnd::OnHScrollClipboard 当剪贴板所有者应滚动剪贴板图像、使相应部分失效以及更新滚动条值时调用。
CWnd::OnIconEraseBkgnd CWnd 已最小化(图标化)并且必须在绘制图标之前填充图标背景时调用。
CWnd::OnInitMenu 当菜单要成为活动状态时调用。
CWnd::OnInitMenuPopup 当弹出菜单要成为活动状态时调用。
CWnd::OnInputDeviceChange 当在系统中添加或移除 I/O 设备时调用。
CWnd::OnInputLangChange 在应用程序的输入语言已更改之后调用。
CWnd::OnInputLangChangeRequest 当用户选择新输入语言时调用。
CWnd::OnKeyDown 当按下非系统键时调用。
CWnd::OnKeyUp 当释放非系统键时调用。
CWnd::OnKillFocus 恰好在 CWnd 失去输入焦点之前调用。
CWnd::OnLButtonDblClk 当用户双击鼠标左键时调用。
CWnd::OnLButtonDown 当用户按下鼠标左键时调用。
CWnd::OnLButtonUp 当用户释放鼠标左键时调用。
CWnd::OnMButtonDblClk 当用户双击鼠标中键时调用。
CWnd::OnMButtonDown 当用户按下鼠标中键时调用。
CWnd::OnMButtonUp 当用户释放鼠标中键时调用。
CWnd::OnMDIActivate 当激活或停用 MDI 子窗口时调用。
CWnd::OnMeasureItem 创建控件时针对所有者描述子组合框、列表框或菜单项进行调用。 CWnd 向 Windows 通知控件的尺寸。
CWnd::OnMenuChar 当用户按下不与当前菜单中任何预定义助记键匹配的菜单助记键字符时调用。
CWnd::OnMenuDrag 当用户开始拖动菜单项时调用。
CWnd::OnMenuGetObject 当鼠标光标进入菜单项或从该项的中心移动到该项的顶部或底部时调用。
CWnd::OnMenuRButtonUp 当光标位于菜单项上并且用户释放鼠标右键时调用。
CWnd::OnMenuSelect 当用户选择菜单项时调用。
CWnd::OnMouseActivate 当光标处于非活动窗口中并且用户按下鼠标按钮时调用。
CWnd::OnMouseHover 当光标在先前 TrackMouseEvent 调用中指定的时间段内悬停在窗口工作区上方时调用。
CWnd::OnMouseHWheel 当鼠标的水平滚轮倾斜或旋转时调用。
CWnd::OnMouseLeave 当光标离开在先前 TrackMouseEvent 调用中指定的窗口工作区时调用。
CWnd::OnMouseMove 当鼠标光标移动时调用。
CWnd::OnMouseWheel 当用户旋转鼠标滚轮时调用。 使用 Windows NT 4.0 消息处理。
CWnd::OnMove CWnd 的位置已更改之后调用。
CWnd::OnMoving 指示用户正在移动 CWnd 对象。
CWnd::OnNcActivate 当需要更改非工作区以指示活动或非活动状态时调用。
CWnd::OnNcCalcSize 当需要计算工作区的大小和位置时调用。
CWnd::OnNcCreate 当创建工作区时在 OnCreate 之前调用。
CWnd::OnNcDestroy 当销毁非工作区时调用。
CWnd::OnNcHitTest 每当如果 CWnd 包含光标或使用 SetCapture 捕获了鼠标输入便移动鼠标时调用。
CWnd::OnNcLButtonDblClk 当用户在光标处于 CWnd 的非工作区期间双击鼠标左键时调用。
CWnd::OnNcLButtonDown 当用户在光标处于 CWnd 的非工作区期间按下鼠标左键时调用。
CWnd::OnNcLButtonUp 当用户在光标处于 CWnd 的非工作区期间释放鼠标左键时调用。
CWnd::OnNcMButtonDblClk 当用户在光标处于 CWnd 的非工作区期间双击鼠标中键时调用。
CWnd::OnNcMButtonDown 当用户在光标处于 CWnd 的非工作区期间按下鼠标中键时调用。
CWnd::OnNcMButtonUp 当用户在光标处于 CWnd 的非工作区期间释放鼠标中键时调用。
CWnd::OnNcMouseHover 当光标在先前 TrackMouseEvent 调用中指定的时间段内悬停在窗口的非工作区上方时调用。
CWnd::OnNcMouseLeave 当光标离开在先前 TrackMouseEvent 调用中指定的窗口非工作区时,框架会调用此成员函数。
CWnd::OnNcMouseMove 当在 CWnd 的非工作区中移动光标时调用。
CWnd::OnNcPaint 当需要绘制非工作区时调用。
CWnd::OnNcRButtonDblClk 当用户在光标处于 CWnd 的非工作区期间双击鼠标右键时调用。
CWnd::OnNcRButtonDown 当用户在光标处于 CWnd 的非工作区期间按下鼠标右键时调用。
CWnd::OnNcRButtonUp 当用户在光标处于 CWnd 的非工作区期间释放鼠标右键时调用。
CWnd::OnNcRenderingChanged 在非工作区的呈现策略已更改时调用。
CWnd::OnNcXButtonDblClk 当用户在光标位于窗口非工作区期间双击 XBUTTON1XBUTTON2 时调用。
CWnd::OnNcXButtonDown 当用户在光标位于窗口非工作区期间按下鼠标的 XBUTTON1XBUTTON2 时调用。
CWnd::OnNcXButtonUp 当用户在光标位于窗口非工作区期间释放鼠标的 XBUTTON1XBUTTON2 时调用。
CWnd::OnNextMenu 当使用向右或向左箭头键在菜单栏和系统菜单之间切换时调用。
CWnd::OnNotify 由框架调用以通知父窗口,在其某个控件上发生事件或该控件需要信息。
CWnd::OnNotifyFormat 调用以确定当前窗口是否接受 WM_NOTIFY 通知消息中的 ANSI 或 Unicode 结构。
CWnd::OnPaint 调用以重新绘制窗口的一部分。
CWnd::OnPaintClipboard 当剪贴板查看器的工作区需要重新绘制时调用。
CWnd::OnPaletteChanged 调用以允许使用调色板的窗口实现其逻辑调色板并更新其工作区。
CWnd::OnPaletteIsChanging 当某个应用程序要实现其逻辑调色板时,通知其他应用程序。
CWnd::OnParentNotify 当创建或销毁子窗口时,或是当用户在光标位于子窗口上方期间单击鼠标按钮时调用。
CWnd::OnPowerBroadcast 当电源管理事件发生时调用。
CWnd::OnQueryDragIcon 当用户要拖动最小化(图标化)的 CWnd 时调用。
CWnd::OnQueryEndSession 当用户选择结束 Windows 会话时调用。
CWnd::OnQueryNewPalette CWnd 告知它要接收输入焦点。
CWnd::OnQueryOpen CWnd 是图标并且用户请求打开该图标时调用。
CWnd::OnQueryUIState 调用以检索窗口的用户界面 (UI) 状态。
CWnd::OnRawInput 当前窗口中获取原始输入时调用。
CWnd::OnRButtonDblClk 当用户双击鼠标右键时调用。
CWnd::OnRButtonDown 当用户按下鼠标右键时调用。
CWnd::OnRButtonUp 当用户释放鼠标右键时调用。
CWnd::OnRenderAllFormats 当所有者应用程序正在销毁并且需要呈现其所有格式时调用。
CWnd::OnRenderFormat 当需要呈现具有延迟呈现的特定格式时,针对剪贴板所有者进行调用。
CWnd::OnSessionChange 调用以向应用程序通知会话状态已更改。
CWnd::OnSetCursor 如果鼠标输入未捕获并且鼠标使光标在光标中移动,则调用。
CWnd::OnSetFocus CWnd 获取输入焦点之后调用。
CWnd::OnSettingChange 当 Win32 SystemParametersInfo 函数更改系统范围设置时调用。
CWnd::OnShowWindow CWnd 要显示或隐藏时调用。
CWnd::OnSize CWnd 的大小已更改之后调用。
CWnd::OnSizeClipboard 当剪贴板查看器窗口工作区的大小已更改时调用。
CWnd::OnSizing 指示用户正在调整矩形大小。
CWnd::OnSpoolerStatus 每当对打印管理器队列添加或移除作业时,从打印管理器调用。
CWnd::OnStyleChanged 指示 SetWindowLong Windows 函数已更改一个或多个窗口样式。
CWnd::OnStyleChanging 指示 SetWindowLong Windows 函数要更改一个或多个窗口样式。
CWnd::OnSysChar 当击键转换为系统字符时调用。
CWnd::OnSysColorChange 当在系统颜色设置中进行更改时,针对所有顶级窗口进行调用。
CWnd::OnSysCommand 当用户从控件菜单中选择命令时,或是当用户选择最大化或最小化按钮时调用。
CWnd::OnSysDeadChar 当击键转换为系统语音符号字符(如重音字符)时调用。
CWnd::OnSysKeyDown 当用户按住 ALT 键,然后按下另一个键时调用。
CWnd::OnSysKeyUp 当用户释放在按住 ALT 键的同时按下的键时调用。
CWnd::OnTCard 当用户单击可创作的按钮时调用。
CWnd::OnTimeChange 在系统时间更改之后针对所有顶级窗口进行调用。
CWnd::OnTimer SetTimer 中指定的每个间隔之后调用。
CWnd::OnTouchInput 处理来自 Windows 触摸屏的单个输入。
CWnd::OnTouchInputs 处理来自 Windows 触摸屏的输入。
CWnd::OnUniChar 当按下键时调用。 即,当前窗口具有键盘焦点,并且 WM_KEYDOWN 消息已由 TranslateMessage 函数转换。
CWnd::OnUnInitMenuPopup 在下拉菜单或子菜单已销毁时调用。
CWnd::OnUpdateUIState 调用以更改指定窗口及其所有子窗口的用户界面 (UI) 状态。
CWnd::OnUserChanged 在用户登录或注销之后调用。
CWnd::OnVKeyToItem CWnd 拥有的列表框调用以响应 WM_KEYDOWN 消息。
CWnd::OnVScroll 当用户单击窗口的垂直滚动条时调用。
CWnd::OnVScrollClipboard 当所有者应滚动剪贴板图像、使相应部分失效以及更新滚动条值时调用。
CWnd::OnWindowPosChanged 当由于调用 SetWindowPos 或另一个窗口管理函数而更改了大小、位置或 Z 顺序时调用。
CWnd::OnWindowPosChanging 当由于调用 SetWindowPos 或另一个窗口管理函数而要更改大小、位置或 Z 顺序时调用。
CWnd::OnWinIniChange 在 Windows 初始化文件 (WIN.INI) 已更改之后对所有顶级窗口进行调用。
CWnd::OnWndMsg 指示是否处理了 Windows 消息。
CWnd::OnXButtonDblClk 当用户在光标位于窗口工作区期间双击 XBUTTON1XBUTTON2 时调用。
CWnd::OnXButtonDown 当用户在光标位于窗口工作区期间按下 XBUTTON1XBUTTON2 时调用。
CWnd::OnXButtonUp 当用户在光标位于窗口工作区期间释放 XBUTTON1XBUTTON2 时调用。
CWnd::PostNcDestroy 此虚函数在窗口已销毁之后由默认 OnNcDestroy 函数调用。
CWnd::ReflectChildNotify 将消息反射到其源的 Helper 函数。
CWnd::ReflectLastMsg 将最后一个消息反射到子窗口。
CWnd::ResizeDynamicLayout 如果对窗口启用了动态布局,则窗口大小更改以调整子窗口布局时会通过框架调用。
CWnd::WindowProc CWnd 提供窗口过程。 默认设置会通过消息映射调度消息。

公共运算符

“属性” 描述
CWnd::operator HWND 调用以获取窗口的句柄。
CWnd::operator != 确定窗口是否不与句柄为 m_hWnd 的窗口相同。
CWnd::operator == 确定窗口是否与句柄为 m_hWnd 的窗口相同。

公共数据成员

“属性” 描述
CWnd::m_hWnd 指示附加到此 CWnd 的 HWND。

注解

CWnd 对象与 Windows 窗口不同,但这两者紧密相关。 CWnd 对象由 CWnd 构造函数和析构函数进行创建或销毁。 另一方面,Windows 窗口是 Windows 内部的数据结构,由 Create 成员函数创建,并由 CWnd 虚拟析构函数销毁。 DestroyWindow 函数销毁 Windows 窗口而不销毁对象。

CWnd 类和消息映射机制会隐藏 WndProc 函数。 传入的 Windows 通知消息会通过消息映射自动路由到正确的 OnMessageCWnd 成员函数。 可重写 OnMessage 成员函数以在派生类中处理成员的特定消息

通过 CWnd 类还可以为应用程序创建 Windows 子窗口。 从 CWnd 派生类,然后将成员变量添加到派生类,以存储特定于应用程序的数据。 可派生类中实现消息处理程序成员函数和消息映射,以指定在消息定向到窗口时所发生的情况。

可采用两个步骤创建子窗口。 首先,调用构造函数 CWnd 以构造 CWnd 对象,然后调用 Create 成员函数以创建子窗口,然后将它附加到 CWnd 对象。

当用户终止子窗口时,销毁 CWnd 对象,或调用 DestroyWindow 成员函数以移除窗口并销毁其数据结构。

在 Microsoft 基础类库中,从 CWnd 派生了更多类以提供特定窗口类型。 其中许多类(包括 CFrameWndCMDIFrameWndCMDIChildWndCViewCDialog)是为进一步派生而设计的。 派生自 CWnd 的控件类(如 CButton)可以直接使用,也可以用于进一步派生类。

有关如何使用 CWnd 的详细信息,请参阅 Frame WindowsWindow 对象

继承层次结构

CObject

CCmdTarget

CWnd

要求

标头:afxwin.h

CWnd::accDoDefaultAction

由框架调用以执行对象的默认操作。

virtual HRESULT accDoDefaultAction(VARIANT varChild);

参数

varChild
指定是要调用对象还是对象的子元素之一的默认操作。 此参数可为 CHILDID_SELF(执行对象的默认操作)或子 ID(执行对象子元素之一的默认操作)。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accDoDefaultAction 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可执行对象的默认操作。 有关详细信息,请参阅 Windows SDK 中的 IAccessible::accDoDefaultAction

CWnd::accHitTest

由框架调用以检索屏幕上给定点处的子元素或子对象。

virtual HRESULT accHitTest(
    long xLeft,
    long yTop,
    VARIANT* pvarChild);

参数

xLeft
要进行命中测试的点的 X 坐标(采用屏幕单位)。

yTop
要进行命中测试的点的 Y 坐标(采用屏幕单位)。

pvarChild
接收用于标识位于 xLeftyTop 指定的点处的对象的信息。 请参阅 Windows SDK 中 IAccessible::accHitTest 中的 pvarID

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accHitTest 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::accHitTest

CWnd::accLocation

由框架调用以检索指定对象的当前屏幕位置。

virtual HRESULT accLocation(
    long* pxLeft,
    long* pyTop,
    long* pcxWidth,
    long* pcyHeight,
    VARIANT varChild);

参数

pxLeft
接收对象左上角的 x 坐标(采用屏幕单位)。

pyTop
接收对象左上角的 y 坐标(采用屏幕单位)。

pcxWidth
接收对象的宽度(采用屏幕单位)。

pcyHeight
接收对象的高度(采用屏幕单位)。

varChild
指定是要检索对象还是对象的子元素之一的位置。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accLocation 的“返回值”

注解

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::accLocation

CWnd::accNavigate

由框架调用以移到容器内的另一个用户界面元素,如果可能还检索对象。

virtual HRESULT accNavigate(
    long navDir,
    VARIANT varStart,
    VARIANT* pvarEndUpAt);

参数

navDir
指定导航方向。 请参阅 Windows SDK 中 IAccessible::accNavigate 中的 navDir

varStart
指定起始对象。 请参阅 Windows SDK 中 IAccessible::accNavigate 中的 varStart

pvarEndUpAt
接收有关目标用户界面对象的信息。 请参阅 Windows SDK 中 IAccessible::accNavigate 中的 pvarEnd

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accNavigate 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::accNavigate

CWnd::accSelect

由框架调用以修改选定内容或移动指定对象的键盘焦点。

virtual HRESULT accSelect(
    long flagsSelect,
    VARIANT varChild);

参数

flagsSelect
指定如何更改当前选择或焦点。 请参阅 Windows SDK 中 IAccessible::accSelect 中的 flagsSelect

varChild
指定要选择的对象。 此参数可为 CHILDID_SELF(选择对象本身)或子 ID(选择对象的子级之一)。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accSelect 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::accSelect

CWnd::AnimateWindow

显示或隐藏窗口时生成特效。

BOOL AnimateWindow(
    DWORD dwTime,
    DWORD dwFlags);

参数

dwTime
指定播放动画需要多长时间(以毫秒为单位)。 通常,播放一个动画需要 200 毫秒。

dwFlags
指定动画的类型。 有关可能值的完整列表,请参阅 AnimateWindow

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 AnimateWindow 函数的功能,如 Windows SDK 中所述。

CWnd::ArrangeIconicWindows

排列所有最小化(图标)子窗口。

UINT ArrangeIconicWindows();

返回值

如果该函数成功,则返回一行图标的高度;否则返回 0。

注解

此成员函数还在桌面窗口上排列图标,这会覆盖整个屏幕。 GetDesktopWindow 成员函数检索指向桌面窗口对象的指针。

若要在 MDI 客户端窗口中排列图标 MDI 子窗口,请调用 CMDIFrameWnd::MDIIconArrange

示例

// arrange minimized MDI child windows
// called from menu item; CMdiChildFrame is derived from CMDIChildWnd
void CMdiChildFrame::OnActionArrangeIconicWindows()
{
   UINT height = GetParent()->ArrangeIconicWindows();   
   TRACE(_T("height = %d\n"), height);
}

CWnd::Attach

将 Windows 窗口附加到 CWnd 对象。

BOOL Attach(HWND hWndNew);

参数

hWndNew
指定 Windows 窗口的句柄。

返回值

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

示例

此示例演示如何使用 AttachDetach 映射到 MDI 客户端窗口。

// Declare a CWnd member of CMainFrame
public:
CWnd m_wndMDIClient;

 

// detach MDI client window in CMainFrame destructor
m_wndMDIClient.Detach();

 

// In CMainFrame::OnCreate, attach MDI client window

if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
   return -1;

// attach MDI client window
if (m_wndMDIClient.Attach(m_hWndMDIClient) == 0)
{
   TRACE(_T("Failed to attach MDIClient.\n"));
   return -1; // fail to create
}

CWnd::BeginModalState

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

virtual void BeginModalState();

CWnd::BeginPaint

准备 CWnd 以进行绘制,并在 PAINTSTRUCT 数据结构中填充有关绘制的信息。

CDC* BeginPaint(LPPAINTSTRUCT lpPaint);

参数

lpPaint
指向要接收绘制信息的 PAINTSTRUCT 结构。

返回值

标识 CWnd 的设备上下文。 指针可能是暂时性的,不应存储在 EndPaint 范围之外。

备注

绘制结构包含一个 RECT 数据结构,该结构包含完全包围更新区域的最小矩形,和一个用于指定背景是否已擦除的标志。

更新区域由 InvalidateInvalidateRectInvalidateRgn 成员函数设置,并由系统在调整大小、移动、创建、滚动或执行任何其他影响工作区的操作后设置。 如果更新区域标记为擦除,BeginPaint 将发送 WM_ONERASEBKGND 消息。

除非响应 BeginPaint 消息,否则不要调用 WM_PAINT 成员函数。 每个 BeginPaint 成员函数调用必须有匹配的 EndPaint 成员函数调用。 如果插入点位于要绘制的区域中,BeginPaint 成员函数会自动隐藏插入点以防止将它擦除。

示例

// Use BeginPaint and EndPaint when responding to WM_PAINT message
// An alternative method is to use CPaintDC in place of
// BeginPaint and EndPaint
void CMdiView::OnPaint()
{
   PAINTSTRUCT ps;
   CDC *pDC = BeginPaint(&ps);

   pDC->Rectangle(CRect(0, 0, 100, 100));

   EndPaint(&ps);

   // Do not call CView::OnPaint() for painting messages
}

CWnd::BindDefaultProperty

将调用对象的、在类型库中标记的默认简单绑定属性(例如编辑控件)绑定到由数据源控件的 DataSourceUserNamePasswordSQL 属性定义的基础光标。

void BindDefaultProperty(
    DISPID dwDispID,
    VARTYPE vtProp,
    LPCTSTR szFieldName,
    CWnd* pDSCWnd);

参数

dwDispID
指定要绑定到数据源控件的数据绑定控件上的属性的 DISPID

vtProp
指定要绑定的属性的类型。 例如 VT_BSTRVT_VARIANT 等。

szFieldName
在数据源控件提供的光标中指定属性要绑定到的列的名称。

pDSCWnd
指向托管属性要绑定到的数据源控件的窗口。 使用 DCS 宿主窗口的资源 ID 调用 GetDlgItem 以检索此指针。

注解

要对其调用此函数的 CWnd 对象必须是数据绑定控件。

示例

BindDefaultProperty 可在下面的上下文中使用:

BOOL CMyDlg::OnInitDialog()
{
   CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
   CWnd *pMyBound = GetDlgItem(IDC_MYBOUNDCTRL1);
   pMyBound->BindDefaultProperty(0x1, VT_BSTR, _T("ContactFirstName"), pDSC);
   return TRUE;
}

CWnd::BindProperty

将数据绑定控件(例如网格控件)上的光标绑定属性绑定到数据源控件,并向 MFC 绑定管理器注册该关系。

void BindProperty(
    DISPID dwDispId,
    CWnd* pWndDSC);

参数

dwDispId
指定要绑定到数据源控件的数据绑定控件上的属性的 DISPID

pWndDSC
指向托管属性要绑定到的数据源控件的窗口。 使用 DCS 宿主窗口的资源 ID 调用 GetDlgItem 以检索此指针。

备注

要对其调用此函数的 CWnd 对象必须是数据绑定控件。

示例

BindProperty 可在下面的上下文中使用:

BOOL CMyDlg::OnInitDialog()
{
   CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
   CWnd *pMyBound = GetDlgItem(IDC_MYBOUNDCTRL2);
   pMyBound->BindProperty(0x1, pDSC);
   return TRUE;
}

CWnd::BringWindowToTop

CWnd 置于一堆重叠窗口的顶部。

void BringWindowToTop();

注解

此外,BringWindowToTop 将激活弹出的、顶层和 MDI 子窗口。 BringWindowToTop 成员函数应用于显露被任何重叠窗口部分或完全遮盖的任意窗口。

此函数只调用 Win32 BringWindowToTop 函数。 调用 SetWindowPos 函数可更改窗口在 Z 顺序中的位置。 BringWindowToTop 函数不更改窗口样式,即可使其成为顶层窗口。 有关详细信息,请参阅HWND_TOPHWND_TOPMOST 之间的差别

示例

// Moves MDI child windows to the top when a mouse passes
// over it. CMdiView is derived from CView.
void CMdiView::OnMouseMove(UINT nFlags, CPoint point) 
{
   UNREFERENCED_PARAMETER(nFlags);
   UNREFERENCED_PARAMETER(point);

   GetParentFrame()->BringWindowToTop();
}

CWnd::CalcWindowRect

计算可包含指定客户端矩形的窗口矩形。

virtual void CalcWindowRect(
    LPRECT lpClientRect,
    UINT nAdjustType = adjustBorder);

参数

lpClientRect
[in, out] 指向矩形结构的指针。 输入时,此结构包含客户端矩形。 该方法完成后,此结构包含窗口矩形,其中可以包含指定的客户端矩形。

nAdjustType
[in] 使用 CWnd::adjustBorder 计算没有 WS_EX_CLIENTEDGE 样式的窗口坐标;否则使用 CWnd::adjustOutside

备注

计算出的窗口矩形的大小不包括菜单栏的空间。

有关其他使用限制,请参阅 AdjustWindowRectEx

示例

// Uses CalcWindowRect to determine size for new CFrameWnd
// based on the size of the current view. The end result is a
// top level frame window of the same size as CMdiView's frame.
void CMdiView::OnMyCreateFrame()
{
   CFrameWnd *pFrameWnd = new CFrameWnd;
   CRect myRect;
   GetClientRect(myRect);
   pFrameWnd->Create(NULL, _T("My Frame"));
   pFrameWnd->CalcWindowRect(&myRect, CWnd::adjustBorder);
   pFrameWnd->MoveWindow(0, 0, myRect.Width(), myRect.Height());
   pFrameWnd->ShowWindow(SW_SHOW);
}

CWnd::CancelToolTips

如果当前显示了工具提示,调用此成员函数可从屏幕中删除工具提示。

static void PASCAL CancelToolTips(BOOL bKeys = FALSE);

参数

bKeys
TRUE,用于在按键时取消工具提示,并将状态栏文本设置为默认值;否则为 FALSE

注解

注意

使用此成员函数对代码管理的工具提示没有影响。 它只影响 CWnd::EnableToolTips 管理的工具提示控件。

示例

// In this example, tool tips were set up to
// pop up when the user moves the mouse
// over this edit control.
// If the mouse is moved to the upper left-hand
// corner, the tool tip would disappear because of
// calling CancelToolTips.
void CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
{
   CRect corner(0, 0, 10, 10);
   if (corner.PtInRect(point))
      CancelToolTips();
   CEdit::OnMouseMove(nFlags, point);
}

CWnd::CenterWindow

使窗口相对于其父级居中。

void CenterWindow(CWnd* pAlternateOwner = NULL);

参数

pAlternateOwner
指向相对于窗口居中位置的备用窗口(父窗口除外)的指针。

备注

通常从 CDialog::OnInitDialog 调用,以相对于应用程序主窗口将对话框居中。 默认情况下,该函数相对于父窗口将子窗口居中,相对于所有者将弹出窗口居中。 如果弹出窗口没有所有者,则相对于屏幕将它居中。 若要相对于非所有者或父级的特定窗口将某个窗口居中,可将 pAlternateOwner 参数设置为有效窗口。 若要强制相对于屏幕居中,请将 CWnd::GetDesktopWindow 返回的值作为 pAlternateOwner 传递。

示例

BOOL CAboutDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   CenterWindow();

   return TRUE;
}

CWnd::ChangeClipboardChain

从剪贴板查看器链中删除 CWnd,并将 hWndNext 指定的窗口设为链中 CWnd 上级的后代。

BOOL ChangeClipboardChain(HWND hWndNext);

参数

hWndNext
标识剪贴板查看器链中 CWnd 之后的窗口。

返回值

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

CWnd::CheckDlgButton

选择按钮(在其旁边添加复选标记)或清除按钮(去除复选标记),或者更改三态按钮的状态。

void CheckDlgButton(
    int nIDButton,
    UINT nCheck);

参数

nIDButton
指定要修改的按钮。

nCheck
指定要执行的操作。 如果 nCheck 不为零,则 CheckDlgButton 成员函数会在按钮旁边添加一个复选标记;如果为 0,则去除复选标记。 对于三态按钮,如果 nCheck 为 2,则按钮状态是不确定的。

备注

CheckDlgButton 函数向指定的按钮发送 BM_SETCHECK 消息。

示例

// Sets 3 check buttons in various ways.  Note BST_INDETERMINATE
// requires BS_3STATE or BS_AUTO3STATE in the button's style.
void CMyDlg::OnMarkButtons()
{
   CheckDlgButton(IDC_CHECK1, BST_UNCHECKED);     // 0
   CheckDlgButton(IDC_CHECK2, BST_CHECKED);       // 1
   CheckDlgButton(IDC_CHECK3, BST_INDETERMINATE); // 2
}

CWnd::CheckRadioButton

选中组中的给定单选按钮(向其添加复选标记)并清除组中的所有其他单选按钮(去除复选标记)。

void CheckRadioButton(
    int nIDFirstButton,
    int nIDLastButton,
    int nIDCheckButton);

参数

nIDFirstButton
指定组中第一个单选按钮的整数标识符。

nIDLastButton
指定组中最后一个单选按钮的整数标识符。

nIDCheckButton
指定要选中的单选按钮的整数标识符。

注解

CheckRadioButton 函数向指定的单选按钮发送 BM_SETCHECK 消息。

示例

// Of the 4 radio buttons, selects radio button 3.
void CMyDlg::OnMarkRadio()
{
   CheckRadioButton(IDC_RADIO1, IDC_RADIO4, IDC_RADIO3);
}

CWnd::ChildWindowFromPoint

确定哪些属于 CWnd 的子窗口(如果有)包含指定的点。

CWnd* ChildWindowFromPoint(POINT point) const;

CWnd* ChildWindowFromPoint(
    POINT point,
    UINT nFlags) const;

参数

point
指定要测试的点的客户端坐标。

nflags
指定要跳过的子窗口。 此参数可为以下值的组合:

含义
CWP_ALL 不跳过任何子窗口
CWP_SKIPINVISIBLE 跳过不可见的子窗口
CWP_SKIPDISABLED 跳过已禁用的子窗口
CWP_SKIPTRANSPARENT 跳过透明的子窗口

返回值

标识包含该点的子窗口。 如果给定点位于工作区之外,则返回值为 NULL。 如果该点在工作区内但不包含在任何子窗口中,则返回 CWnd

此成员函数将返回包含指定点的已隐藏或已禁用子窗口。

给定的点可包含在多个窗口中。 但是,此函数仅返回遇到的第一个包含该点的窗口的 CWnd*。

返回的 CWnd* 可能是暂时性的,不应存储它以供稍后使用。

示例

void CMyDlg::OnFindCenterChild() 
{
   CRect rect;
   GetClientRect(&rect);
   CWnd* pWnd = ChildWindowFromPoint(
      CPoint(rect.Width()/2, rect.Height()/2), 
      // Top left is always 0, 0.
      CWP_SKIPINVISIBLE);
   TRACE(_T("Center window is 0x%08x\n"), pWnd->m_hWnd);
}

CWnd::ClientToScreen

将显示中的给定点或矩形的客户端坐标转换为屏幕坐标。

void ClientToScreen(LPPOINT lpPoint) const;  void ClientToScreen(LPRECT lpRect) const;

参数

lpPoint
指向包含要转换的客户端坐标的 POINT 结构CPoint 对象。

lpRect
指向包含要转换的客户端坐标的 RECT 结构CRect 对象。

备注

ClientToScreen 成员函数使用 POINTRECT 结构中的客户端坐标或者 lpPointlpRect 指向的 CPointCRect 对象来计算新屏幕坐标;然后它将结构中的坐标替换为新坐标。 新屏幕坐标相对于系统显示器的左上角。

ClientToScreen 成员函数假设给定的点或矩形位于客户端坐标中。

示例

// resize dialog to client's size
void CMyDlg::OnSizeToClient()
{
   CRect myRect;
   GetClientRect(&myRect);

   ClientToScreen(myRect);
   MoveWindow(myRect.left, myRect.top,
              myRect.Width(), myRect.Height());
}

CWnd::CloseWindow

最小化窗口。

void CloseWindow();

备注

此成员函数模拟 CloseWindow 函数的功能,如 Windows SDK 中所述。

CWnd::ContinueModal

RunModalLoop 调用此成员函数来确定何时应退出模态。

virtual BOOL ContinueModal();

返回值

如果要继续进行模式循环,则返回非零值;调用 EndModalLoop 时返回 0。

备注

默认情况下,它在调用 EndModalLoop 之前返回非零值。

CWnd::Create

创建指定的子窗口并将其附加到 CWnd 对象。

virtual BOOL Create(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle,
    Const RECT& rect,
    CWnd* pParentWnd,
    UINT nID,
    CCreateContext* pContext = NULL);

参数

lpszClassName
[in] 指向以 null 结尾的字符串的指针,该字符串包含已注册的系统窗口类的名称;或者为预定义的系统窗口类的名称。

lpszWindowName
[in] 指向以 null 结尾的字符串的指针,该字符串包含窗口显示名称;否则为 NULL,表示没有窗口显示名称。

dwStyle
[in] 窗口样式的按位组合 (OR)。 WS_POPUP 选项不是有效样式。

rect
[in] 窗口相对于父窗口左上角的大小和位置。

pParentWnd
[in] 指向父窗口的指针。

nID
[in] 窗口的 ID。

pContext
[in] 指向 CCreateContext 结构的指针,该结构用于自定义应用程序的文档视图体系结构。

返回值

如果该方法成功,则返回 TRUE;否则返回 FALSE

备注

警告

如果菜单为 NULL 且样式包含 WS_CHILD,则 CWnd::PreCreateWindow 现在会将其 CREATESTRUCT 参数的 hMenu 成员分配到 this 指针。 要使功能正常,请确保对话框控件的 ID 不是 NULL

此项更改解决了托管/本机互操作方案中的崩溃问题。 CWnd::Create 中的 TRACE 语句会提醒开发人员出现了该问题。

使用 AfxRegisterWndClass 函数注册窗口类。 用户定义的窗口类在其注册到的模块中可用。

CWnd::OnCreate 方法在 Create 方法返回之前以及在窗口可见之前调用。

示例

// Dynamically create static control using CWnd::Create,
// instead of with CStatic::Create, which doesn't
// need the "STATIC" class name.
void CMyDlg::OnCreateStatic() 
{
   // m_pWndStatic is a CWnd* member of CMyDlg
   m_pWndStatic = new CWnd;
   m_pWndStatic->Create(_T("STATIC"), _T("Hi"), WS_CHILD | WS_VISIBLE,
       CRect(0, 0, 20, 20), this, 1234);
}

CWnd::CreateAccessibleProxy

为指定对象创建 Active Accessibility 代理服务器。

virtual HRESULT CreateAccessibleProxy(
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

参数

wParam
标识 Active Accessibility 代理访问的对象。 可为以下值之一

含义
OBJID_CLIENT 引用窗口的工作区。

lParam
提供其他消息相关信息。

pResult
指向存储结果代码的 LRESULT 的指针。

注解

为指定对象创建 Active Accessibility 代理服务器。

CWnd::CreateCaret

为系统插入点创建新形状并声明插入点的所有权。

void CreateCaret(CBitmap* pBitmap);

参数

pBitmap
标识用于定义插入点形状的位图。

备注

位图必须已事先由 CBitmap::CreateBitmap 成员函数、CreateDIBitmap Windows 函数或 CBitmap::LoadBitmap 成员函数创建。

CreateCaret 会自动销毁先前的插入点形状(如果有),而不管插入点由哪个窗口拥有。 创建的插入点最初是隐藏的。 若要显示插入点,必须调用 ShowCaret 成员函数。

系统插入点是共享资源。 CWnd 应该仅在其具有输入焦点或处于活动状态时才创建插入点。 它应在失去输入焦点或变为非活动状态之前销毁插入点。

示例

// Changes the caret of the edit control in this dialog box
void CMyDlg::OnChangeCaret()
{
   m_pBitmapCaret = new CBitmap;
   m_pBitmapCaret->LoadBitmap(IDB_HAPPY_BITMAP);
   m_MyEdit.CreateCaret(m_pBitmapCaret);
   m_MyEdit.ShowCaret();
}

CWnd::CreateControl

使用此成员函数可创建一个 ActiveX 控件,该控件将在 MFC 程序中由 CWnd 对象表示。

BOOL CreateControl(
    LPCTSTR pszClass,
    LPCTSTR pszWindowName,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID,
    CFile* pPersist = NULL,
    BOOL bStorage = FALSE,
    BSTR bstrLicKey = NULL);

BOOL CreateControl(
    REFCLSID clsid,
    LPCTSTR pszWindowName,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID,
    CFile* pPersist = NULL,
    BOOL bStorage = FALSE,
    BSTR bstrLicKey = NULL);

BOOL CreateControl(
    REFCLSID clsid,
    LPCTSTR pszWindowName,
    DWORD dwStyle,
    const POINT* ppt,
    const SIZE* psize,
    CWnd* pParentWnd,
    UINT nID,
    CFile* pPersist = NULL,
    BOOL bStorage = FALSE,
    BSTR bstrLicKey = NULL);

参数

pszClass
此字符串可包含类的 OLE“短名称”(ProgID)。 例如 "CIRC3.Circ3Ctrl.1"。 该名称需要与控件注册的相同名称匹配。 或者,该字符串可包含 CLSID 的字符串形式(包含在大括号中)。 例如 "{9DBAFCCF-592F-101B-85CE-00608CEC297B}"。 在任一情况下,CreateControl 都会将字符串转换为相应的类 ID。

pszWindowName
指向要在控件中显示的文本的指针。 设置控件的标题或文本属性(如有)的值。 如果为 NULL,则不会更改控件的标题或文本属性。

dwStyle
窗口样式。 “注解”下列出了可用样式。

rect
指定控件的大小和位置。 它可以是 CRect 对象或 RECT 结构

ppt
指向包含控件左上角的 POINT 结构CPoint 对象。

pSize
指向包含控件大小的 SIZE 结构或 CSize 对象

*pParentWnd*
指定控件的父窗口。 不得为 NULL

nID
指定控件的 ID。

pPersist
指向包含控件的持久状态的 CFile 的指针。 默认值为 NULL,表示控件会初始化自身,而不从任何持久存储中恢复其状态。 如果不为 NULL,它应是指向 CFile 派生对象的指针,该对象包含采用流或存储形式的控件的持久数据。 此数据可能已保存在客户端先前的激活中。 CFile 可以包含其他数据,但必须在调用 CreateControl 时将其读写指针设置为持久数据的第一个字节。

bStorage
指示是否应将 pPersist 中的数据解释为 IStorageIStream 数据。 如果 pPersist 中的数据是存储,则 bStorage 应是 TRUE。 如果 pPersist 中的数据是流,则 bStorage 应是 FALSE。 默认值是 FALSE

bstrLicKey
可选的许可证密钥数据。 仅在创建需要运行时许可证密钥的控件时才需要此数据。 如果控件支持许可,则必须提供许可证密钥才能成功创建控件。 默认值为 NULL

clsid
控件的唯一类 ID。

返回值

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

备注

CreateControlCWnd::Create 函数的直接模拟,它为 CWnd 创建窗口。 CreateControl 创建 ActiveX 控件而不是普通窗口。

dwStyle 仅支持一部分 Windows CreateControl 标志:

  • WS_VISIBLE 创建初始可见的窗口。 如果希望控件像普通窗口一样立即可见,则需要它。

  • WS_DISABLED 创建初始已禁用的窗口。 禁用的窗口无法接收用户的输入。 如果控件具有 Enabled 属性,则可以设置。

  • WS_BORDER 创建带细线边框的窗口。 如果控件具有 BorderStyle 属性,则可以设置。

  • WS_GROUP 指定一组控件中的第一个控件。 用户可以使用方向键将键盘焦点从组中的一个控件更改为下一个控件。 在第一个控件之后使用 WS_GROUP 样式定义的所有控件属于同一组。 具有 WS_GROUP 样式的下一个控件结束该组并开始下一组。

  • WS_TABSTOP 指定当用户按下 TAB 键时可以接收键盘焦点的控件。 按 TAB 键会将键盘焦点更改为 WS_TABSTOP 样式的下一个控件。

示例

class CGenocx : public CWnd
{
protected:
   DECLARE_DYNCREATE(CGenocx)
public:
   CLSID const &GetClsid()
   {
      static CLSID const clsid = {0x20DD1B9E, 0x87C4, 0x11D1, {0x8B, 0xE3, 0x0, 0x0, 0xF8, 0x75, 0x4D, 0xA1}};
      return clsid;
   }

   // This code is generated by the Control Wizard.
   // It wraps the call to CreateControl in the call to Create.
   virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
                       const RECT &rect, CWnd *pParentWnd, UINT nID,
                       CCreateContext *pContext = NULL)
   {
      UNREFERENCED_PARAMETER(pContext);
      UNREFERENCED_PARAMETER(lpszClassName);

      return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
   }

   // remainder of class declaration omitted...

CWnd::CreateEx

创建指定的窗口并将其附加到 CWnd 对象。

virtual BOOL CreateEx(
    DWORD dwExStyle,
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU nIDorHMenu,
    LPVOID lpParam = NULL);

virtual BOOL CreateEx(
    DWORD dwExStyle,
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID,
    LPVOID lpParam = NULL);

参数

dwExStyle
扩展窗口样式的按位组合 (OR);否则为 NULL(默认扩展窗口样式)。

lpszClassName
指向以 null 结尾的字符串的指针,该字符串包含已注册的系统窗口类的名称;或者为预定义的系统窗口类的名称。

lpszWindowName
指向以 null 结尾的字符串的指针,该字符串包含窗口显示名称;否则为 NULL,表示没有窗口显示名称。

dwStyle
窗口样式的按位组合 (OR);否则为 NULL(默认窗口样式)。

x
窗口与屏幕左侧或父窗口之间的初始水平距离。

y
窗口与屏幕顶部或父窗口之间的初始垂直距离。

nWidth
窗口的宽度(以像素为单位)。

nHeight
窗口的高度(以像素为单位)。

hwndParent
对于子窗口,为父窗口的句柄;否则,如果窗口有所有者,则为所有者窗口的句柄。

nIDorHMenu
对于子窗口,为窗口 ID;否则为窗口菜单的 ID。

lpParam
指向传递给 lpCreateParams 字段中 CWnd::OnCreate 方法的用户数据的指针。

rect
窗口相对于屏幕或父窗口的大小和位置。

pParentWnd
对于子窗口,为指向父窗口的指针;否则,如果窗口有所有者,则为指向所有者窗口的指针。

nID
对于子窗口,为窗口 ID;否则为窗口菜单的 ID。

返回值

如果该方法成功,则返回 TRUE;否则返回 FALSE

注解

警告

如果菜单为 NULL 且样式包含 WS_CHILD,则 CWnd::PreCreateWindow 现在会将其 CREATESTRUCT 参数的 hMenu 成员分配到 this 指针。 要使功能正常,请确保对话框控件的 ID 不是 NULL

此项更改解决了托管/本机互操作方案中的崩溃问题。 CWnd::Create 中的 TRACE 语句会提醒开发人员出现了该问题。

默认的扩展窗口样式为 WS_EX_LEFT。 默认窗口样式为 WS_OVERLAPPED

使用 AfxRegisterWndClass 函数注册窗口类。 用户定义的窗口类在其注册到的模块中可用。

子窗口的尺寸相对于父窗口工作区的左上角。 顶级窗口的尺寸相对于屏幕的左上角。

CWnd::OnCreate 方法在 CreateEx 方法返回之前以及在窗口可见之前调用。

示例

void CMyDlg::OnCreateExtendedControl() 
{
   // m_pWndStaticEx is a CWnd* member of CMyDlg
   m_pWndStaticEx = new CStatic;
   m_pWndStaticEx->CreateEx(WS_EX_CLIENTEDGE, // Make a client edge label.
      _T("STATIC"), _T("Hi"),
      WS_CHILD | WS_TABSTOP | WS_VISIBLE,
      5, 5, 30, 30, m_hWnd, (HMENU)2345);
}

CWnd::CreateGrayCaret

为系统插入点创建灰色矩形并声明插入点的所有权。

void CreateGrayCaret(
    int nWidth,
    int nHeight);

参数

nWidth
指定插入点的宽度(以逻辑单位表示)。 如果此参数为 0,则宽度设置为系统定义的窗口边框宽度。

nHeight
指定插入点的高度(以逻辑单位表示)。 如果此参数为 0,则高度设置为系统定义的窗口边框高度。

注解

插入点形状可为线条或方块。

参数 nWidthnHeight 指定插入点的宽度和高度(以逻辑单位表示);确切的宽度和高度(以像素为单位)取决于映射模式。

系统的窗口边框宽度或高度可以通过 GetSystemMetrics Windows 函数使用 SM_CXBORDERSM_CYBORDER 索引来检索。 使用窗口边框宽度或高度可确保插入点在高分辨率显示器上可见。

CreateGrayCaret 成员函数会自动销毁先前的插入点形状(如果有),而不管插入点由哪个窗口拥有。 创建的插入点最初是隐藏的。 若要显示插入点,必须调用 ShowCaret 成员函数。

系统插入点是共享资源。 CWnd 应该仅在其具有输入焦点或处于活动状态时才创建插入点。 它应在失去输入焦点或变为非活动状态之前销毁插入点。

示例

// Create a 5x10 gray caret in the edit control.
void CMyDlg::OnCreateGrayCaret()
{
   m_MyEdit.CreateGrayCaret(5, 10);
   m_MyEdit.ShowCaret();
}

CWnd::CreateSolidCaret

为系统插入点创建实色矩形并声明插入点的所有权。

void CreateSolidCaret(
    int nWidth,
    int nHeight);

参数

nWidth
指定插入点的宽度(以逻辑单位表示)。 如果此参数为 0,则宽度设置为系统定义的窗口边框宽度。

nHeight
指定插入点的高度(以逻辑单位表示)。 如果此参数为 0,则高度设置为系统定义的窗口边框高度。

备注

插入点形状可为线条或方块。

参数 nWidthnHeight 指定插入点的宽度和高度(以逻辑单位表示);确切的宽度和高度(以像素为单位)取决于映射模式。

系统的窗口边框宽度或高度可以通过 GetSystemMetrics Windows 函数使用 SM_CXBORDERSM_CYBORDER 索引来检索。 使用窗口边框宽度或高度可确保插入点在高分辨率显示器上可见。

CreateSolidCaret 成员函数会自动销毁先前的插入点形状(如果有),而不管插入点由哪个窗口拥有。 创建的插入点最初是隐藏的。 若要显示插入点,必须调用 ShowCaret 成员函数。

系统插入点是共享资源。 CWnd 应该仅在其具有输入焦点或处于活动状态时才创建插入点。 它应在失去输入焦点或变为非活动状态之前销毁插入点。

示例

// Create a 5x10 solid caret in the edit control.
void CMyDlg::OnCreateSolidCaret()
{
   m_MyEdit.CreateSolidCaret(5, 10);
   m_MyEdit.ShowCaret();
}

CWnd::CWnd

构造 CWnd 对象。

CWnd();

备注

在调用 CreateExCreate 成员函数之前不会创建和附加 Windows 窗口。

CWnd::Default

调用默认窗口过程。

LRESULT Default();

返回值

取决于发送的消息。

注解

默认窗口过程为应用程序不处理的任何窗口消息提供默认处理。 此成员函数确保处理每条消息。

示例

// This sample shows how to avoid any button handling in base class,
// if any, and call the default window procedure directly.
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
   UNREFERENCED_PARAMETER(nFlags);
   UNREFERENCED_PARAMETER(point);

   CWnd::Default();
}

CWnd::DefWindowProc

调用默认窗口过程,该过程为应用程序不处理的任何窗口消息提供默认处理。

virtual LRESULT DefWindowProc(
    UINT message,
    WPARAM wParam,
    LPARAM lParam);

参数

message
指定要处理的 Windows 消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

返回值

取决于发送的消息。

备注

此成员函数确保处理每条消息。 应使用与窗口过程接收的相同参数来调用它。

CWnd::DeleteTempMap

CWinApp 对象的空闲时间处理程序自动调用。

static void PASCAL DeleteTempMap();

备注

删除 FromHandle 成员函数创建的任何暂时性 CWnd 对象。

示例

// DeleteTempMap() is a static member and does not need 
// to be called within the scope of an instantiated CWnd object.
CWnd::DeleteTempMap();

CWnd::DestroyWindow

销毁附加到 CWnd 对象的 Windows 窗口。

virtual BOOL DestroyWindow();

返回值

如果已销毁窗口,则返回非零值;否则返回 0。

备注

DestroyWindow 成员函数向窗口发送相应的消息以将其停用并删除输入焦点。 它还销毁窗口的菜单、刷新应用程序队列、销毁未完成的计时器、删除剪贴板所有权,并断开剪贴板查看器链(如果 CWnd 位于查看器链的顶层)。 它向窗口发送 WM_DESTROYWM_NCDESTROY 消息。 它不会销毁 CWnd 对象。

DestroyWindow 是用于执行清理的占位符。 由于 DestroyWindow 是一个虚拟函数,因此它会显示在类视图中的任何 CWnd 派生类中。 但即使在 CWnd 派生类中重写此函数,也不一定会调用 DestroyWindow。 如果未在 MFC 代码中调用 DestroyWindow,但你希望调用它,则必须在自己的代码中显式调用它。

例如,假设你在 CView 派生类中重写了 DestroyWindow。 由于 MFC 源代码不会在其任何 CFrameWnd 派生类中调用 DestroyWindow,除非显式调用被重写的 DestroyWindow,否则不会调用它。

如果该窗口是任何窗口的父级,则在销毁父窗口时会自动销毁这些子窗口。 DestroyWindow 成员函数首先销毁子窗口,然后再销毁该窗口本身。

DestroyWindow 成员函数还销毁由 CDialog::Create 创建的无模式对话框。

如果要销毁的 CWnd 是子窗口并且未设置 WS_EX_NOPARENTNOTIFY 样式,则 WM_PARENTNOTIFY 消息将发送到父窗口。

示例

// CModeless is a CDialog class representing a modeless dialog
// Destruction of the modeless dialog involves calling DestroyWindow in 
// OnOK() & OnCancel() handlers
void CModeless::OnOK() 
{ 
   if (!UpdateData(TRUE)) 
   {
      TRACE(_T("UpdateData failed during dialog termination\n"));
      // The UpdateData routine will set focus to correct item
      return;
   }
   DestroyWindow();
}

void CModeless::OnCancel()
{
   DestroyWindow();
}

CWnd::Detach

CWnd 对象分离 Windows 句柄并返回该句柄。

HWND Detach();

返回值

Windows 对象的 HWND

示例

请参阅 CWnd::Attach 的示例。

CWnd::DlgDirList

使用文件或目录列表填充列表框。

int DlgDirList(
    LPTSTR lpPathSpec,
    int nIDListBox,
    int nIDStaticPath,
    UINT nFileType);

参数

lpPathSpec
指向包含路径或文件名的以 null 结尾的字符串。 DlgDirList 修改此字符串。此字符串的长度应足以包含修改内容。 有关详细信息,请参阅下面的“注解”部分。

nIDListBox
指定列表框的标识符。 如果 nIDListBox 为 0,则 DlgDirList 假设不存在任何列表框,并且不会尝试填充列表框。

nIDStaticPath
指定用于显示当前驱动器和目录的静态文本控件的标识符。 如果 nIDStaticPath 为 0,则 DlgDirList 假设不存在此类文本控件。

nFileType
指定要显示的文件的属性。 它可为以下值的任意组合:

  • DDL_READWRITE 没有附加属性的读写数据文件。

  • DDL_READONLY 只读文件。

  • DDL_HIDDEN 隐藏的文件。

  • DDL_SYSTEM 系统文件。

  • DDL_DIRECTORY 目录。

  • DDL_ARCHIVE 存档。

  • DDL_POSTMSGSLB_DIR 标志。 如果设置了 LB_DIR 标志,则 Windows 会将 DlgDirList 生成的消息放入应用程序的队列中;否则,这些消息将直接发送到对话框过程。

  • DDL_DRIVES 驱动器。 如果设置了 DDL_DRIVES 标志,则会自动设置 DDL_EXCLUSIVE 标志。 因此,若要创建包含驱动器和文件的目录列表,必须调用 DlgDirList 两次:使用设置的 DDL_DRIVES 标志调用一次,再使用列表其余部分的标志调用一次。

  • DDL_EXCLUSIVE 独占位。 如果设置了独占位,则仅列出指定类型的文件;否则列出常规文件和指定类型的文件。

返回值

如果该函数成功,则为非 0;否则为 0。

备注

DlgDirListLB_RESETCONTENTLB_DIR 消息发送到列表框。 它使用与 lpPathSpec 指定的路径匹配的所有文件的名称来填充 nIDListBox 指定的列表框。

lpPathSpec 参数采用以下形式:

[drive:] [ [\u]directory[\idirectory]...\u] [filename]

在此示例中,drive 是驱动器号,directory 是有效目录名称,filename 是必须至少包含一个通配符的有效文件名。 通配符为问号 (?)(表示匹配任一字符)和星号 (*)(表示匹配任意数量的字符)

如果为 lpPathSpec 指定 0 长度字符串,或者仅指定目录名称但不包含任何文件规范,则字符串将更改为“*.*”。

如果 lpPathSpec 包含驱动器和/或目录名称,则在填充列表框之前,当前驱动器和目录将更改为指定的驱动器和目录。 另外,还会使用新的驱动器和/或目录名称更新 nIDStaticPath 标识的文本控件。

填充列表框后,将通过删除路径的驱动器和/或目录部分来更新 lpPathSpec

示例

// If pDialog points to a CDialog object with a list box
// with the identifier IDC_DIRLIST, this call will populate
// the box with only the non-hidden subdirectories in the root
// directory of the C:\ drive.
TCHAR path[MAX_PATH];
_tcscpy_s(path, MAX_PATH, _T("C:\\"));

pDialog->DlgDirList(path, IDC_DIRLIST, 0, DDL_EXCLUSIVE | DDL_DIRECTORY);

CWnd::DlgDirListComboBox

使用文件或目录列表填充组合框的列表框。

int DlgDirListComboBox(
    LPTSTR lpPathSpec,
    int nIDComboBox,
    int nIDStaticPath,
    UINT nFileType);

参数

lpPathSpec
指向包含路径或文件名的以 null 结尾的字符串。 DlgDirListComboBox 修改此字符串,因此此数据不应采用字符串文本形式。 请参阅下面的“注解”部分。

nIDComboBox
指定对话框中组合框的标识符。 如果 nIDComboBox 为 0,则 DlgDirListComboBox 假设不存在任何组合框,并且不会尝试填充组合框。

nIDStaticPath
指定用于显示当前驱动器和目录的静态文本控件的标识符。 如果 nIDStaticPath 为 0,则 DlgDirListComboBox 假设不存在此类文本控件。

nFileType
指定要显示的文件的 DOS 文件属性。 它可为以下值的任意组合:

  • DDL_READWRITE 没有附加属性的读写数据文件。

  • DDL_READONLY 只读文件。

  • DDL_HIDDEN 隐藏的文件。

  • DDL_SYSTEM 系统文件。

  • DDL_DIRECTORY 目录。

  • DDL_ARCHIVE 存档。

  • DDL_POSTMSGSCB_DIR 标志。 如果设置了 CB_DIR 标志,则 Windows 会将 DlgDirListComboBox 生成的消息放入应用程序的队列中;否则,这些消息将直接发送到对话框过程。

  • DDL_DRIVES 驱动器。 如果设置了 DDL_DRIVES 标志,则会自动设置 DDL_EXCLUSIVE 标志。 因此,若要创建包含驱动器和文件的目录列表,必须调用 DlgDirListComboBox 两次:使用设置的 DDL_DRIVES 标志调用一次,再使用列表其余部分的标志调用一次。

  • DDL_EXCLUSIVE 独占位。 如果设置了独占位,则仅列出指定类型的文件;否则列出常规文件和指定类型的文件。

返回值

指定函数的结果。 如果生成了列表(即使是空列表),则返回非零值。 返回值 0 表示输入字符串不包含有效的搜索路径。

备注

DlgDirListComboBoxCB_RESETCONTENTCB_DIR 消息发送到组合框。 它使用与 lpPathSpec 指定的路径匹配的所有文件的名称来填充 nIDComboBox 指定的组合框的列表框。

lpPathSpec 参数采用以下形式:

[drive:] [ [\u]directory[\idirectory]...\u] [filename]

在此示例中,drive 是驱动器号,directory 是有效目录名称,filename 是必须至少包含一个通配符的有效文件名。 通配符为问号 (?)(表示匹配任一字符)和星号 (*)(表示匹配任意数量的字符)

如果为 lpPathSpec 指定零长度字符串,则将使用当前目录且不修改 lpPathSpec。 如果仅指定目录名称但不包含任何文件规范,则字符串将更改为“*”。

如果 lpPathSpec 包含驱动器和/或目录名称,则在填充列表框之前,当前驱动器和目录将更改为指定的驱动器和目录。 另外,还会使用新的驱动器和/或目录名称更新 nIDStaticPath 标识的文本控件。

填充组合框列表框后,将通过删除路径的驱动器和/或目录部分来更新 lpPathSpec

示例

// If pDialog points to a CDialog object with a combo box
// with the identifier IDC_DIRCOMBO, this call will populate
// the box with only the non-hidden subdirectories in the root
// directory of the C:\ drive.

TCHAR szPath[MAX_PATH];
_tcsncpy_s(szPath, MAX_PATH, _T("C:\\"), MAX_PATH);
pDialog->DlgDirListComboBox(szPath, IDC_DIRCOMBO, 0, DDL_EXCLUSIVE | DDL_DIRECTORY);

// Note that the first argument is a string and not a string
// literal. This is necessary because DlgDirListComboBox
// modifies the supplied string. Passing a string literal
// will result in an access violation.

CWnd::DlgDirSelect

从列表框检索当前所选内容。

BOOL DlgDirSelect(
    LPTSTR lpString,
    int nIDListBox);

参数

lpString
指向接收列表框中的当前选择内容的缓冲区。

nIDListBox
指定对话框中列表框的整数 ID。

返回值

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

注解

它假设列表框已由 DlgDirList 成员函数填充并且选择的是驱动器号、文件或目录名称。

DlgDirSelect 成员函数将选择内容复制到 lpString 指定的缓冲区。 如果没有选择内容,则 lpString 不会更改。

DlgDirSelectLB_GETCURSELLB_GETTEXT 消息发送到列表框。

它不允许从列表框返回多个文件名。 列表框不能是多选列表框。

CWnd::DlgDirSelectComboBox

从组合框的列表框检索当前所选内容。

BOOL DlgDirSelectComboBox(
    LPTSTR lpString,
    int nIDComboBox);

参数

lpString
指向接收所选路径的缓冲区。

nIDComboBox
指定对话框中组合框的整数 ID。

返回值

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

注解

它假设列表框已由 DlgDirListComboBox 成员函数填充并且选择的是驱动器号、文件或目录名称。

DlgDirSelectComboBox 成员函数将选择内容复制到指定的缓冲区。 如果没有选择内容,缓冲区的内容不会更改。

DlgDirSelectComboBoxCB_GETCURSELCB_GETLBTEXT 消息发送到组合框。

它不允许从组合框返回多个文件名。

CWnd::DoDataExchange

由框架调用以交换和验证对话框数据。

virtual void DoDataExchange(CDataExchange* pDX);

参数

pDX
一个指向 CDataExchange 对象的指针。

备注

切勿直接调用此函数。 它由 UpdateData 成员函数调用。 调用 UpdateData 以初始化对话框的控件或从对话框中检索数据。

CDialog 派生特定于应用程序的对话框类时,如果你希望利用框架的自动数据交换和验证,则需要重写此成员函数。 “添加变量”向导将为你编写此成员函数的重写版本,其中包含对话框数据交换 (DDX) 和验证 (DDV) 全局函数调用的所需“数据映射”。

若要自动生成此成员函数的重写版本,请先使用对话框编辑器创建一个对话框资源,再派生一个特定于应用程序的对话框类。 然后使用“添加变量”向导将变量、数据和验证范围与新对话框中的各种控件相关联。 然后,该向导会编写包含数据映射的重写 DoDataExchange。 下面是“添加变量”向导生成的示例 DDX/DDV 代码块:

void CPenWidthsDlg::DoDataExchange(CDataExchange *pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Text(pDX, IDC_THINPENWIDTH, m_nThinWidth);
   DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20);
   DDX_Text(pDX, IDC_THICKPENWIDTH, m_nThickWidth);
   DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20);
}

DoDataExchange 重写成员函数必须位于源文件中的宏语句之前。

有关对话框数据交换和验证的详细信息,请参阅在窗体中显示和操作数据对话框数据交换和验证。 有关“添加变量”向导生成的 DDX_ 和 DDV_ 宏的介绍,请参阅技术说明 26

CWnd::DragAcceptFiles

在应用程序的 CWinApp::InitInstance 函数中使用 CWnd 指针从窗口内部调用此成员函数,以指示窗口从 Windows 文件管理器或文件资源管理器接受放置的文件。

void DragAcceptFiles(BOOL bAccept = TRUE);

参数

BAccept
用于指示是否接受拖动的文件的标志。

备注

只有使用设置为 TRUEbAccept 参数调用 DragAcceptFiles 的窗口才会将自身标识为能够处理 Windows 消息 WM_DROPFILES。 例如,在 MDI 应用程序中,如果在 DragAcceptFiles 函数调用中使用 CMDIFrameWnd 窗口指针,则只有 CMDIFrameWnd 窗口会收到 WM_DROPFILES 消息。 此消息不会发送到所有已打开的 CMDIChildWnd 窗口。 要让 CMDIChildWnd 窗口接收此消息,必须使用 CMDIChildWnd 窗口指针调用 DragAcceptFiles

若要停止接收拖动的文件,请调用成员函数并将 bAccept 设置为 FALSE

CWnd::DragDetect

捕获鼠标并跟踪其移动,直到用户释放左键、按 ESC 键或将鼠标移动到围绕指定点的拖动矩形外部。

BOOL DragDetect(POINT pt) const;

参数

pt
鼠标的初始位置,以屏幕坐标表示。 该函数使用此点来确定拖动矩形的坐标。

返回值

如果用户在按住左键的同时将鼠标移到了拖动矩形之外,则返回值不为零。

如果用户在按住左键的同时未将鼠标移到了拖动矩形之外,则返回值为零。

注解

此成员函数模拟 DragDetect 函数的功能,如 Windows SDK 中所述。

CWnd::DrawAnimatedRects

绘制透明框架矩形并对它进行动画处理,以指示图标的打开或是窗口的最小化或最大化。

BOOL DrawAnimatedRects(
    int idAni,
    CONST RECT* lprcFrom,
    CONST RECT* lprcTo);

参数

idAni
指定动画的类型。 如果指定 IDANI_CAPTION,窗口标题将以动画形式从 lprcFrom 指定的位置移到 lprcTo 指定的位置。 效果类似于最小化或最大化窗口。

lprcFrom
指向 RECT 结构的指针,该结构指定图标或最小化窗口的位置和大小。

lprcTo
指向 RECT 结构的指针,该结构指定已还原窗口的位置和大小

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 DrawAnimatedRects 函数的功能,如 Windows SDK 中所述。

CWnd::DrawCaption

绘制窗口标题。

BOOL DrawCaption(
    CDC* pDC,
    LPCRECT lprc,
    UINT uFlags);

参数

pDC
一个指向设备上下文的指针。 该函数将窗口标题绘制到此设备上下文中。

lprc
指向 RECT 结构的指针,该结构指定窗口标题的边框。

uFlags
指定绘制选项。 有关完整的值列表,请参阅 DrawCaption

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 DrawCaption 函数的功能,如 Windows SDK 中所述。

CWnd::DrawMenuBar

重绘菜单栏。

void DrawMenuBar();

备注

如果在 Windows 创建窗口后更改了菜单栏,可调用此函数来绘制更改后的菜单栏。

示例

请参阅 CWnd::GetMenu 的示例。

CWnd::EnableActiveAccessibility

启用用户定义的 Active Accessibility 函数。

void EnableActiveAccessibility();

备注

MFC 的默认 Active Accessibility 支持对于标准窗口和控件(包括 ActiveX 控件)已足够;但是,如果 CWnd 派生类包含非窗口用户界面元素,则 MFC 无法识别它们。 在这种情况下,必须在类中重写相应的 Active Accessibility 成员函数,并且必须在类的构造函数中调用 EnableActiveAccessibility

CWnd::EnableDynamicLayout

启用或禁用动态布局管理器。 启用动态布局时,子窗口的位置和大小可以在用户调整窗口大小时动态调整。

void EnableDynamicLayout(BOOL bEnable = TRUE);

参数

bEnable
TRUE 表示启用动态布局;FALSE 表示禁用动态布局。

备注

如果想要启用动态布局,你不只需要调用此方法。 还必须提供指定动态布局信息,此信息指定窗口中的控件如何响应大小更改。 可以在资源编辑器中(或以编程方式)为每个控件指定此信息。 请参阅动态布局

CWnd::EnableD2DSupport

启用或禁用窗口 D2D 支持。 在初始化主窗口之前调用此方法。

void EnableD2DSupport(
    BOOL bEnable = TRUE,
    BOOL bUseDCRenderTarget = FALSE);

参数

bEnable
指定是打开还是关闭 D2D 支持。

bUseDCRenderTarget
指定是否使用设备上下文 (DC) 呈现器目标 CDCRenderTarget。 如果为 FALSE,则使用 CHwndRenderTarget

CWnd::EnableScrollBar

启用或禁用滚动条的一个或两个箭头。

BOOL EnableScrollBar(
    int nSBFlags,
    UINT nArrowFlags = ESB_ENABLE_BOTH);

参数

nSBFlags
指定滚动条类型。 可以是下列值之一:

  • SB_BOTH 启用或禁用与窗口关联的水平和垂直滚动条的箭头。

  • SB_HORZ 启用或禁用与窗口关联的水平滚动条的箭头。

  • SB_VERT 启用或禁用与窗口关联的垂直滚动条的箭头。

nArrowFlags
指定是启用还是禁用滚动条箭头,以及启用或禁用哪些箭头。 可以是下列值之一:

  • ESB_ENABLE_BOTH 启用滚动条的两个箭头(默认值)。

  • ESB_DISABLE_LTUP 禁用水平滚动条的向左箭头或垂直滚动条的向上箭头。

  • ESB_DISABLE_RTDN 禁用水平滚动条的向右箭头或垂直滚动条的向下箭头。

  • ESB_DISABLE_BOTH 禁用滚动条的两个箭头。

返回值

如果按指定启用或禁用了箭头,则返回非零值。 否则返回 0,表示箭头已处于请求的状态或发生错误。

CWnd::EnableScrollBarCtrl

启用或禁用此窗口的滚动条。

void EnableScrollBarCtrl(
    int nBar,
    BOOL bEnable = TRUE);

参数

nBar
滚动条标识符。

bEnable
指定是启用还是禁用滚动条。

注解

如果窗口包含同级滚动条控件,则使用该滚动条;否则使用窗口自身的滚动条。

CWnd::EnableToolTips

为给定的窗口启用工具提示。

BOOL EnableToolTips(BOOL bEnable = TRUE);

参数

bEnable
指定是启用还是禁用工具提示控件。 TRUE 启用该控件;FALSE 禁用该控件。

返回值

如果启用了工具提示,则返回 TRUE;否则返回 FALSE

备注

重写 OnToolHitTest 以提供窗口的一个或多个 TOOLINFO 结构。

注意

某些窗口(例如 CToolBar)提供 OnToolHitTest 的内置实现。

有关此结构的详细信息,请参阅 Windows SDK 中的 TOOLINFO

仅调用 EnableToolTips 并不足以显示子控件的工具提示,除非父窗口派生自 CFrameWnd。 这是因为,CFrameWndTTN_NEEDTEXT 通知提供默认处理程序。 如果父窗口不派生自 CFrameWnd,也就是说,如果它是一个对话框或窗体视图,则子控件的工具提示将无法正常显示,除非你为 TTN_NEEDTEXT 工具提示通知提供处理程序。 请参阅工具提示

EnableToolTips 为窗口提供的默认工具提示没有与其关联的文本。 若要检索要显示的工具提示的文本,TTN_NEEDTEXT 通知将发送到工具提示控件的父窗口,随即将显示工具提示窗口。 如果此消息没有处理程序可将某个值分配给 TOOLTIPTEXT 结构的 pszText 成员,则不会显示工具提示的文本。

示例

// From message map for CMdiView, a CView-derived class
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, &CMdiView::OnToolTipNotify)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, &CMdiView::OnToolTipNotify)

 

void CMdiView::OnInitialUpdate()
{
   CView::OnInitialUpdate();

   m_Edit.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
                 CRect(10, 10, 100, 100), this, IDC_TTEDIT);
   EnableToolTips(TRUE); // enable tool tips for view
}

//Notification handler
BOOL CMdiView::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(id);
   UNREFERENCED_PARAMETER(pResult);

   // need to handle both ANSI and UNICODE versions of the message
   TOOLTIPTEXTA *pTTTA = (TOOLTIPTEXTA*)pNMHDR;
   TOOLTIPTEXTW *pTTTW = (TOOLTIPTEXTW*)pNMHDR;
   CStringA strTipText;
   UINT_PTR nID = pNMHDR->idFrom;
   if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
       pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
   {
      // idFrom is actually the HWND of the tool
      nID = ::GetDlgCtrlID((HWND)nID);
   }

   if (nID != 0) // will be zero on a separator
      strTipText.Format("Control ID = %d", nID);

   if (pNMHDR->code == TTN_NEEDTEXTA)
   {
      strncpy_s(pTTTA->szText, sizeof(pTTTA->szText), strTipText,
                strTipText.GetLength() + 1);
   }
   else
   {
      ::MultiByteToWideChar(CP_ACP, 0, strTipText, strTipText.GetLength() + 1,
                            pTTTW->szText, sizeof(pTTTW->szText) / (sizeof pTTTW->szText[0]));
   }

   return TRUE; // message was handled
}

CWnd::EnableTrackingToolTips

启用或禁用跟踪工具提示。

BOOL EnableTrackingToolTips(BOOL bEnable = TRUE);

参数

bEnable
指定是要启用还是禁用跟踪工具提示。 如果此参数为 TRUE,则启用跟踪工具提示。 如果此参数为 FALSE,则禁用跟踪工具提示。

返回值

指示调用 EnableWindow 成员函数之前的状态。 如果窗口先前已禁用,则返回值不为零。 如果窗口先前已启用或发生错误,则返回值为 0。

注解

跟踪工具提示是可以在屏幕上动态定位的工具提示窗口。 通过快速更新位置,工具提示窗口可以呈现平滑移动或“轨迹”效果。如果需要工具提示文本在指针移动时跟踪指针位置,此功能很有用。

CWnd::EnableWindow

启用或禁用鼠标和键盘输入。

BOOL EnableWindow(BOOL bEnable = TRUE);

参数

bEnable
指定是要启用还是禁用给定的窗口。 如果此参数为 TRUE,则启用窗口。 如果此参数为 FALSE,则禁用窗口。

返回值

指示调用 EnableWindow 成员函数之前的状态。 如果窗口先前已禁用,则返回值不为零。 如果窗口先前已启用或发生错误,则返回值为 0。

备注

禁用输入时,将忽略鼠标单击和击键之类的输入。 启用输入时,窗口会处理所有输入。

如果已启用状态正在更改,则在此函数返回之前会发送 WM_ENABLE 消息。

如果已禁用输入,将隐式禁用所有子窗口,不过不会向它们发送 WM_ENABLE 消息。

必须先启用窗口才能激活它。 例如,如果应用程序正在显示一个无模式对话框并已禁用其主窗口,则必须在销毁对话框之前启用主窗口。 否则,另一个窗口将获得输入焦点并被激活。 如果禁用了子窗口,当 Windows 尝试确定哪个窗口应获取鼠标消息时,将忽略子窗口。

默认情况下,创建的窗口最初处于已启用状态。 应用程序可以在 CreateCreateEx 成员函数中指定 WS_DISABLED 样式来创建最初已禁用的窗口。 创建窗口后,应用程序还可以使用 EnableWindow 成员函数来启用或禁用该窗口。

应用程序可以使用此函数来启用或禁用对话框中的控件。 已禁用的控件无法接收输入焦点,用户也无法访问它。

示例

//CMyFileDialog is a CFileDialog-derived class
//OnInitDialog is the handler for WM_INITDIALOG
BOOL CMyFileDialog::OnInitDialog()
{
   CFileDialog::OnInitDialog();

   CWnd *pWndParent = GetParent();

   //make sure you add #include <dlgs.h> for IDs 'edt1' & 'stc3'

   //disables the 'file name' edit and static control
   //of the standard file open dialog

   //get handle of 'file name' combobox control & disable it
   CWnd *pWnd = pWndParent->GetDlgItem(cmb13);
   pWnd->EnableWindow(FALSE);

   //get handle of 'file name' static control & disable it
   pWnd = pWndParent->GetDlgItem(stc3);
   pWnd->EnableWindow(FALSE);

   return TRUE;
}

CWnd::EndModalLoop

终止对 RunModalLoop 的调用。

virtual void EndModalLoop(int nResult);

参数

nResult
包含要返回给 RunModalLoop 调用方的值。

注解

nResult 参数传播到 RunModalLoop 的返回值。

CWnd::EndModalState

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

virtual void EndModalState();

CWnd::EndPaint

标记给定窗口中的绘制结束部分。

void EndPaint(LPPAINTSTRUCT lpPaint);

参数

lpPaint
指向 PAINTSTRUCT 结构,该结构包含 BeginPaint 成员函数检索的绘制信息。

备注

每次调用 BeginPaint 成员函数都需要 EndPaint 成员函数,但仅在绘制完成后需要。

如果插入点已由 BeginPaint 成员函数隐藏,则 EndPaint 会将插入点还原到屏幕。

示例

请参阅 CWnd::BeginPaint 的示例。

CWnd::ExecuteDlgInit

启动对话框资源。

BOOL ExecuteDlgInit(LPCTSTR lpszResourceName);
BOOL ExecuteDlgInit(LPVOID lpResource);

参数

lpszResourceName
指向以 null 结尾的字符串的指针,该字符串指定资源的名称。

lpResource
指向资源的指针。

返回值

如果执行了对话框资源,则返回 TRUE;否则返回 FALSE

备注

ExecuteDlgInit 将使用绑定到执行模块的资源,或来自其他源的资源。 为此,ExecuteDlgInit 将通过调用 AfxFindResourceHandle 查找资源句柄。 如果 MFC 应用程序不使用共享 DLL (MFCx0[U][D].DLL),AfxFindResourceHandle 将调用 AfxGetResourceHandle,后者返回可执行文件的当前资源句柄。 如果 MFC 应用程序使用 MFCx0[U][D].DLL,AfxFindResourceHandle 将遍历共享和 MFC 扩展 DLL 的 CDynLinkLibrary 对象列表以查找正确的资源句柄。

CWnd::FilterToolTipMessage

由框架调用以显示工具提示消息。

void FilterToolTipMessage(MSG* pMsg);

参数

pMsg
指向工具提示消息的指针。

备注

在大多数 MFC 应用程序中,此方法由框架从 PreTranslateMessageEnableToolTips 调用,你不需要自行调用它。

但是,在某些应用程序(例如某些 ActiveX 控件)中,框架可能不会调用这些方法,你需要自行调用 FilterToolTipMessage。 有关详细信息,请参阅用于创建工具提示的方法

CWnd::FindWindow

返回顶级 CWnd,其窗口类由 lpszClassName 指定,其窗口名称或标题由 lpszWindowName 指定。

static CWnd* PASCAL FindWindow(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName);

参数

lpszClassName
指向指定窗口类名(WNDCLASS 结构)的以 null 结尾的字符串。 如果 lpClassNameNULL,则所有类名匹配。

lpszWindowName
指向指定窗口名称(窗口标题)的以 null 结尾的字符串。 如果 lpWindowNameNULL,则所有窗口名称匹配。

返回值

标识具有指定类名和窗口名称的窗口。 如果未找到此类窗口,则返回值为 NULL

CWnd* 可能是暂时性的,不应存储它以供稍后使用。

备注

此函数不搜索子窗口。

示例

// activate an application with a window with a specific class name
BOOL CMyApp::FirstInstance()
{
   CWnd *pWndPrev, *pWndChild;

   // Determine if a window with the class name exists...
   pWndPrev = CWnd::FindWindow(_T("MyNewClass"), NULL);
   if (NULL != pWndPrev)
   {
      // If so, does it have any popups?
      pWndChild = pWndPrev->GetLastActivePopup();

      // If iconic, restore the main window
      if (pWndPrev->IsIconic())
         pWndPrev->ShowWindow(SW_RESTORE);

      // Bring the main window or its popup to the foreground
      pWndChild->SetForegroundWindow();

      // and you are done activating the other application
      return FALSE;
   }

   return TRUE;
}

CWnd::FindWindowEx

检索其类名和窗口名称与指定的字符串匹配的窗口对象。

static CWnd* FindWindowEx(
    HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow);

参数

hwndParent
要搜索其子窗口的父窗口的句柄。

hwndChildAfter
子窗口的句柄。 搜索从 Z 顺序中的下一个子窗口开始。 子窗口必须是 hwndParent 的直接子窗口,而不仅仅是后代窗口。

lpszClass
指向以 null 结尾的字符串的指针,该字符串指定由先前的 RegisterClassRegisterClassEx 调用创建的类名或类原子。

lpszWindow
指向指定窗口名称(窗口标题)的以 null 结尾的字符串的指针。 如果此参数为 NULL,则所有窗口名称匹配。

返回值

如果该函数成功,则返回值是指向具有指定类名和窗口名称的窗口对象的指针。 如果函数失败,则返回值为 NULL

注解

此成员函数模拟 FindWindowEx 函数的功能,如 Windows SDK 中所述。

CWnd::FlashWindow

闪烁给定的窗口一次。

BOOL FlashWindow(BOOL bInvert);

参数

bInvert
指定 CWnd 是要闪烁还是返回原始状态。 如果 bInvertTRUE,则 CWnd 从一种状态闪烁到另一种状态。 如果 bInvertFALSE,则窗口返回其原始状态(活动或非活动)。

返回值

如果窗口在调用 FlashWindow 成员函数之前处于活动状态,则返回非零值;否则返回 0。

注解

对于连续闪烁,请创建系统计时器并重复调用 FlashWindow。 闪烁 CWnd 意味着更改其标题栏的外观,就如同 CWnd 从非活动状态变为活动状态,反之亦然。 (非活动标题栏变为活动标题栏;活动标题栏变为非活动标题栏。)

通常,会闪烁窗口以告知用户需要注意,但该窗口当前没有输入焦点。

仅当窗口获得输入焦点且不再闪烁时,bInvert 参数才应为 FALSE;在等待获得输入焦点时,它在连续调用中应该是 TRUE

对于最小化的窗口,此函数始终返回非零值。 如果窗口已最小化,FlashWindow 将闪烁窗口的图标;对于最小化的窗口将忽略 bInvert

示例

BOOL CPenWidthsDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   // set timer to cause dialog to flash
   SetTimer(1, 500, NULL);
   return TRUE; // return TRUE unless you set the focus to a control
}

void CPenWidthsDlg::OnTimer(UINT_PTR nIDEvent)
{
   // cause the dialog to flash
   FlashWindow(TRUE);
   CDialog::OnTimer(nIDEvent);
}

CWnd::FlashWindowEx

闪烁给定的窗口。

BOOL FlashWindowEx(
    DWORD dwFlags,
    UINT uCount,
    DWORD dwTimeout);

参数

*dwFlags*
指定闪存状态。 有关完整的值列表,请参阅 FLASHWINFO 结构。

uCount
指定闪烁窗口的次数。

dwTimeout
指定闪烁窗口的速率(以毫秒为单位)。 如果 dwTimeout 为零,则函数将使用默认光标闪烁速率。

返回值

返回值指定在调用 FlashWindowEx 函数之前的窗口状态。 如果窗口标题在执行该调用之前绘制为活动状态,则返回值不为零。 否则返回值为零。

备注

此方法模拟 FlashWindowEx 函数的功能,如 Windows SDK 中所述。

CWnd::FromHandle

在提供了窗口的句柄时返回指向 CWnd 对象的指针。 如果 CWnd 对象未附加到该句柄,则会创建并附加一个临时 CWnd 对象。

static CWnd* PASCAL FromHandle(HWND hWnd);

参数

hWnd
Windows 窗口的 HWND

返回值

在提供了窗口的句柄时返回指向 CWnd 对象的指针。 如果 CWnd 对象未附加到该句柄,则会创建并附加一个临时 CWnd 对象。

该指针可能是暂时性的,不应存储它以供稍后使用。

CWnd::FromHandlePermanent

在提供了窗口的句柄时返回指向 CWnd 对象的指针。

static CWnd* PASCAL FromHandlePermanent(HWND hWnd);

参数

hWnd
Windows 窗口的 HWND

返回值

一个指向 CWnd 对象的指针。

备注

如果未将 CWnd 对象附加到句柄,则返回 NULL

FromHandle 不同,此函数不会创建暂时性对象。

CWnd::get_accChild

由框架调用以检索指定子级的 IDispatch 接口地址。

virtual HRESULT get_accChild(
    VARIANT varChild,
    IDispatch** ppdispChild);

参数

varChild
标识要检索其 IDispatch 接口的子级。

ppdispChild
接收子对象的 IDispatch 接口的地址。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accChild 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accChild

CWnd::get_accChildCount

由框架调用调用以检索属于该对象的子级的个数。

virtual HRESULT get_accChildCount(long* pcountChildren);

参数

pcountChildren
接收子级数量。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accChildCount 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。 调用基类版本,然后添加非窗口子元素。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accChildCount

CWnd::get_accDefaultAction

由框架调用以检索描述对象默认操作的字符串。

virtual HRESULT get_accDefaultAction(
    VARIANT varChild,
    BSTR* pszDefaultAction);

参数

varChild
指定是要检索对象还是对象的子元素之一的默认操作。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszDefaultAction
接收本地化字符串的 BSTR 的地址,该字符串描述指定对象的默认操作;如果此对象没有默认操作,则为 NULL

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accDefaultAction 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可描述对象的默认操作。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accDefaultAction

CWnd::get_accDescription

由框架调用以检索描述指定对象的可视外观的字符串。

virtual HRESULT get_accDescription(
    VARIANT varChild,
    BSTR* pszDescription);

参数

varChild
指定是要检索对象还是对象的子元素之一的描述。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszDescription
接收描述指定对象的本地化字符串的 BSTR 的地址;如果未为此对象提供描述,则为 NULL

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accDescription 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可描述对象。 调用基类版本并添加描述。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accDescription

CWnd::get_accFocus

由框架调用以检索具有键盘焦点的对象。

virtual HRESULT get_accFocus(VARIANT* pvarChild);

参数

pvarChild
接收有关具有焦点的对象的信息。 请参阅 Windows SDK 中 IAccessible::get_accFocus 中的 pvarID

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accFocus 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accFocus

CWnd::get_accHelp

由框架调用以检索对象的 Help 属性字符串

virtual HRESULT get_accHelp(
    VARIANT varChild,
    BSTR* pszHelp);

参数

varChild
指定是要检索对象还是对象的子元素之一的帮助信息。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszHelp
接收本地化字符串的 BSTR 的地址,该字符串包含指定对象的帮助信息;如果未提供帮助信息,则为 NULL

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accHelp 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可为对象提供帮助文本。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accHelp

CWnd::get_accHelpTopic

由框架调用以检索与指定对象关联的 WinHelp 文件的完整路径以及该文件内相应主题的标识符

virtual HRESULT get_accHelpTopic(
    BSTR* pszHelpFile,
    VARIANT varChild,
    long* pidTopic);

参数

pszHelpFile
接收与指定对象关联的 WinHelp 文件的完整路径(如果有)的 BSTR 的地址。

varChild
指定是要检索对象还是对象的子元素之一的帮助主题。 此参数可以是 CHILDID_SELF(获取对象的帮助主题)或子 ID(获取对象的子元素之一的帮助主题)。

pidTopic
标识与指定的对象关联的帮助文件主题。 请参阅 Windows SDK 中 IAccessible::get_accHelpTopic 中的 pidTopic

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accHelpTopic 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可提供有关对象的帮助信息。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accHelpTopic

CWnd::get_accKeyboardShortcut

由框架调用以检索指定对象的快捷键或访问键。

virtual HRESULT get_accKeyboardShortcut(
    VARIANT varChild,
    BSTR* pszKeyboardShortcut);

参数

varChild
指定是要检索对象还是对象的子元素之一的键盘快捷方式。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszKeyboardShortcut
接收本地化字符串的 BSTR 的地址,该字符串标识键盘快捷方式;如果指定的对象没有关联的键盘快捷方式,则为 NULL

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accKeyboardShortcut 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可标识对象的键盘快捷方式。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accKeyboardShortcut

CWnd::get_accName

由框架调用以检索指定对象的名称。

virtual HRESULT get_accName(
    VARIANT varChild,
    BSTR* pszName);

参数

varChild
指定是要检索对象还是对象的子元素之一的名称。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszName
接收包含指定对象名称的字符串的 BSTR 的地址。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accName 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

CWnd 派生类中重写此函数可返回对象的名称。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accName

CWnd::get_accParent

由框架调用以检索对象父级的 IDispatch 接口。

virtual HRESULT get_accParent(IDispatch** ppdispParent);

参数

ppdispParent
接收父对象的 IDispatch 接口的地址。 如果不存在父级,或者子级无法访问其父级,则变量将设置为 NULL

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accParent 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

在大多数情况下都不需要重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accParent

CWnd::get_accRole

由框架调用以检索描述指定对象的角色的信息。

virtual HRESULT get_accRole(
    VARIANT varChild,
    VARIANT* pvarRole);

参数

varChild
指定是要检索对象还是对象的子元素之一的角色信息。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pvarRole
接收角色信息。 请参阅 Windows SDK 中 IAccessible::get_accRole 中的 pvarRole

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accRole 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accRole

CWnd::get_accSelection

由框架调用以检索该对象的选定子级。

virtual HRESULT get_accSelection(VARIANT* pvarChildren);

参数

pvarChildren
接收有关选择了哪些子级的信息。 请参阅 Windows SDK 中 IAccessible::get_accSelection 中的 pvarChildren

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accSelection 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accSelection

CWnd::get_accState

由框架调用以检索指定对象的当前状态。

virtual HRESULT get_accState(
    VARIANT varChild,
    VARIANT* pvarState);

参数

varChild
指定是要检索对象还是对象的子元素之一的状态信息。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pvarState
接收有关对象状态的信息。 请参阅 Windows SDK 中 IAccessible::get_accState 中的 pvarState

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accState 的“返回值”

备注

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accState

CWnd::get_accValue

由框架调用以检索指定对象的值。

virtual HRESULT get_accValue(
    VARIANT varChild,
    BSTR* pszValue);

参数

varChild
指定是要检索对象还是对象的子元素之一的值信息。 此参数可为 CHILDID_SELF(获取有关对象的信息)或子 ID(获取有关对象的子元素的信息)。

pszValue
接收包含对象当前值的本地化字符串的 BSTR 的地址。

返回值

如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::get_accValue 的“返回值”

注解

此函数是 MFC 的 Active Accessibility 支持的一部分。

如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd 派生类中重写此函数。

有关详细信息,请参阅 Windows SDK 中的 IAccessible::get_accValue

CWnd::GetActiveWindow

检索指向活动窗口的指针。

static CWnd* PASCAL GetActiveWindow();

返回值

返回活动窗口;如果在调用时没有任何窗口处于活动状态,则返回 NULL。 该指针可能是暂时性的,不应存储它以供稍后使用。

注解

活动窗口是具有当前输入焦点的窗口,或者是由 SetActiveWindow 成员函数显式设为活动状态的窗口。

CWnd::GetAncestor

检索指定窗口的上级先窗口对象。

CWnd* GetAncestor(UINT gaFlags) const;

参数

gaFlags
指定要检索的上级。 有关可能值的完整列表,请参阅 GetAncestor

返回值

如果该函数成功,则返回值是指向上级窗口对象的指针。 如果函数失败,则返回值为 NULL

注解

此成员函数模拟 GetAncestor 函数的功能,如 Windows SDK 中所述。

CWnd::GetCapture

检索具有鼠标捕获的窗口。

static CWnd* PASCAL GetCapture();

返回值

标识具有鼠标捕获的窗口。 如果没有任何窗口具有鼠标捕获,则返回值为 NULL

该返回值可能是暂时性的,不应存储它以供稍后使用。

备注

在任意给定时间,只有一个窗口具有鼠标捕获。 调用 SetCapture 成员函数时,窗口会接收鼠标捕获。 无论光标是否在其边界范围内,此窗口都会接收鼠标输入。

CWnd::GetCaretPos

检索插入点当前位置的客户端坐标并将其作为 CPoint 返回。

static CPoint PASCAL GetCaretPos();

返回值

包含插入点位置坐标的 CPoint 对象。

备注

插入点位置是以 CWnd 窗口的客户端坐标形式指定的。

CWnd::GetCheckedRadioButton

检索指定组中当前选中的单选按钮的 ID。

int GetCheckedRadioButton(
    int nIDFirstButton,
    int nIDLastButton);

参数

nIDFirstButton
指定组中第一个单选按钮的整数标识符。

nIDLastButton
指定组中最后一个单选按钮的整数标识符。

返回值

选中的单选按钮的 ID;如果未选中任何单选按钮,则为 0。

CWnd::GetClientRect

CWnd 工作区的客户端坐标复制到 lpRect 指向的结构中。

void GetClientRect(LPRECT lpRect) const;

参数

lpRect
指向接收客户端坐标的 RECT 结构CRect 对象。 lefttop 成员将为 0。 rightbottom 成员将包含窗口的宽度和高度。

备注

客户端坐标指定工作区的左上角和右下角。 由于客户端坐标相对于 CWnd 工作区的左上角,因此左上角的坐标是 (0,0)。

示例

请参阅 CWnd::IsIconic 的示例。

CWnd::GetClipboardOwner

检索剪贴板的当前所有者。

static CWnd* PASCAL GetClipboardOwner();

返回值

如果该函数成功,则标识拥有剪贴板的窗口。 否则为 NULL

返回的指针可能是暂时性的,不应存储它以供稍后使用。

注解

即使剪贴板当前没有所有者,它也仍可以包含数据。

CWnd::GetClipboardViewer

检索剪贴板查看器链中的第一个窗口。

static CWnd* PASCAL GetClipboardViewer();

返回值

如果成功,则标识当前负责显示剪贴板的窗口;否则为 NULL(例如,如果没有查看器)。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

CWnd::GetControlUnknown

调用此成员函数可检索指向未知 OLE 控件的指针。

LPUNKNOWN GetControlUnknown();

返回值

指向此 CWnd 对象表示的 OLE 控件的 IUnknown 接口的指针。 如果此对象不表示 OLE 控件,则返回值为 NULL

备注

不应释放此 IUnknown 指针。 通常,你会使用它来获取控件的特定接口。

GetControlUnknown 返回的接口指针不计入引用计数。 除非先前已对该指针调用 IUnknown::AddRef,否则请不要对它调用 IUnknown::Release

示例

// The following code fragment is taken from CMyDlg::OnInitDialog
// CMyDlg is a CDialog-derived class.

// IDC_MSACALCTRL1 is the ID of the Calendar control OCX embedded
// on this dialog
CWnd *pWndCal = GetDlgItem(IDC_MSACALCTRL1);

// Use the IUnknown of the control
LPUNKNOWN pUnk = pWndCal->GetControlUnknown();

// From there get the IDispatch interface of control
LPDISPATCH pDisp = NULL;
pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDisp);

// use IDispatch method to invoke the control's functionality

CWnd::GetCurrentMessage

返回指向此窗口当前正在处理的消息的指针。 仅在处于 OnMessage 消息处理程序成员函数中时才调用

static const MSG* PASCAL GetCurrentMessage();

返回值

返回指向 MSG 结构的指针,该结构包含窗口当前正在处理的消息。 仅在处于 OnMessage 处理程序中时才调用

示例

请参阅 CMDIFrameWnd::MDICascade 的示例。

CWnd::GetDC

检索指向工作区的通用上下文、类上下文或专用设备上下文的指针,具体取决于为 CWnd 指定的类样式。

CDC* GetDC();

返回值

如果成功,则标识 CWnd 工作区的设备上下文;否则返回值为 NULL。 该指针可能是暂时性的,不应存储它以供稍后使用。

备注

对于通用设备上下文,GetDC 会在每次检索上下文时为其分配默认属性。 对于类和专用上下文,GetDC 将先前分配的属性保持不变。 设备上下文可以在后续的图形设备接口 (GDI) 函数中使用,以在工作区进行绘制。

除非设备上下文属于窗口类,否则必须调用 ReleaseDC 成员函数以在绘制后释放上下文。

如果在注册类时将 CS_CLASSDCCS_OWNDCCS_PARENTDC 指定为 WNDCLASS 结构中的样式,则 CWnd 成员函数将返回属于 GetDC 类的设备上下文。

CWnd::GetDCEx

检索 CWnd 窗口的设备上下文的句柄。

CDC* GetDCEx(
    CRgn* prgnClip,
    DWORD flags);

参数

prgnClip
标识可与客户端窗口的可见区域组合的剪切区域。

flags
可使用以下预设值之一:

  • DCX_CACHE 从缓存而不是 OWNDCCLASSDC 窗口返回设备上下文。 重写 CS_OWNDCCS_CLASSDC

  • DCX_CLIPCHILDREN 排除 CWnd 窗口下面的所有子窗口的可见区域。

  • DCX_CLIPSIBLINGS 排除 CWnd 窗口上面的所有同级窗口的可见区域。

  • DCX_EXCLUDERGN 从返回的设备上下文的可见区域中排除 prgnClip 标识的剪切区域。

  • DCX_INTERSECTRGN 与返回的设备上下文的可见区域中由 prgnClip 标识的剪切区域相交。

  • DCX_LOCKWINDOWUPDATE 即使存在以其他方式排除此窗口的有效 LockWindowUpdate 调用,也允许绘制。 此值用于在跟踪期间绘制。

  • DCX_PARENTCLIP 使用父窗口的可见区域,并忽略父窗口的 WS_CLIPCHILDRENWS_PARENTDC 样式位。 此值将设备上下文的原点设置为 CWnd 窗口的左上角。

  • DCX_WINDOW 返回对应于窗口矩形而不是客户端矩形的设备上下文。

返回值

如果该函数成功,则返回指定窗口的设备上下文;否则返回 NULL

备注

设备上下文可以在后续的 GDI 函数中使用,以便在工作区中进行绘制。

此函数是 GetDC 函数的扩展,使应用程序能够更好地控制如何以及是否剪裁窗口的设备上下文。

除非设备上下文属于窗口类,否则必须调用 ReleaseDC 函数以在绘制后释放上下文。 由于在任意给定时间只有五个通用设备上下文可用,因此无法释放设备上下文可能会导致其他应用程序无法访问设备上下文。

若要获取缓存的设备上下文,应用程序必须指定 DCX_CACHE。 如果未指定 DCX_CACHE 并且窗口不是 CS_OWNDCCS_CLASSDC,则此函数将返回 NULL

如果在注册类时在 WNDCLASS 结构中指定了 CS_CLASSDCCS_OWNDCCS_PARENTDC 样式,则 GetDCEx 函数将返回具有特殊特征的设备上下文。

有关这些特征的详细信息,请参阅 Windows SDK 中 WNDCLASS 结构的介绍。

CWnd::GetDCRenderTarget

检索 CWnd 窗口的设备上下文 (DC) 呈现目标。

CDCRenderTarget* GetDCRenderTarget();

返回值

如果该函数成功,则返回指定窗口的设备上下文呈现目标;否则返回 NULL

备注

CWnd::GetDescendantWindow

调用此成员函数可查找给定 ID 指定的后代窗口。

CWnd* GetDescendantWindow(
    int nID,
    BOOL bOnlyPerm = FALSE) const;

参数

nID
指定要检索的控件或子窗口的标识符。

bOnlyPerm
指定要返回的窗口是否可为暂时性的。 如果为 TRUE,则只能返回永久性窗口;如果为 FALSE,则该函数可以返回暂时性窗口。 有关暂时性窗口的详细信息,请参阅技术说明 3

返回值

指向 CWnd 对象的指针;如果找不到子窗口,则为 NULL

注解

此成员函数搜索整个子窗口树,而不仅仅是直接子窗口。

CWnd::GetDesktopWindow

返回 Windows 桌面窗口。

static CWnd* PASCAL GetDesktopWindow();

返回值

标识 Windows 桌面窗口。 此指针可能是暂时性的,不应存储它以供稍后使用。

备注

桌面窗口覆盖整个屏幕,是绘制所有图标和其他窗口的区域。

CWnd::GetDlgCtrlID

返回任何子窗口的窗口或控件 ID 值,而不仅仅是对话框中控件的 ID。

int GetDlgCtrlID() const;

返回值

如果该函数成功,则返回 CWnd 子窗口的数字标识符;否则返回 0。

注解

由于顶级窗口没有 ID 值,如果 CWnd 是顶级窗口,则此函数的返回值无效。

示例

请参阅 CWnd::OnCtlColor 的示例。

CWnd::GetDlgItem

检索指向对话框或其他窗口中指定控件或子窗口的指针。

CWnd* GetDlgItem(int nID) const;

void GetDlgItem(
    int nID,
    HWND* phWnd) const;

参数

nID
指定要检索的控件或子窗口的标识符。

phWnd
指向子窗口的指针。

返回值

指向给定控件或子窗口的指针。 如果不存在具有 nID 参数指定的整数 ID 的控件,则值为 NULL

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

返回的指针通常强制转换为 nID 标识的控件的类型。

示例

// uses GetDlgItem to return a pointer to a user interface control
CEdit *pBoxOne;
pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);
GotoDlgCtrl(pBoxOne);

CWnd::GetDlgItemInt

检索 nID 标识的控件的文本。

UINT GetDlgItemInt(
    int nID,
    BOOL* lpTrans = NULL,
    BOOL bSigned = TRUE) const;

参数

nID
指定要转换的对话框控件的整数标识符。

lpTrans
指向要接收已转换标志的布尔变量。

bSigned
指定要检索的值是否带符号。

返回值

指定对话框项文本的转换值。 由于 0 是有效的返回值,因此必须使用 lpTrans 来检测错误。 如果需要带符号的返回值,请将其转换为 int 类型。

如果转换后的数字大于 INT_MAX(对于带符号数字)或 UINT_MAX(对于无符号数字),则该函数将返回 0。

发生错误时,例如遇到非数字字符和超过上述最大值时,GetDlgItemInt 会将 0 复制到 lpTrans 指向的位置。 如果未发生错误,lpTrans 将收到非零值。 如果 lpTransNULL,则 GetDlgItemInt 不会发出有关错误的警告。

备注

它通过去除文本开头的任何多余空格并转换十进制数字,将给定对话框中指定控件的文本转换为整数值。 它在到达文本末尾或遇到任何非数字字符时会停止转换。

如果 bSignedTRUE,则 GetDlgItemInt 会检查文本开头的减号 (-) 并将文本转换为带符号的数字。 否则,它会创建一个无符号值。

它向控件发送 WM_GETTEXT 消息。

CWnd::GetDlgItemText

调用此成员函数可检索与对话框中控件关联的标题或文本。

int GetDlgItemText(
    int nID,
    LPTSTR lpStr,
    int nMaxCount) const;

int GetDlgItemText(
    int nID,
    CString& rString) const;

参数

nID
指定要检索其标题的控件的整数标识符。

lpStr
指向要接收控件标题或文本的缓冲区。

nMaxCount
指定要复制到 lpStr 的字符串的最大长度(以字符为单位)。 如果字符串长于 nMaxCount,则将其截断。

rString
CString 的引用。

返回值

指定复制到缓冲区的实际字符数,不包括结尾的 null 字符。 如果未复制文本,则值为 0。

备注

GetDlgItemText 成员函数将文本复制到 lpStr 指向的位置,并返回复制的字节数。

CWnd::GetDSCCursor

调用此成员函数可检索指向由数据源控件的 DataSourceUserNamePassword 和 SQL 属性定义的基础光标的指针。

IUnknown* GetDSCCursor();

返回值

指向由数据源控件定义的光标的指针。 MFC 将负责对指针调用 AddRef

备注

使用返回的指针设置复杂数据绑定控件(例如数据绑定网格控件)的 ICursor 属性。 在第一个绑定控件请求其光标之前,数据源控件不会变为活动状态。 这可以通过调用 GetDSCCursor 显式发生,也可以通过 MFC 绑定管理器隐式发生。 无论哪种情况,都可以通过对返回的指向 IUnknown 的指针依次调用 GetDSCCursorRelease 来强制数据源控件变为活动状态。 激活会导致数据源控件尝试连接到基础数据源。 返回的指针可在下面的上下文中使用:

示例

BOOL CMyDlg::OnInitDialog()
{
   // Find the child controls on the dialog
   HRESULT hr = E_FAIL;
   CWnd *pDSC = GetDlgItem(IDC_DATASOURCE);
   CWnd *pListWnd = GetDlgItem(IDC_DBLIST1);
   IUnknown *punkList = pListWnd->GetControlUnknown();
   IDBList *pList = NULL;

   if (NULL != punkList)
   {
      hr = punkList->QueryInterface(__uuidof(IDBList), (void **)&pList);
   }

   if (SUCCEEDED(hr))
   {
      // Tell the MFC binding manager that we are
      // binding DISPID 3 to the data-source control.
      pListWnd->BindProperty(0x3, pDSC);

      // Tell the listbox which field to expose as its bound column
      pList->put_BoundColumn(_T("ContactFirstName"));

      // Tell the listbox which cursor and column to populate its list from
      pList->put_ListField(_T("ContactFirstName"));

      IUnknown *punkCursor = pDSC->GetDSCCursor();
      if (NULL != punkCursor)
      {
         punkCursor->Release();
      }

      pList->Release();
      return TRUE;
   }

CWnd::GetDynamicLayout

检索指向动态布局管理器对象的指针。

CMFCDynamicLayout* GetDynamicLayout();

返回值

指向动态布局管理器对象的指针;如果未启用动态布局,则为 NULL

备注

窗口对象拥有并管理返回的指针的生存期,因此它只应该用于访问对象;不要删除指针或永久存储指针。

CWnd::GetExStyle

返回窗口的扩展样式。

DWORD GetExStyle() const;

返回值

窗口的扩展样式。 有关 MFC 中使用的扩展窗口样式的详细信息,请参阅扩展窗口样式

CWnd::GetFocus

检索指向当前具有输入焦点的 CWnd 的指针。

static CWnd* PASCAL GetFocus();

返回值

指向具有当前焦点的窗口的指针;如果没有焦点窗口,则为 NULL

该指针可能是暂时性的,不应存储它以供稍后使用。

CWnd::GetFont

WM_GETFONT 消息发送到窗口以检索当前字体。

CFont* GetFont() const;

返回值

指向附加到窗口当前字体的 CFont 对象的指针。

备注

除非窗口处理 WM_GETFONT 消息,否则此方法不起作用。 许多从 CWnd 派生的 MFC 类都会处理此消息,因为它们附加到一个预定义的窗口类,该类包括 WM_GETFONT 消息的消息处理程序。 若要使用此方法,从 CWnd 派生的类必须为 WM_GETFONT 消息定义一个方法处理程序。

CWnd::GetForegroundWindow

返回指向前台窗口(用户当前正在使用的窗口)的指针。

static CWnd* PASCAL GetForegroundWindow();

返回值

指向前台窗口的指针。 这可能是一个暂时性的 CWnd 对象。

注解

前台窗口仅适用于顶级窗口(框架窗口或对话框)。

CWnd::GetIcon

调用此成员函数可获取 bBigIcon 指示的大图标 (32x32) 的句柄或小图标 (16x16) 的句柄。

HICON GetIcon(BOOL bBigIcon) const;

参数

bBigIcon
如果为 TRUE,则指定一个 32 x 32 像素的图标;如果为 FALSE,则指定一个 16 x 16 像素的图标。

返回值

图标的图柄。 如果不成功,则返回 NULL

CWnd::GetLastActivePopup

确定最近处于活动状态的由 CWnd 拥有的弹出窗口。

CWnd* GetLastActivePopup() const;

返回值

标识最近处于活动状态的弹出窗口。 如果满足以下任何条件,则返回值是窗口本身:

  • 该窗口本身最近处于活动状态。

  • 该窗口不拥有任何弹出窗口。

  • 该窗口不是顶级窗口,或者由另一窗口拥有。

该指针可能是暂时性的,不应存储它以供稍后使用。

示例

请参阅 CWnd::FindWindow 的示例。

CWnd::GetLayeredWindowAttributes

检索分层窗口的不透明度和透明度颜色键。

BOOL GetLayeredWindowAttributes(
    COLORREF* pcrKey,
    BYTE* pbAlpha,
    DWORD* pdwFlags) const;

参数

pcrKey
指向 COLORREF 值的指针,该值接收组合分层窗口时要使用的透明度颜色键。 窗口以这种颜色绘制的所有像素都是透明的。 如果不需要该参数,则此项可为 NULL

pbAlpha
指向接收用于描述分层窗口不透明度的 Alpha 值的 BYTE 的指针。 当 pbAlpha 引用的变量为 0 时,窗口是完全透明的。 当 pbAlpha 引用的变量为 255 时,窗口是不透明的。 如果不需要该参数,则此项可为 NULL

pdwFlags
指向接收分层标志的 DWORD 的指针。 如果不需要该参数,则此项可为 NULL。 有关可能值的完整列表,请参阅 `GetLayeredWindowAttributes

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 GetLayeredWindowAttributes 函数的功能,如 Windows SDK 中所述。

CWnd::GetMenu

检索指向此窗口的菜单的指针。

CMenu* GetMenu() const;

返回值

标识菜单。 如果 CWnd 没有菜单,则值为 NULL。 如果 CWnd 是子窗口,则返回值是未定义的。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

注解

不应将此函数用于子窗口,因为它们没有菜单。

示例

void CMainFrame::OnCwndDeletefilemenu()
{
   // This example deletes the leftmost popup menu or leftmost
   // popup menu item from the application's main window.
   CWnd *pMain = AfxGetMainWnd();

   // The main window _can_ be NULL, so this code
   // doesn't ASSERT and actually tests.
   if (pMain != NULL)
   {
      // Get the main window's menu
      CMenu *pMenu = pMain->GetMenu();

      // If there is a menu and it has items, we'll
      // delete the first one.
      if (pMenu != NULL && pMenu->GetMenuItemCount() > 0)
      {
         pMenu->DeleteMenu(0, MF_BYPOSITION);
         // force a redraw of the menu bar
         pMain->DrawMenuBar();
      }

      // No need to delete pMenu because it is an MFC
      // temporary object.
   }
}

CWnd::GetMenuBarInfo

检索有关指定的菜单栏的信息。

BOOL GetMenuBarInfo(
    LONG idObject,
    LONG idItem,
    PMENUBARINFO pmbi) const;

参数

idObject
指定菜单对象。 有关可能值的列表,请参阅 GetMenuBarInfo

idItem
指定要检索其信息的项。 如果此参数为零,则函数将检索有关菜单本身的信息。 如果此参数为 1,则函数将检索有关菜单中第一项的信息,依此类推。

pmbi
指向接收信息的 MENUBARINFO 结构的指针。

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 GetMenuBarInfo 函数的功能,如 Windows SDK 中所述。

CWnd::GetNextDlgGroupItem

在对话框的控件组中搜索上一个或下一个控件。

CWnd* GetNextDlgGroupItem(
    CWnd* pWndCtl,
    BOOL bPrevious = FALSE) const;

COleControlSiteOrWnd* GetNextDlgGroupItem(
    COleControlSiteOrWnd* pCurSiteOrWnd = NULL) const;

参数

pWndCtl
标识要用作搜索起点的控件。

bPrevious
指定函数如何在对话框中搜索控件组。 如果为 TRUE,则函数将搜索组中的前一个控件;如果为 FALSE,则搜索组中的下一个控件。

pCurSiteOrWnd
标识 COleControlSiteOrWnd 控件。 有关 COleControlSiteOrWnd 的详细信息,请参阅“注解”

返回值

如果成员函数成功,则返回指向组中上一个或下一个控件的指针。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

控件组以使用 WS_GROUP 样式创建的控件开始,以不是使用 WS_GROUP 样式创建的最后一个控件结束。

默认情况下,GetNextDlgGroupItem 成员函数返回指向组中下一个控件的指针。 如果 pWndCtl 标识组中的第一个控件并且 bPreviousTRUE,则 GetNextDlgGroupItem 返回指向组中最后一个控件的指针。

注意

由于 MFC 支持无窗口 ActiveX 控件、标准 ActiveX 控件和窗口,因此仅通过 HWND 引用控件不再足够。 COleControlSiteOrWnd 对象包含用于将其标识为有窗口 ActiveX 控件、无窗口 ActiveX 控件或窗口的信息,如下所述:

控件或窗口类型 标识信息
有窗口 ActiveX 控件 包含 HWND 并将 COleControlSite 对象与其关联。 COleControlSiteOrWndm_hWnd 成员设置为控件的 HWNDm_pSite 成员指向控件的 COleControlSite
无窗口 ActiveX 控件 不包含 HWNDCOleControlSiteOrWndm_pSite 成员指向控件的 COleControlSitem_hWnd 成员为 NULL
标准窗口 仅包含 HWNDCOleControlSiteOrWndm_hWnd 成员设置为窗口的 HWND,m_pSite 成员为 NULL

CWnd::GetNextDlgTabItem

检索指向使用 WS_TABSTOP 样式创建的第一个控件的指针,该控件在指定的控件之前或之后。

CWnd* GetNextDlgTabItem(
    CWnd* pWndCtl,
    BOOL bPrevious = FALSE) const;

COleControlSiteOrWnd* GetNextDlgTabItem(
    COleControlSiteOrWnd* pCurSiteOrWnd,
    BOOL bPrevious) const;

参数

pWndCtl
标识要用作搜索起点的控件。

pCurSiteOrWnd
标识 COleControlSiteOrWnd 控件。 有关 COleControlSiteOrWnd的更多信息,请参见CWnd::GetNextDlgGroupItem

bPrevious
指定函数如何搜索对话框。 如果为 TRUE,则函数将搜索对话框中的前一个控件;如果为 FALSE,则搜索下一个控件。

返回值

如果成员函数成功,则返回指向具有 WS_TABSTOP 样式的上一个或下一个控件的指针。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

有关 COleControlSiteOrWnd的更多信息,请参见CWnd::GetNextDlgGroupItem

CWnd::GetNextWindow

搜索窗口管理器列表中的下一个(或上一个)窗口。

CWnd* GetNextWindow(UINT nFlag = GW_HWNDNEXT) const;

参数

nFlag
指定函数是要返回指向下一个窗口还是上一个窗口的指针。 此参数可为 GW_HWNDNEXT,即返回窗口管理器列表中 CWnd 对象后面的窗口;也可为 GW_HWNDPREV,即返回窗口管理器列表中的前一个窗口。

返回值

如果成员函数成功,则标识窗口管理器列表中的下一个(或上一个)窗口。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

窗口管理器列表包含所有顶级窗口、其关联的子窗口以及任何子窗口的子窗口的条目。

如果 CWnd 是顶级窗口,则函数将搜索下一个(或上一个)顶级窗口;如果 CWnd 是子窗口,则函数将搜索下一个(或上一个)子窗口。

CWnd::GetOleControlSite

检索指定 ActiveX 控件的自定义站点。

COleControlSite* GetOleControlSite(UINT idControl) const;

参数

idControl
ActiveX 控件的 ID。

CWnd::GetOpenClipboardWindow

检索当前打开了剪贴板的窗口的句柄。

static CWnd* PASCAL GetOpenClipboardWindow();

返回值

如果函数成功,则返回当前打开了剪贴板的窗口的句柄;否则返回 NULL

CWnd::GetOwner

检索指向窗口所有者的指针。

CWnd* GetOwner() const;

返回值

一个指向 CWnd 对象的指针。

注解

如果窗口没有所有者,则默认会返回指向父窗口对象的指针。 请注意,所有者和被拥有者之间的关系在父子级别方面存在多种重要差别。 例如,具有父级的窗口局限于其父窗口的工作区。 被拥有窗口可以在桌面上的任何位置绘制。

此函数的所有权概念不同于 GetWindow 的所有权概念。

CWnd::GetParent

调用此函数可获取指向子窗口的父窗口(如果有)的指针。

CWnd* GetParent() const;

返回值

请参阅 Windows SDK 中 GetParent 的“返回值”部分。

备注

GetParent 函数返回指向直接父级(如果存在)的指针。 相反,GetParentOwner 函数返回指向最直接父窗口或非子窗口(没有 WS_CHILD 样式)的所有者窗口的指针。 如果子窗口包含子窗口,则 GetParentGetParentOwner 将返回不同的结果。

CWnd::GetParentFrame

调用此成员函数可检索父框架窗口。

CFrameWnd* GetParentFrame() const;

返回值

如果成功,则返回指向框架窗口的指针;否则返回 NULL

注解

成员函数向上搜索父链,直到找到 CFrameWnd(或派生类)对象。

CWnd::GetParentOwner

调用此成员函数可获取指向子窗口的父窗口或所有者窗口的指针。

CWnd* GetParentOwner() const;

返回值

一个指向 CWnd 对象的指针。 如果 CWnd 对象未附加到该句柄,则会创建并附加一个临时 CWnd 对象。 该指针可能是暂时性的,不应存储它以供稍后使用。

注解

GetParentOwner 返回指向最直接父窗口或非子窗口(没有 WS_CHILD 样式)的所有者窗口的指针。 可以使用 SetOwner 设置当前所有者窗口。 默认情况下,窗口的父级是它的所有者。

相反,GetParent 函数返回指向直接父级的指针,无论该父级是否为子窗口。 如果子窗口包含子窗口,则 GetParentGetParentOwner 将返回不同的结果。

CWnd::GetProperty

调用此成员函数可获取 dwDispID 指定的 ActiveX 控件属性。

void GetProperty(
    DISPID dwDispID,
    VARTYPE vtProp,
    void* pvProp)const;

参数

dwDispID
标识要检索的属性。

vtProp
指定要检索的属性的类型。 有关可能的值,请参阅 COleDispatchDriver::InvokeHelper 的“注解”部分。

pvProp
将接收属性值的变量的地址。 它必须与 vtProp指定的类型匹配。

备注

GetProperty 通过 pvProp 返回值。

注意

只能对表示 ActiveX 控件的 CWnd 对象调用此函数。

有关将此成员函数用于 ActiveX 控件容器的详细信息,请参阅 ActiveX 控件容器:对 ActiveX 控件容器中的 ActiveX 控件编程一文。

CWnd::GetRenderTarget

获取与此窗口相关联的呈现目标。

CHwndRenderTarget* GetRenderTarget();

返回值

指向呈现目标的指针,或 NULL

CWnd::GetSafeHwnd

返回 m_hWnd;如果 this 指针是 NULL,则返回 NULL

HWND GetSafeHwnd() const;

返回值

返回窗口的窗口句柄。 如果 CWnd 未附加到窗口或与 NULLCWnd 指针结合使用,则返回 NULL

示例

请参阅 CWnd::SubclassWindow 的示例。

CWnd::GetSafeOwner

调用此成员函数可检索应该用于对话框或其他模式窗口的所有者窗口。

static CWnd* GetSafeOwner(
    CWnd* pParent = NULL,
    HWND* pWndTop = NULL);

参数

pParent
指向父 CWnd 窗口的指针。 可为 NULL

pWndTop
指向当前位于顶层的窗口的指针。 可为 NULL

返回值

指向给定窗口的安全所有者的指针。

备注

安全所有者是 pParent 的第一个非子级父窗口。 如果 pParentNULL,则线程的主窗口(通过 AfxGetMainWnd 检索)用于查找所有者。

注意

框架本身使用此函数来确定未指定所有者的对话框和属性表的正确所有者窗口。

CWnd::GetScrollBarCtrl

调用此成员函数可获取指向指定的同级滚动条或拆分窗口的指针。

virtual CScrollBar* GetScrollBarCtrl(int nBar) const;

参数

nBar
指定滚动条的类型。 该参数可采用以下值之一:

  • SB_HORZ 检索水平滚动条的位置。

  • SB_VERT 检索垂直滚动条的位置。

返回值

返回同级滚动条控件;如果没有此类控件,则返回 NULL

注解

无法对在创建窗口期间设置 WS_HSCROLLWS_VSCROLL 位时创建的滚动条运行此成员函数。 此函数的 CWnd 实现只返回 NULL。 派生类(例如 CView)实现所述的功能。

CWnd::GetScrollBarInfo

检索有关指定滚动条的信息。

BOOL GetScrollBarInfo(
    LONG idObject,
    PSCROLLBARINFO psbi) const;

参数

idObject
指定菜单对象。 有关可能值的列表,请参阅 GetScrollBarInfo

psbi
指向接收信息的 SCROLLBARINFO 结构的指针。

返回值

如果函数成功,则为非零值;否则为

注解

此成员函数模拟 GetScrollBarInfo 函数的功能,如 Windows SDK 中所述。

CWnd::GetScrollInfo

调用此成员函数可检索 SCROLLINFO 结构维护的有关滚动条的信息。

BOOL GetScrollInfo(
    int nBar,
    LPSCROLLINFO lpScrollInfo,
    UINT nMask = SIF_ALL);

参数

nBar
指定滚动条是控件,还是窗口的非工作区的一部分。 如果它是非工作区的一部分,则 nBar 还会指示滚动条是水平定位、垂直定位还是同时采用这两种定位方式。 必须是下列其中一项:

  • SB_CTL 检索滚动条控件的参数。 m_hWnd 数据成员必须是滚动条控件的句柄。

  • SB_HORZ 检索窗口标准水平滚动条的参数。

  • SB_VERT 检索窗口标准垂直滚动条的参数。

lpScrollInfo
指向 SCROLLINFO 结构的指针。 有关此结构的详细信息,请参阅 Windows SDK。

nMask
指定要检索的滚动条参数。 默认会指定 SIF_PAGESIF_POSSIF_TRACKPOSSIF_RANGE 的组合。 有关 nMask 值的详细信息,请参阅 SCROLLINFO

返回值

如果消息检索了任何值,则返回值为 TRUE。 否则为 FALSE

注解

GetScrollInfo 允许应用程序使用 32 位滚动位置。

SCROLLINFO 结构包含有关滚动条的信息,包括最小和最大滚动位置、页面大小以及滚动框 (Thumb) 的位置。 若要详细了解如何更改结构默认值,请参阅 Windows SDK 中的 SCROLLINFO 结构主题。

指示滚动条位置的 MFC Windows 消息处理程序 CWnd::OnHScrollCWnd::OnVScroll 仅提供 16 位位置数据。 GetScrollInfoSetScrollInfo 提供 32 位滚动条位置数据。 因此,应用程序可以在处理 CWnd::OnHScrollCWnd::OnVScroll 以获取 32 位滚动条位置数据时调用 GetScrollInfo

CWnd::GetScrollLimit

调用此成员函数可检索滚动条的最大滚动位置。

int GetScrollLimit(int nBar);

参数

nBar
指定滚动条的类型。 该参数可采用以下值之一:

  • SB_HORZ 检索水平滚动条的滚动限制。

  • SB_VERT 检索垂直滚动条的滚动限制。

返回值

如果成功,则指定滚动条的最大位置;否则指定 0。

CWnd::GetScrollPos

检索滚动条的滚动框的当前位置。

int GetScrollPos(int nBar) const;

参数

nBar
指定要检查的滚动条。 该参数可采用以下值之一:

  • SB_HORZ 检索水平滚动条的位置。

  • SB_VERT 检索垂直滚动条的位置。

返回值

如果成功,则指定滚动框在滚动条中的当前位置;否则指定 0。

注解

当前位置是一个相对值,取决于当前滚动范围。 例如,如果滚动范围为 50 到 100,并且滚动框在滚动条的中间,则当前位置为 75。

CWnd::GetScrollRange

将给定滚动条的当前最小和最大滚动条位置复制到 lpMinPoslpMaxPos 指定的位置。

void GetScrollRange(
    int nBar,
    LPINT lpMinPos,
    LPINT lpMaxPos) const;

参数

nBar
指定要检查的滚动条。 该参数可采用以下值之一:

  • SB_HORZ 检索水平滚动条的位置。

  • SB_VERT 检索垂直滚动条的位置。

lpMinPos
指向要接收最小位置的整数变量。

lpMaxPos
指向要接收最大位置的整数变量。

备注

如果 CWnd 没有滚动条,则 GetScrollRange 成员函数会将 0 复制到 lpMinPoslpMaxPos

标准滚动条的默认范围为 0 到 100。 滚动条控件的默认范围为空(两个值均为 0)。

CWnd::GetStyle

返回当前窗口样式。

DWORD GetStyle() const;

返回值

窗口的样式。 有关 MFC 中使用的窗口样式的详细信息,请参阅窗口样式

CWnd::GetSystemMenu

允许应用程序访问控件菜单以进行复制和修改。

CMenu* GetSystemMenu(BOOL bRevert) const;

参数

bRevert
指定要执行的操作。 如果 bRevertFALSE,则 GetSystemMenu 返回当前使用的控件菜单的副本的句柄。 此副本最初与控件菜单相同,但可以修改。 如果 bRevertTRUE,则 GetSystemMenu 会将控件菜单重置为默认状态。 将销毁可能已修改的先前控件菜单(如果有)。 在这种情况下,返回值是未定义的。

返回值

如果 bRevertFALSE,则标识控件菜单的副本。 如果 bRevertTRUE,则返回值是未定义的。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

注解

任何不使用 GetSystemMenu 来创建自身控件菜单副本的窗口都会收到标准控件菜单。

可将 GetSystemMenu 成员函数返回的指针与 CMenu::AppendMenuCMenu::InsertMenuCMenu::ModifyMenu 函数结合使用以更改控件菜单。

控件菜单最初包含使用各种 ID 值(例如 SC_CLOSESC_MOVESC_SIZE)标识的项。 控件菜单中的项生成 WM_SYSCOMMAND 消息。 所有预定义控件菜单项的 ID 编号均大于 0xF000。 如果应用程序将项添加到控件菜单,则它应使用小于 F000 的 ID 编号。

Windows 可能会自动使标准控件菜单中的项不可用。 CWnd 可以通过对显示任何菜单之前发送的 WM_INITMENU 消息做出响应来执行自身的选择或失效处理。

示例

// The following code fragment is taken from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu *pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
   CString strAboutMenu;
   strAboutMenu.LoadString(IDS_ABOUT);
   if (!strAboutMenu.IsEmpty())
   {
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
   }
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);  // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

CWnd::GetTitleBarInfo

检索有关指定标题栏的信息。

BOOL GetTitleBarInfo(PTITLEBARINFO pti) const;

参数

pti
指向接收信息的 TITLEBARINFO 结构的指针。

注解

此成员函数模拟 GetTitleBarInfo 函数的功能,如 Windows SDK 中所述。

CWnd::GetTopLevelFrame

调用此成员函数可检索窗口的顶级框架窗口(如果有)。

CFrameWnd* GetTopLevelFrame() const;

返回值

标识窗口的顶级框架窗口。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

如果 CWnd 没有附加的窗口,或者其顶级父级不是 CFrameWnd 派生对象,则此函数将返回 NULL

CWnd::GetTopLevelOwner

调用此成员函数可检索顶级窗口。

CWnd* GetTopLevelOwner() const;

返回值

标识顶级窗口。 返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

顶级窗口是属于桌面子级的窗口。 如果 CWnd 没有附加的窗口,则此函数将返回 NULL

CWnd::GetTopLevelParent

调用此成员函数可检索窗口的顶级父级。

CWnd* GetTopLevelParent() const;

返回值

标识窗口的顶级父级窗口。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

GetTopLevelParent 类似于 GetTopLevelFrameGetTopLevelOwner;但是,它会忽略设置为当前所有者窗口的值。

CWnd::GetTopWindow

搜索属于 CWnd 的顶级子窗口。

CWnd* GetTopWindow() const;

返回值

标识子窗口的 CWnd 链接列表中的顶级子窗口。 如果不存在子窗口,则值为 NULL

返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

如果 CWnd 没有子级,则此函数将返回 NULL

CWnd::GetUpdateRect

检索完全包围更新区域的最小矩形的坐标。

BOOL GetUpdateRect(
    LPRECT lpRect,
    BOOL bErase = FALSE);

参数

lpRect
指向接收包围更新区域的更新范围的客户端坐标的 CRect 对象或 RECT 结构

将此参数设置为 NULL 可确定 CWnd 中是否存在更新区域。 如果 lpRectNULL,则 GetUpdateRect 成员函数将在更新区域存在时返回非零值;如果不存在更新区域,则返回 0。 这提供了一种方式来确定是否从无效区域生成了 WM_PAINT 消息。 不要在 Windows 3.0 和更低版本中将此参数设置为 NULL

bErase
指定是否要擦除更新区域中的背景。

返回值

指定更新区域的状态。 如果更新区域不为空,则该值不为零;否则为 0。

如果 lpRect 参数设置为 NULL,当存在更新区域时,返回值不为零;否则为 0。

备注

如果 CWnd 是使用 CS_OWNDC 样式创建的,并且映射模式不是 MM_TEXT,则 GetUpdateRect 成员函数将以逻辑坐标形式指定矩形。 否则,GetUpdateRect 以客户端坐标形式指定矩形。 如果没有更新区域,GetUpdateRect 会将矩形设置为空(将所有坐标设置为 0)。

bErase 参数指定 GetUpdateRect 是否应擦除更新区域的背景。 如果 bEraseTRUE 并且更新区域不为空,则擦除背景。 若要擦除背景,GetUpdateRect 会发送 WM_ERASEBKGND 消息。

BeginPaint 成员函数检索的更新矩形与 GetUpdateRect 成员函数检索的更新矩形相同。

BeginPaint 成员函数自动验证更新区域,因此在调用 BeginPaint 后立即对 GetUpdateRect 进行任何调用都会检索一个空的更新区域。

CWnd::GetUpdateRgn

将更新区域检索到 pRgn 标识的区域中。

int GetUpdateRgn(
    CRgn* pRgn,
    BOOL bErase = FALSE);

参数

pRgn
标识更新区域。

bErase
指定是否擦除背景并绘制子窗口的非工作区。 如果值为 FALSE,则不绘制。

返回值

指定一个短整数标志,用于指示生成的区域的类型。 值可以采用以下任何一项:

  • SIMPLEREGION 该区域没有重叠的边框。

  • COMPLEXREGION 该区域有重叠的边框。

  • NULLREGION 该区域为空。

  • ERROR 未创建任何区域。

备注

此区域的坐标相对于左上角(客户端坐标)。

BeginPaint 成员函数自动验证更新区域,因此在调用 BeginPaint 后立即对 GetUpdateRgn 进行任何调用都会检索一个空的更新区域。

CWnd::GetWindow

返回指向请求的窗口的指针;如果不存在此窗口,则返回 NULL

CWnd* GetWindow(UINT nCmd) const;

参数

*nCmd*
指定 CWnd 和返回的窗口之间的关系。 可以采取以下值之一:

  • GW_CHILD 标识 CWnd 的第一个子窗口。

  • GW_HWNDFIRST 如果 CWnd 是子窗口,则返回第一个同级窗口。 否则,返回列表中的第一个顶级窗口。

  • GW_HWNDLAST 如果 CWnd 是子窗口,则返回最后一个同级窗口。 否则,返回列表中的最后一个顶级窗口。

  • GW_HWNDNEXT 返回窗口管理器列表中的下一个窗口。

  • GW_HWNDPREV 返回窗口管理器列表中的上一个窗口。

  • GW_OWNER 标识 CWnd 所有者。

返回值

返回的指针可能是暂时性的,不应存储它以供稍后使用。

CWnd::GetWindowContextHelpId

调用此成员函数可检索与窗口关联的帮助上下文标识符(如果有)。

DWORD GetWindowContextHelpId() const;

返回值

帮助上下文标识符。 如果窗口没有帮助上下文,则返回 0。

CWnd::GetWindowedChildCount

调用此成员函数可检索关联的子窗口数量。

long GetWindowedChildCount();

返回值

CWnd 对象关联的子窗口数量。

CWnd::GetWindowDC

检索整个窗口的显示上下文,包括标题栏、菜单和滚动条。

CDC* GetWindowDC();

返回值

如果该函数成功,则标识给定窗口的显示上下文;否则返回 NULL

返回的指针可能是暂时性的,不应存储它以供稍后使用。 每次成功调用 GetWindowDC 后都应调用 ReleaseDC 一次。

备注

窗口显示上下文允许在 CWnd 中的任何位置进行绘制,因为上下文的原点是 CWnd 的左上角,而不是工作区。

每次检索上下文时,都会将默认属性分配到显示上下文。 以前的属性会丢失。

GetWindowDC 用于 CWnd 非工作区域内的特殊绘制效果。 不建议在任何窗口的非工作区中进行绘制。

GetSystemMetrics Windows 函数可用于检索非工作区各个部分(例如标题栏、菜单和滚动条)的尺寸。

绘制完成后,必须调用 ReleaseDC 成员函数来释放显示上下文。 由于可同时打开的设备上下文数量有限制,无法释放显示上下文会严重影响应用程序请求的绘制。

CWnd::GetWindowInfo

检索有关窗口的信息。

BOOL GetWindowInfo(PWINDOWINFO pwi) const;

参数

pwi
指向 WINDOWINFO 结构的指针。

备注

此成员函数模拟 GetWindowInfo 函数的功能,如 Windows SDK 中所述。

CWnd::GetWindowlessChildCount

检索关联的无窗口子窗口数量。

long GetWindowlessChildCount();

返回值

CWnd 对象关联的无窗口子窗口数量。

CWnd::GetWindowPlacement

检索窗口的显示状态以及正常(已还原)、最小化和最大化位置。

BOOL GetWindowPlacement(WINDOWPLACEMENT* lpwndpl) const;

参数

lpwndpl
指向接收显示状态和位置信息的 WINDOWPLACEMENT 结构。

返回值

如果该函数成功,则为非 0;否则为 0。

备注

此函数检索的 WINDOWPLACEMENT 结构的 flags 成员始终为 0。 如果 CWnd 已最大化,则 WINDOWPLACEMENTshowCmd 成员为 SW_SHOWMAXIMIZED。 如果窗口已最小化,则该成员为 SW_SHOWMINIMIZED。 否则为 SW_SHOWNORMAL

CWnd::GetWindowRect

CWnd 对象的边框尺寸复制到 lpRect 指向的结构。

void GetWindowRect(LPRECT lpRect) const;

参数

lpRect
指向接收屏幕左上角和右下角坐标的 CRect 对象或 RECT 结构

备注

尺寸以相对于显示屏左上角的屏幕坐标指定。 包括标题栏、边框和滚动条(如果存在)的尺寸。

CWnd::GetWindowRgn

调用此成员函数可获取窗口的窗口区域。

int GetWindowRgn(HRGN hRgn)const;

参数

hRgn
窗口区域的句柄。

返回值

返回值指定函数获取的区域的类型。 可以为下列值之一:

  • NULLREGION 该区域为空。

  • SIMPLEREGION 该区域是单个矩形。

  • COMPLEXREGION 该区域是多个矩形。

  • ERROR 发生错误;该区域不受影响。

备注

窗口区域确定了操作系统允许在窗口中的哪个区域绘制。 操作系统不会显示位于窗口区域外部的窗口的任何部分。

窗口的窗口区域坐标相对于窗口的左上角,而不是窗口的工作区。

若要设置窗口的窗口区域,请调用 CWnd::SetWindowRgn

CWnd::GetWindowText

CWnd 标题栏标题(如果有)复制到 lpszStringBuf 指向的缓冲区,或复制到目标字符串 rString

int GetWindowText(
    LPTSTR lpszStringBuf,
    int nMaxCount) const;

void GetWindowText(
    CString& rString) const;

参数

lpszStringBuf
指向接收复制的窗口标题字符串的缓冲区。

nMaxCount
指定要复制到缓冲区的最大字符数,包括结尾的 null 字符。 如果字符串长于 nMaxCount 中指定的字符数,则将其截断。

rString
一个 CString 对象,它将接收复制的窗口标题字符串。

返回值

指定复制的字符串的长度(以字符为单位),不包括结尾的 null 字符。 如果 CWnd 没有标题栏或标题栏为空,则返回值为 0。

注解

如果 CWnd 对象是控件,则 GetWindowText 成员函数将复制控件中的文本,而不是复制标题栏。

此成员函数导致将 WM_GETTEXT 消息发送到 CWnd 对象。

示例

请参阅 CWnd::SetWindowText 的示例。

CWnd::GetWindowTextLength

返回 CWnd 对象标题栏标题的长度。

int GetWindowTextLength() const;

返回值

指定文本长度(以字符为单位),不包括任何 null 结尾的字符。 如果不存在此类文本,则值为 0。

备注

如果 CWnd 是控件,则 GetWindowTextLength 成员函数返回控件中文本而不是标题栏的长度。

此成员函数导致将 WM_GETTEXTLENGTH 消息发送到 CWnd 对象。

示例

请参阅 CWnd::SetWindowText 的示例。

CWnd::HideCaret

通过从显示屏幕中移除来隐藏插入符号。

void HideCaret();

备注

尽管插入点不再可见,但可以使用 ShowCaret 成员函数再次显示它。 隐藏插入点不会销毁其当前形状。

隐藏是累积性操作。 如果 HideCaret 已连续调用五次,则必须调用 ShowCaret 成员函数五次才能显示插入点。

CWnd::HiliteMenuItem

突出显示顶级(菜单栏)菜单项或取消其突出显示。

BOOL HiliteMenuItem(
    CMenu* pMenu,
    UINT nIDHiliteItem,
    UINT nHilite);

参数

pMenu
标识包含要突出显示的项的顶级菜单。

nIDHiliteItem
根据 nHilite 参数的值指定要突出显示的菜单项。

nHilite
指定是要突出显示菜单项还是取消突出显示。 它可以是 MF_HILITEMF_UNHILITEMF_BYCOMMANDMF_BYPOSITION 的组合。 可以使用按位 OR 运算符来组合值。 这些值将具有以下含义:

  • MF_BYCOMMANDnIDHiliteItem 解释为菜单项 ID(默认解释)。

  • MF_BYPOSITIONnIDHiliteItem 解释为菜单项的从零开始的偏移量。

  • MF_HILITE 突出显示项。 如果未指定此值,则取消项的突出显示。

  • MF_UNHILITE 取消项的突出显示。

返回值

指定是否已突出显示菜单项。 如果已突出显示项,则返回非零值;否则返回 0。

备注

MF_HILITEMF_UNHILITE 标志只能与此成员函数结合使用;它们不能与 CMenu::ModifyMenu 成员函数结合使用。

CWnd::HtmlHelp

调用此成员函数可调用 HTMLHelp 应用程序。

virtual void HtmlHelp(
    DWORD_PTR dwData,
    UINT nCmd = 0x000F);

参数

dwData
指定其他数据。 使用的值取决于 nCmd 参数的值。

nCmd
指定请求的帮助的类型。 有关可能值的列表及其如何影响 dwData 参数,请参阅 Windows SDK 的“HTML 帮助 API 参考”中所述的 uCommand 参数。

备注

有关详细信息,请参阅CWinApp::HtmlHelp

CWnd::InitDynamicLayout

由框架调用以初始化窗口的动态布局。

void InitDynamicLayout();

注解

请勿直接调用此方法。

CWnd::Invalidate

使 CWnd 的整个工作区失效。

void Invalidate(BOOL bErase = TRUE);

参数

bErase
指定是否要擦除更新区域中的背景。

备注

当下一条 WM_PAINT 消息出现时,工作区将标记为可绘制。 还可以在 WM_PAINT 消息出现之前通过 ValidateRectValidateRgn 成员函数验证区域。

bErase 参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bEraseTRUE,则在调用 BeginPaint 成员函数时擦除背景;如果 bEraseFALSE,则背景将保持不变。 对于更新区域的任何部分,如果 bEraseTRUE,则会擦除整个区域(而不仅仅是给定部分)中的背景。

每当 CWnd 更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT 消息。

示例

请参阅 CWnd::UpdateWindow 的示例。

CWnd::InvalidateRect

通过将给定矩形添加到 CWnd 更新区域,使给定矩形中的工作区失效。

void InvalidateRect(
    LPCRECT lpRect,
    BOOL bErase = TRUE);

参数

lpRect
指向包含要添加到更新区域的矩形(以客户端坐标表示)的 CRect 对象或 RECT 结构。 如果 lpRectNULL,则将整个工作区添加到该区域。

bErase
指定是否要擦除更新区域中的背景。

注解

在发送下一条 WM_PAINT 消息时,会将失效矩形连同更新区域中的所有其他区域一起标记为可绘制。 失效区域在更新区域中累积到在下一次发生 WM_PAINT 调用时处理该区域,或者该区域被 ValidateRectValidateRgn 成员函数验证为止。

bErase 参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bEraseTRUE,则在调用 BeginPaint 成员函数时擦除背景;如果 bEraseFALSE,则背景将保持不变。 对于更新区域的任何部分,如果 bEraseTRUE,则会擦除整个区域(而不仅仅是给定部分)中的背景。

每当 CWnd 更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT 消息。

CWnd::InvalidateRgn

通过将给定区域中的工作区添加到 CWnd 的当前更新区域来使其失效。

void InvalidateRgn(
    CRgn* pRgn,
    BOOL bErase = TRUE);

参数

pRgn
指向 CRgn 对象的指针,该对象标识要添加到更新区域的区域。 假设该区域具有客户端坐标。 如果此参数为 NULL,则将整个工作区添加到更新区域。

bErase
指定是否要擦除更新区域中的背景。

备注

在接下来发送 WM_PAINT 消息时,会将失效区域以及更新区域中的所有其他区域标记为可绘制。 失效区域在更新区域中累积到在下一次发送 WM_PAINT 消息时处理该区域,或者该区域被 ValidateRectValidateRgn 成员函数验证为止。

bErase 参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bEraseTRUE,则在调用 BeginPaint 成员函数时擦除背景;如果 bEraseFALSE,则背景将保持不变。 对于更新区域的任何部分,如果 bEraseTRUE,则会擦除整个区域(而不仅仅是给定部分)中的背景。

每当 CWnd 更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT 消息。

给定区域必须事先已由 region 函数之一创建。

CWnd::InvokeHelper

调用此成员函数可在 wFlags 指定的上下文中调用 dwDispID 指定的 ActiveX 控件方法或属性。

void AFX_CDECL InvokeHelper(
    DISPID dwDispID,
    WORD wFlags,
    VARTYPE vtRet,
    void* pvRet,
    const BYTE* pbParamInfo,
    ... );

参数

dwDispID
标识要调用的方法或属性。

wFlags
描述 IDispatch::Invoke 调用上下文的标志。

vtRet
指定返回值的类型。 有关可能的值,请参阅 COleDispatchDriver::InvokeHelper 的“注解”部分。

pvRet
将接收属性值或返回值的变量的地址。 它必须与 vtRet指定的类型匹配。

pbParamInfo
指向以 null 结尾的字符串的指针,该字符串由指定 pbParamInfo后面的参数类型的字节组成。 有关可能的值,请参阅 COleDispatchDriver::InvokeHelper 的“注解”部分。

...
pbParamInfo 中指定类型的参数的变量列表。

备注

pbParamInfo 参数指定传递到方法或属性的参数的类型。 参数的变量列表在语法声明中由 ... 表示。

此函数将参数转换为 VARIANTARG 值,然后对 ActiveX 控件调用 IDispatch::Invoke 方法。 如果 IDispatch::Invoke 调用失败,则此函数会引发异常。 如果 IDispatch::Invoke 返回的 SCODE(状态代码)为 DISP_E_EXCEPTION,则此函数将引发 COleException 对象,否则引发 COleDispatchException

注意

只能对表示 ActiveX 控件的 CWnd 对象调用此函数。

有关将此成员函数用于 ActiveX 控件容器的详细信息,请参阅 ActiveX 控件容器:对 ActiveX 控件容器中的 ActiveX 控件编程一文。

CWnd::IsChild

指示 pWnd 指定的窗口是 CWnd 的子窗口还是其他直接后代。

BOOL IsChild(const CWnd* pWnd) const;

参数

pWnd
标识要测试的窗口。

返回值

指定函数的结果。 如果 pWnd 标识的窗口是 CWnd 的子窗口,则值不为零;否则为 0。

备注

如果 CWnd 对象位于从原始弹出窗口到子窗口的父窗口链中,则子窗口是 CWnd 的直接后代。

CWnd::IsD2DSupportEnabled

确定是否启用 D2D 支持。

BOOL IsD2DSupportEnabled();

返回值

如果已启用该功能,则返回 TRUE;否则返回 FALSE

CWnd::IsDialogMessage

调用此成员函数可确定给定的消息是否用于无模式对话框;如果是,则此函数将处理消息。

BOOL IsDialogMessage(LPMSG lpMsg);

参数

lpMsg
指向包含要检查的消息的 MSG 结构。

返回值

指定成员函数是否已处理给定的消息。 如果已处理消息,则返回值不为零;否则为 0。 如果返回值为 0,则调用基类的 CWnd::PreTranslateMessage 成员函数来处理消息。 在 CWnd::PreTranslateMessage 成员函数的重写中,代码如下所示:

BOOL CAboutDlg::PreTranslateMessage(MSG *pMsg)
{
   if (IsDialogMessage(pMsg))
      return TRUE;
   else
      return CDialog::PreTranslateMessage(pMsg);
}

备注

IsDialogMessage 函数处理消息时,它会检查键盘消息并将其转换为相应对话框的选择命令。 例如,TAB 键选择下一个控件或控件组,向下箭头键选择组中的下一个控件。

不能将 IsDialogMessage 处理的消息传递给 TranslateMessageDispatchMessage Windows 函数,因为该消息已处理过。

CWnd::IsDlgButtonChecked

确定按钮控件的旁边是否有复选标记。

UINT IsDlgButtonChecked(int nIDButton) const;

参数

nIDButton
指定按钮控件的整数标识符。

返回值

如果检查给定的控件,则返回非零值;如果不检查,则返回 0。 只能选中单选按钮和复选框。 对于三态按钮,如果按钮不确定,则返回值可为 2。 此成员函数为按钮返回 0。

备注

如果按钮是三状态控件,则成员函数确定它为灰显、已选中还是两者都不是。

CWnd::IsDynamicLayoutEnabled

确定是否在此窗口上启用动态布局。 如果启用动态布局,则子窗口的位置和大小可以在用户调整父窗口大小时进行更改。

BOOL IsDynamicLayoutEnabled() const;

返回值

如果启用了动态布局,则返回 TRUE;否则返回 FALSE

备注

CWnd::IsIconic

指定 CWnd 是否已最小化(图标)。

BOOL IsIconic() const;

返回值

如果 CWnd 已最小化,则返回非零值;否则返回 0。

示例

void CAboutDlg::OnPaint()
{
   // This code, normally emitted by the Application Wizard for a dialog-
   // based project for the dialog's WM_PAINT handler, runs only if the
   // window is iconic. The window erases the icon's area, then
   // paints the icon referenced by m_hIcon.
   if (IsIconic())
   {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);

      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
   }
   else
   {
      CDialog::OnPaint();
   }
}

CWnd::IsTouchWindow

指定 CWnd 是否具有触摸支持。

BOOL IsTouchWindow() const;

返回值

如果 CWnd 支持触摸,则返回 TRUE;否则返回 FALSE

备注

CWnd::IsWindowEnabled

指定是否为鼠标和键盘输入启用 CWnd

BOOL IsWindowEnabled() const;

返回值

如果启用 CWnd,则返回非零值;否则返回 0。

示例

//change the background color of an edit control on the dialog
HBRUSH CMyDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   if (pWnd->GetDlgCtrlID() == IDC_MYEDIT)
   {
      if (pWnd->IsWindowEnabled())
      {
         // Red brush for the background...
         pDC->SetBkColor(RGB(255, 0, 0));
         // m_pRedBrush is the CBrush object initialized with a red brush
         // using CreateSolidBrush
         return (HBRUSH)m_RedBrush.GetSafeHandle();
      }
      else
      {
         // Blue brush for the background...
         pDC->SetBkColor(RGB(0, 0, 255));
         // m_pBlueBrush is the CBrush object initialized with a blue
         // brush using CreateSolidBrush
         return (HBRUSH)m_BlueBrush.GetSafeHandle();
      }
   }

   return hbr;
}

CWnd::IsWindowVisible

确定给定窗口的可见性状态。

BOOL IsWindowVisible() const;

返回值

如果 CWnd 可见(已设置 WS_VISIBLE 样式位,并且父窗口可见),则返回非零值。 由于返回值反映 WS_VISIBLE 样式位的状态,因此即使 CWnd 完全被其他窗口遮挡,返回值也可能不为零。

注解

窗口拥有 WS_VISIBLE 样式位指示的可见性状态。 通过调用 ShowWindow 成员函数设置此样式位时,只要为窗口设置了样式位,就会显示该窗口并显示随后在其中绘制的内容。

如果窗口被其他窗口覆盖或被其父窗口剪裁,则不会显示具有 WS_VISIBLE 样式的窗口中的任何绘制内容。

示例

// This example uses the CWnd::IsWindowVisible() function to
// determine if a dialog box is visible. If it is not, it calls
// CWnd::ShowWindow with the SW_SHOWNORMAL command.
void CMainFrame::DisplayModeless()
{
   if(!m_Modeless.IsWindowVisible())
   {
      m_Modeless.ShowWindow(SW_SHOWNORMAL);
   }
}

// This example uses the CWnd::IsWindowVisible() function to
// determine if a dialog box is visible. If it is, it calls
// CWnd::ShowWindow with the SW_HIDE command.
void CMainFrame::HideModeless()
{
   if(m_Modeless.IsWindowVisible())
   {
      m_Modeless.ShowWindow(SW_HIDE);
   }
}

CWnd::IsZoomed

确定 CWnd 是否已最大化。

BOOL IsZoomed() const;

返回值

如果 CWnd 已最大化,则返回非零值;否则返回 0。

CWnd::KillTimer

终止先前在调用 SetTimer 后由 nIDEvent 标识的计时器事件。

BOOL KillTimer(UINT_PTR nIDEvent);

参数

nIDEvent
传递给 SetTimer 的计时器事件的值。

返回值

指定函数的结果。 如果事件已终止,则值不为零。 如果 KillTimer 成员函数找不到指定的计时器事件,则值为 0。

备注

不会从消息队列中删除与计时器关联的挂起 WM_TIMER 消息。

示例

请参阅 CWnd::SetTimer 的示例。

CWnd::LoadDynamicLayoutResource

由框架调用,以从资源文件加载动态布局信息。

BOOL LoadDynamicLayoutResource(LPCTSTR lpszResourceName);

参数

lpszResourceName
包含此窗口所需的动态布局信息的资源名称。

返回值

如果函数运行成功,则为非零。 如果发生故障,则为 0。

注解

请勿直接调用此方法。

CWnd::LockWindowUpdate

在给定的窗口中禁用绘制。

BOOL LockWindowUpdate();

返回值

如果函数运行成功,则为非零。 如果发生故障或 LockWindowUpdate 函数已用于锁定另一窗口,则返回值为 0。

注解

无法移动已锁定的窗口。 一次只能锁定一个窗口。 若要解锁使用 LockWindowUpdate 锁定的窗口,请调用 UnlockWindowUpdate

如果包含锁定窗口(或任何锁定的子窗口)的应用程序调用 GetDCGetDCExBeginPaint Windows 函数,则被调用函数将返回可见区域为空的设备上下文。 这种情况会一直发生到应用程序通过调用 UnlockWindowUpdate 成员函数解锁窗口为止。

当窗口更新处于锁定状态时,系统会在与锁定窗口关联的设备上下文中跟踪任何绘制操作的边框。 重新启用绘制后,此边框会在锁定的窗口及其子窗口中失效,以强制最终的 WM_PAINT 消息更新屏幕。 如果在锁定窗口更新时未发生任何绘制,则不会使任何区域失效。

LockWindowUpdate 成员函数不会隐藏给定的窗口,也不会清除 WS_VISIBLE 样式位。

CWnd::m_hWnd

附加到此 CWnd 的 Windows 窗口的句柄。

HWND m_hWnd;

注解

m_hWnd 数据成员是 HWND 类型的公共变量。

CWnd::MapWindowPoints

将一组点从 CWnd 的坐标空间转换(映射)到另一个窗口的坐标空间。

void MapWindowPoints(
    CWnd* pwndTo,
    LPRECT lpRect) const;

void MapWindowPoints(
    CWnd* pwndTo,
    LPPOINT lpPoint,
    UINT nCount) const;

参数

pwndTo
标识要将点转换成的窗口。 如果此参数为 NULL,则将点转换为屏幕坐标。

lpRect
指定要转换其点的矩形。 此函数的第一个版本仅适用于 Windows 3.1 和更高版本。

lpPoint
指向包含要转换的点集的 POINT 结构数组的指针。

nCount
指定 lpPoint 指向的数组中的 POINT 结构数。

CWnd::MessageBox

创建并显示一个窗口,其中包含应用程序提供的消息和标题,以及消息框样式列表中所述的预定义图标和按钮组合。

int MessageBox(
    LPCTSTR lpszText,
    LPCTSTR lpszCaption = NULL,
    UINT nType = MB_OK);

参数

lpszText
指向 CString 对象或以 null 结尾的字符串,其中包含要显示的消息。

lpszCaption
指向用于消息框标题的 CString 对象或以 null 结尾的字符串。 如果 lpszCaptionNULL,则使用默认标题“错误”。

nType
指定消息框的内容和行为。

返回值

此方法利用 Windows SDK 中定义的 MessageBox 函数。 此方法返回调用此函数后的结果。

注解

请使用全局函数 AfxMessageBox 而不是此成员函数在应用程序中实现消息框。

下面显示了可在消息框中使用的各种系统图标:

图标
Stop or X icon, consisting of a red circle with a white x in the middle. MB_ICONHANDMB_ICONSTOPMB_ICONERROR
Help or question mark icon, consisting of a thought bubble icon with a question mark in it. MB_ICONQUESTION
Important or exclamation point icon, consisting of a yellow triangle with a black exclamation point in it. MB_ICONEXCLAMATION 和 MB_ICONWARNING
Information or letter I icon, consiting of a thought bubble with a lowercase letter i in it. MB_ICONASTERISK 和 MB_ICONINFORMATION

示例

void CMainFrame::OnDisplayErrorMessage()
{
   // This displays a message box with the title "Error"
   // and the message "Help, Something went wrong."
   // The error icon is displayed in the message box, along with
   // an OK button.
   MessageBox(_T("Help, Something went wrong."), _T("Error"),
              MB_ICONERROR | MB_OK);
}

CWnd::ModifyStyle

调用此成员函数可修改窗口的样式。

BOOL ModifyStyle(
    DWORD dwRemove,
    DWORD dwAdd,
    UINT nFlags = 0);

参数

dwRemove
指定在样式修改期间要删除的窗口样式。

dwAdd
指定在样式修改期间要添加的窗口样式。

nFlags
要传递给 SetWindowPos 的标志;如果不应调用 SetWindowPos,则为零。 默认值为零。 有关预设标志的列表,请参阅“注解”部分。

返回值

如果已成功修改样式,则返回非零值;否则返回 0。

注解

可以使用按位“或”(|) 运算符组合要添加或删除的样式。 有关可用窗口样式的信息,请参阅 Windows SDK 中的主题窗口样式CreateWindow

如果 nFlags 不为零,则 ModifyStyle 将调用 Windows API 函数 SetWindowPos,并通过将 nFlags 与以下四个预设标志相组合来重绘窗口:

  • SWP_NOSIZE 保留当前大小。

  • SWP_NOMOVE 保留当前位置。

  • SWP_NOZORDER 保留当前的 Z 顺序。

  • SWP_NOACTIVATE 不激活窗口。

若要修改窗口的扩展样式,请参阅 ModifyStyleEx

注意

对于特定控件中的某些样式(例如编辑控件中的 ES_READONLY 样式),ModifyStyle 可能无法正确更改样式,因为控件可能需要执行特殊的内部处理。 在这种情况下,将提供用于更改样式的相应消息(上述示例中为 EM_SETREADONLY)。

示例

// This example adds the WS_CLIPCHILDREN style to the window.
// No Styles are removed from the window.
void CMyView::OnInitialUpdate()
{
   CView::OnInitialUpdate();
   ModifyStyle(0, WS_CLIPCHILDREN);
}

CWnd::ModifyStyleEx

调用此成员函数可修改窗口的扩展样式。

BOOL ModifyStyleEx(
    DWORD dwRemove,
    DWORD dwAdd,
    UINT nFlags = 0);

参数

dwRemove
指定在样式修改期间要删除的扩展样式。

dwAdd
指定在样式修改期间要添加的扩展样式。

nFlags
要传递给 SetWindowPos 的标志;如果不应调用 SetWindowPos,则为零。 默认值为零。 有关预设标志的列表,请参阅“注解”部分。

返回值

如果已成功修改样式,则返回非零值;否则返回 0。

备注

可以使用按位 OR (|) 运算符组合要添加或删除的样式。 有关可用扩展样式的信息,请参阅本书中的主题扩展窗口样式和 Windows SDK 中的 CreateWindowEx

如果 nFlags 不为零,则 ModifyStyleEx 将调用 Windows API 函数 SetWindowPos,并通过将 nFlags 与以下四个预设标志相组合来重绘窗口:

  • SWP_NOSIZE 保留当前大小。

  • SWP_NOMOVE 保留当前位置。

  • SWP_NOZORDER 保留当前的 Z 顺序。

  • SWP_NOACTIVATE 不激活窗口。

若要使用常规窗口样式修改窗口,请参阅 ModifyStyle

示例

// This example would make the dialog box transparent by
// changing the dialog window's extended styles.
int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CDialog::OnCreate(lpCreateStruct) == -1)
      return -1;

   ModifyStyleEx(0, WS_EX_TRANSPARENT);   
   
   return 0;
}

CWnd::MoveWindow

更改位置和尺寸。

void MoveWindow(
    int x,
    int y,
    int nWidth,
    int nHeight,
    BOOL bRepaint = TRUE);

void MoveWindow(
    LPCRECT lpRect,
    BOOL bRepaint = TRUE);

参数

x
指定 CWnd 左侧的新位置。

y
指定 CWnd 顶部的新位置。

nWidth
指定 CWnd 的新宽度。

nHeight
指定 CWnd 的新高度。

bRepaint
指定是否重绘 CWnd。 如果为 TRUE,则 CWnd 像往常一样在其 OnPaint 消息处理程序中接收 WM_PAINT 消息。 如果此参数为 FALSE,则不会发生任何类型的重绘。 这适用于工作区、非工作区(包括标题和滚动条)以及由于移动 CWnd 而显示的任何父窗口部分。 如果此参数为 FALSE,应用程序必须显式使 CWnd 和父窗口的任何部分失效,或重绘必须重绘的部分。

lpRect
用于指定新大小和位置的 CRect 对象或 RECT 结构

备注

对于顶级 CWnd 对象,xy 参数相对于屏幕的左上角。 对于子 CWnd 对象,它们相对于父窗口工作区的左上角。

MoveWindow 函数发送 WM_GETMINMAXINFO 消息。 处理此消息使 CWnd 有机会修改最大和最小可能窗口的默认值。 如果 MoveWindow 成员函数的参数超过这些值,可将这些值替换为 WM_GETMINMAXINFO 处理程序中的最小值或最大值。

示例

请参阅 CWnd::ClientToScreen 的示例。

CWnd::NotifyWinEvent

向系统发出信号,指出发生了预定义事件。 如果任何客户端应用程序为该事件注册了挂钩函数,系统将调用客户端的挂钩函数。

void NotifyWinEvent(
    DWORD event,
    LONG idObjectType,
    LONG idObject);

参数

event
指定发生的事件。 此值必须是事件常量之一。

idObjectType
标识生成了事件的对象类型。 此值是预定义的对象标识符之一,或自定义的对象 ID 值。

idObject
标识事件是由对象还是对象的子元素生成的。 如果此值为 CHILDID_SELF,则事件是由对象本身生成的。 否则,此值是生成了事件的元素的子 ID。

备注

此成员函数模拟 NotifyWinEvent 函数的功能,如 Windows SDK 中所述。

CWnd::OnActivate

在激活或停用 CWnd 对象时,框架会调用此成员函数。

afx_msg void OnActivate(
    UINT nState,
    CWnd* pWndOther,
    BOOL bMinimized);

参数

nState
指定是正在激活还是停用 CWnd。 可以为下列值之一:

  • WA_INACTIVE 正在停用窗口。

  • WA_ACTIVE 正在通过除鼠标单击以外的某种方法激活窗口(例如,通过使用键盘接口选择窗口)。

  • WA_CLICKACTIVE 正在通过鼠标单击激活窗口。

pWndOther
指向正在激活或停用的 CWnd 的指针。 该指针可为 NULL,也可以是暂时性指针。

bMinimized
指定正在激活或停用的 CWnd 的最小化状态。 TRUE 值表示窗口已最小化。

如果为 TRUE,则表示正在激活 CWnd;否则为正在停用。

备注

如果通过鼠标单击激活 CWnd 对象,则该对象还会接收 OnMouseActivate 成员函数调用。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnActivateApp

框架对任务的正在激活的所有顶级窗口,以及任务的正在停用的所有顶级窗口调用此成员函数。

afx_msg void OnActivateApp(
    BOOL bActive,
    DWORD dwThreadID);

参数

bActive
指定是正在激活还是停用 CWndTRUE 表示正在激活 CWndFALSE 表示正在停用 CWnd

dwThreadID
指定线程 ID 的值。 如果 bActiveTRUE,则 dwThreadID 标识拥有正在停用的 CWnd 的线程。 如果 bActiveFALSE,则 dwThreadID 标识拥有正在激活的 CWnd 的线程。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnAmbientProperty

框架调用此成员函数以从包含 OLE 控件的窗口中获取环境属性值。

virtual BOOL OnAmbientProperty(
    COleControlSite* pSite,
    DISPID dispid,
    VARIANT* pvar);

参数

pSite
指向请求了环境属性的控件站点的指针。

dispid
请求的环境属性的调度 ID。

pvar
指向调用方分配的 VARIANT 结构的指针,将通过该结构返回环境属性的值。

返回值

如果支持该环境属性,则返回 TRUE;否则返回 FALSE

备注

重写此函数可更改由 OLE 控件容器返回到其控件的默认环境属性值。 任何未由重写函数处理的环境属性请求应转发到基类实现。

CWnd::OnAppCommand

当用户生成应用程序命令事件时,框架将调用此成员函数。 当用户单击应用程序命令按钮或键入应用程序命令键时,会发生此类事件。

afx_msg void OnAppCommand(
    CWnd* pWnd,
    UINT nCmd,
    UINT nDevice,
    UINT nKey);

参数

pWnd
[in] 指向 CWnd 对象的指针,该对象表示用户单击命令按钮或按下命令键时所在的窗口。 此窗口可以是接收消息的窗口的子窗口。

nCmd
[in] 指示应用程序命令。 有关可能值的列表,请参阅 WM_APPCOMMANDlParam 参数的 cmd 部分下的命令。

nDevice
[in] 生成了输入事件的输入设备。 有关可能值的列表,请参阅 WM_APPCOMMANDlParam 参数的 uDevice 部分下的设备。

nKey
[in] 指示任何按下的虚拟键,例如 CTRL 键或鼠标左键。 有关可能值的列表,请参阅 WM_APPCOMMANDlParam 参数的 dwKeys 部分下的键。 有关详细信息,请参阅关于鼠标输入中的“消息参数”子标题。

备注

此方法接收 Windows SDK 中所述的 WM_APPCOMMAND 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnAskCbFormatName

当剪贴板包含 CF_OWNERDISPLAY 格式的数据句柄时(即剪贴板所有者将显示剪贴板内容时),框架会调用此成员函数。

afx_msg void OnAskCbFormatName(
    UINT nMaxCount,
    LPTSTR lpszString);

参数

nMaxCount
指定要复制的最大字节数。

lpszString
指向要将格式名称副本存储到的缓冲区。

备注

剪贴板所有者应为其格式提供名称。

重写此成员函数并将 CF_OWNERDISPLAY 格式的名称复制到指定的缓冲区,不超过指定的最大字节数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCancelMode

框架调用此成员函数来告知 CWnd 取消任何内部模式。

afx_msg void OnCancelMode();

备注

如果 CWnd 对象具有焦点,则在显示对话框或消息框时调用其 OnCancelMode 成员函数。 这使 CWnd 有机会取消鼠标捕获等模式。

默认实现通过调用 ReleaseCapture Windows 函数做出响应。 在派生类中重写此成员函数以处理其他模式。

CWnd::OnCaptureChanged

框架调用此成员函数来通知正在丢失鼠标捕获的窗口。

afx_msg void OnCaptureChanged(CWnd* pWnd);

参数

pWnd
指向获取鼠标捕获的窗口的指针

注解

即使窗口本身调用 ReleaseCapture,它也会收到此消息。 应用程序不应尝试设置鼠标捕获来响应此消息。 收到此消息时,窗口应根据需要重绘自身,以反映新的鼠标捕获状态。

有关 ReleaseCapture Windows 函数的信息,请参阅 Windows SDK。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnChangeCbChain

框架针对剪贴板查看器链中的每个窗口调用此成员函数,以通知它正在从链中删除某个窗口。

afx_msg void OnChangeCbChain(
    HWND hWndRemove,
    HWND hWndAfter);

参数

hWndRemove
指定要从剪贴板查看器链中删除的窗口句柄。

hWndAfter
指定要从剪贴板查看器链中删除的窗口后面的窗口句柄。

备注

每个接收 OnChangeCbChain 调用的 CWnd 对象应使用 SendMessage Windows 函数将 WM_CHANGECBCHAIN 消息发送到剪贴板查看器链中的下一个窗口(SetClipboardViewer 返回的句柄)。 如果 hWndRemove 是链中的下一个窗口,则 hWndAfter 指定的窗口将成为下一个窗口,剪贴板消息将传递给该窗口。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnChangeUIState

在应更改用户界面 (UI) 状态时调用。

afx_msg void OnChangeUIState(
    UINT nAction,
    UINT nUIElement);

参数

nAction
指定要执行的操作。 可以是以下其中一个值:

  • UIS_CLEAR 应隐藏 UI 状态元素(由 nUIElement 指定)。

  • UIS_INITIALIZE 应根据最后一个输入事件更改 UI 状态元素(由 nUIElement 指定)。 有关详细信息,请参阅 WM_CHANGEUISTATE 的“注解”部分

  • UIS_SET 应显示 UI 状态元素(由 nUIElement 指定)。

nUIElement
指定受影响的 UI 状态元素或指定控件样式。 可以是以下其中一个值:

  • UISF_HIDEACCEL 键盘加速键。

  • UISF_HIDEFOCUS 焦点指示器。

  • UISF_ACTIVE Windows XP:应该以用于活动控件的样式绘制控件。

备注

此成员函数模拟 WM_CHANGEUISTATE 消息的功能,如 Windows SDK 中所述。

CWnd::OnChar

将击键转换为非系统字符时,框架会调用此成员函数。

afx_msg void OnChar(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
包含键的字符代码值。

nRepCnt
包含重复次数,即用户按住键时重复击键的次数。

nFlags
包含扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

含义
0-15 指定重复次数。 该值是由于用户按住键而重复击键的次数。
16-23 指定扫描代码。 该值取决于原始设备制造商 (OEM)
24 指定键是否为扩展键,例如增强型 101 或 102 键键盘上的右侧 ALT 和 CTRL 键。 如果是扩展键,则值为 1;否则为 0。
25-28 在 Windows 内部使用。
29 指定上下文代码。 如果在按住 ALT 键的同时按该键,则值为 1;否则值为 0。
30 指定前一个键状态。 如果在发送消息之前键处于按下状态,则值为 1;如果键处于未按下状态,则值为 0。
31 指定转换状态。 如果释放了键,则值为 1;如果按下了键,则值为 0。

备注

此函数在调用 OnKeyUp 成员函数之前和调用 OnKeyDown 成员函数之后调用。 OnChar 包含按下或释放的键盘键的值。

由于按下的键与生成的 OnChar 调用之间不一定存在一一对应关系,因此 nFlags 中的信息通常对应用程序没有作用。 nFlags 中的信息仅适用于最近在调用 OnChar 之前进行的 OnKeyUp 成员函数或 OnKeyDown 成员函数调用。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCharToItem

当具有 LBS_WANTKEYBOARDINPUT 样式的列表框向其所有者发送 WM_CHARTOITEM 消息以响应 WM_CHAR 消息时调用。

afx_msg int OnCharToItem(
    UINT nChar,
    CListBox* pListBox,
    UINT nIndex);

参数

nChar
指定用户按下的键的值。

pListBox
指定指向列表框的指针。 它可能是暂时性指针。

nIndex
指定当前插入点位置。

返回值

框架调用此成员函数来指定应用程序为响应调用而执行的操作。 返回值 -2 表示应用程序处理了选择项的所有方面并且不需要列表框的进一步操作。 返回值 -1 表示列表框应执行默认操作以响应击键。 0 或更大的返回值指定列表框中项的从零开始的索引,并指示列表框应对给定项的击键执行默认操作。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnChildActivate

如果 CWnd 对象是多文档接口 (MDI) 子窗口,则当用户单击窗口的标题栏或者当激活、移动窗口或调整其大小时,框架会调用 OnChildActivate

afx_msg void OnChildActivate();

CWnd::OnChildNotify

此窗口的父窗口在收到适用于此窗口的通知消息时会调用此成员函数由。

virtual BOOL OnChildNotify(
    UINT message,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

参数

message
发送到父窗口的 Windows 消息编号。

wParam
与消息关联的 wparam

lParam
与消息关联的 lparam

pLResult
指向要从父级的窗口过程返回的值的指针。 如果不需要返回值,则此指针将是 NULL

返回值

如果此窗口负责处理发送到其父级的消息,则返回非零值;否则返回 0。

备注

切勿直接调用此成员函数。

此成员函数的默认实现返回 0,即父级应处理消息。

重写此成员函数可扩展控件响应通知消息的方式。

CWnd::OnClipboardUpdate

当剪贴板的内容已更改时,框架会调用此成员函数。

afx_msg void OnClipboardUpdate();

CWnd::OnClose

框架调用此成员函数来发出要终止 CWnd 或应用程序的信号。

afx_msg void OnClose();

注解

默认实现调用 DestroyWindow

CWnd::OnColorizationColorChanged

当非工作区的呈现策略已更改时,框架会调用此成员。

afx_msg void OnColorizationColorChanged(
    DWORD dwColorizationColor,
    BOOL bOpacity);

参数

dwColorizationColor
[in] 指定新的着色颜色。 颜色格式是 0xAARRGGBB 形式的十六进制数,其四个组成部分中的每一个的范围为 0x00 到 0xFF。 AA 组成部分是 alpha 值,RR 是红色,GG 是绿色,BB 是蓝色。

bOpacity
[in] 如果新颜色与不透明度混合,则参数值为 TRUE;否则为 FALSE

备注

此方法接收 Windows SDK 中所述的 WM_DWMNCRENDERINGCHANGED 通知消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCommand

当用户从菜单中选择项、子控件发送通知消息或转换加速键击时,框架将调用此成员函数。

virtual BOOL OnCommand(
    WPARAM wParam,
    LPARAM lParam);

参数

wParam
wParam 的低位字标识菜单项、控件或加速键的命令 ID。 如果消息来自控件,则 wParam 的高位字指定通知消息。 如果消息来自加速键,则高位字为 1。 如果消息来自菜单,则高位字为 0。

lParam
如果消息来自控件,则标识发送消息的控件。 否则,lParam 为 0。

返回值

如果应用程序处理此消息,则它会返回非零值;否则返回 0。

备注

OnCommand 处理控件通知和 ON_COMMAND 条目的消息映射,并调用相应的成员函数。

在派生类中重写此成员函数以处理 WM_COMMAND 消息。 除非调用基类 OnCommand,否则重写不会处理消息映射。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCompacting

当 Windows 检测到在 30 到 60 秒的间隔内,有超过 12.5% 的系统时间花费在内存压缩上时,框架将针对所有顶级窗口调用此成员函数。

afx_msg void OnCompacting(UINT nCpuTime);

参数

nCpuTime
指定 Windows 当前花费在内存压缩上的 CPU 时间与花费在执行其他操作上的 CPU 时间之比。 例如,8000h 表示有 50% 的 CPU 时间花费在内存压缩上。

备注

这指示系统内存不足。

CWnd 对象收到此调用时,它应释放尽可能多的内存,同时考虑应用程序的当前活动级别,以及 Windows 中运行的应用程序总数。 应用程序可以调用 Windows 函数来确定有多少个应用程序正在运行。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCompareItem

框架调用此成员函数来指定新项在已排序的所有者绘制子组合框或列表框中的相对位置。

afx_msg int OnCompareItem(
    int nIDCtl,
    LPCOMPAREITEMSTRUCT lpCompareItemStruct);

参数

nIDCtl
发送了 WM_COMPAREITEM 消息的控件的标识符。

lpCompareItemStruct
包含指向 COMPAREITEMSTRUCT 数据结构的长指针,该结构包含组合框或列表框中两个项的标识符以及应用程序为这两个项提供的数据。

返回值

指示两个项的相对位置。 可以是以下任一值:

含义
-1 项 1 排在项 2 之前。
0 项 1 和项 2 顺序相同。
1 项 1 排在项 2 之后。

备注

如果使用 CBS_SORTLBS_SORT 样式创建了组合框或列表框,则每当应用程序添加新项时,Windows 就会向组合框或列表框所有者发送 WM_COMPAREITEM 消息。

组合框或列表框中的两个项在 lpCompareItemStruct 指向的 COMPAREITEMSTRUCT 结构中重新排列。 OnCompareItem 应返回一个值,指示哪个项应出现在另一个项之前。 通常,Windows 会多次发出此调用,直到确定了新项的确切位置。

如果 COMPAREITEMSTRUCT 结构的 hwndItem 成员属于 CListBoxCComboBox 对象,则调用相应类的 CompareItem 虚拟函数。 在派生的 CListBoxCComboBox 类中重写 CComboBox::CompareItemCListBox::CompareItem 以进行项比较。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCompositionChanged

当启用或禁用桌面窗口管理器 (DWM) 组合时,框架将针对所有顶级窗口调用此成员函数。

afx_msg void OnCompositionChanged();

备注

此方法接收 Windows SDK 中所述的 WM_DWMCOMPOSITIONCHANGED 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnContextMenu

当用户在窗口中单击鼠标右键(右键单击)时由框架调用。

afx_msg void OnContextMenu(
    CWnd* pWnd,
    CPoint pos);

参数

pWnd
用户单击鼠标右键时所在的窗口的句柄。 此窗口可以是接收消息的窗口的子窗口。 有关处理此消息的详细信息,请参阅“注解”部分。

pos
单击鼠标时光标的位置,以屏幕坐标表示。

注解

可以通过使用 TrackPopupMenu 显示上下文菜单来处理此消息。

如果不显示上下文菜单,则应将此消息传递给 DefWindowProc 函数。 如果你的窗口是子窗口,DefWindowProc 会将消息发送到父级。 否则,如果指定的位置在窗口的标题中,则 DefWindowProc 将显示默认上下文菜单。

CWnd::OnCopyData

框架调用此成员函数将数据从一个应用程序复制到另一个应用程序。

afx_msg BOOL OnCopyData(
    CWnd* pWnd,
    COPYDATASTRUCT* pCopyDataStruct);

参数

pWnd
指向正在发送数据的 CWnd 对象的指针。

pCopyDataStruct
指向包含正在发送的数据的 COPYDATASTRUCT 结构的指针。

返回值

如果接收方应用程序成功接受数据,则返回 TRUE。 否则返回 FALSE

备注

传递的数据不能包含指向接收数据的应用程序无法访问的对象的指针,或对这种对象的引用。

复制数据时,数据不能由发送进程的另一个线程更改。

接收方应用程序应将数据视为只读。 参数 pCopyDataStruct 指向的结构仅在数据传输期间有效;但是,接收方应用程序不应释放与该结构关联的内存。

如果接收方应用程序需要在该函数返回后访问数据,则它必须将收到的数据复制到本地缓冲区。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCreate

当应用程序通过调用 CreateCreateEx 成员函数请求创建 Windows 窗口时,框架会调用此成员函数。

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

参数

lpCreateStruct
指向包含有关正在创建的 CWnd 对象的信息的 CREATESTRUCT 结构。

返回值

OnCreate 必须返回 0 才能继续创建 CWnd 对象。 如果应用程序返回 -1,则会销毁窗口。

备注

CWnd 对象在创建窗口之后、窗口可见之前接收此调用。 在 CreateCreateEx 成员函数返回之前调用 OnCreate

重写此成员函数可执行派生类的任何所需初始化。

CREATESTRUCT 结构包含用于创建窗口的参数的副本。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnCtlColor

即将绘制子控件时,框架会调用此成员函数。

afx_msg HBRUSH OnCtlColor(
    CDC* pDC,
    CWnd* pWnd,
    UINT nCtlColor);

参数

pDC
包含指向子窗口的显示上下文的指针。 可能是暂时性指针。

pWnd
包含指向请求颜色的控件的指针。 可能是暂时性指针。

nCtlColor
包含以下用于指定控件类型的值之一:

  • CTLCOLOR_BTN 按钮控件

  • CTLCOLOR_DLG 对话框

  • CTLCOLOR_EDIT 编辑控件

  • CTLCOLOR_LISTBOX 列表框控件

  • CTLCOLOR_MSGBOX 消息框

  • CTLCOLOR_SCROLLBAR 滚动条控件

  • CTLCOLOR_STATIC 静态控件

返回值

OnCtlColor 必须返回用于绘制控件背景的画笔的句柄。

注解

大多数控件将此消息发送到其父级(通常是一个对话框),以准备 pDC 来使用正确的颜色绘制控件。

若要更改文本颜色,请使用所需的红绿蓝 (RGB) 值调用 SetTextColor 成员函数。

若要更改单行编辑控件的背景色,请在 CTLCOLOR_EDITCTLCOLOR_MSGBOX 消息代码中设置画笔句柄,并调用 CDC::SetBkColor 函数来响应 CTLCOLOR_EDIT 代码。

不会对下拉组合框的列表框调用 OnCtlColor,因为下拉列表框实际上是组合框的子级,而不是窗口的子级。 若要更改下拉列表框的颜色,请在 nCtlColor 参数中创建一个 CComboBox,并在其中包含一个用于检查 CTLCOLOR_LISTBOXOnCtlColor 重写。 在此处理程序中,必须使用 SetBkColor 成员函数来设置文本的背景色。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。 若要将以下方法添加到对话框类,请使用 Visual Studio 属性窗格添加 WM_CTLCOLOR 的消息处理程序。 或者,可以手动将 ON_WM_CTLCOLOR() 条目添加到消息映射。

示例

// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use
   // CWnd::GetDlgCtrlID() to perform the most efficient test.
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent 
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

CWnd::OnDeadChar

调用 OnKeyUp 成员函数和 OnKeyDown 成员函数时,框架会调用此成员函数。

afx_msg void OnDeadChar(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定死键字符值。

nRepCnt
指定重复次数。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

说明
0-7 扫描代码(OEM 相关的值)。 高位字的低字节。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1;否则为 0)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1;否则为 0)。
14 前一键状态(如果在调用之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

注解

此成员函数可用于指定死键的字符值。 死键是与其他字符组合形成复合字符的键,例如变音符号(双点)字符。 例如,Ö 字符由死键、变音符号和 O 键组成。

应用程序通常使用 OnDeadChar 向用户提供有关每个按下的键的反馈。 例如,应用程序可以在当前字符位置显示音调,而不移动插入点。

由于按下的键与 OnDeadChar 调用之间不一定存在一一对应关系,因此 nFlags 中的信息通常对应用程序没有作用。 nFlags 中的信息仅适用于最近在调用 OnDeadChar 之前进行的 OnKeyUp 成员函数或 OnKeyDown 成员函数调用。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnDeleteItem

框架调用此成员函数来告知所有者绘制列表框或组合框的所有者该列表框或组合框已销毁,或者项已由 CComboBox::DeleteStringCListBox::DeleteStringCComboBox::ResetContentCListBox::ResetContent 删除。

afx_msg void OnDeleteItem(
    int nIDCtl,
    LPDELETEITEMSTRUCT lpDeleteItemStruct);

参数

nIDCtl
发送了 WM_DELETEITEM 消息的控件的标识符。

lpDeleteItemStruct
指定指向 DELETEITEMSTRUCT 数据结构的长指针,该结构包含有关已删除的列表框项的信息。

备注

如果 DELETEITEMSTRUCT 结构的 hwndItem 成员属于组合框或列表框,则调用相应类的 DeleteItem 虚拟函数。 重写相应控件类的 DeleteItem 成员函数可删除项特定的数据。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnDestroy

框架调用此成员函数来告知 CWnd 对象它正被销毁。

afx_msg void OnDestroy();

备注

从屏幕中删除 CWnd 对象后调用 OnDestroy

OnDestroy 首先对正在销毁的 CWnd 调用,然后对已销毁的 CWnd 子窗口调用。 可以假设在 OnDestroy 运行时所有子窗口仍然存在。

如果正在销毁的 CWnd 对象是剪贴板查看器链的一部分(通过调用 SetClipboardViewer 成员函数来设置),则 CWnd 必须在从 OnDestroy 函数返回之前,通过调用 ChangeClipboardChain 成员函数将自身从剪贴板查看器链中删除。

CWnd::OnDestroyClipboard

通过调用 EmptyClipboard Windows 函数清空剪贴板时,框架将对剪贴板所有者调用此成员函数。

afx_msg void OnDestroyClipboard();

CWnd::OnDeviceChange

框架调用此成员函数来向应用程序或设备驱动程序通知设备或计算机的硬件配置发生了更改。

afx_msg BOOL OnDeviceChange(
    UINT nEventType,
    DWORD_PTR dwData);

参数

nEventType
一种事件类型。 有关可用值的说明,请参阅“注解”部分

dwData
包含事件特定数据的结构的地址。 其含义取决于给定的事件。

注解

对于提供软件可控制功能(例如弹出和锁定)的设备,操作系统通常会发送 DBT_DEVICEREMOVEPENDING 消息,让应用程序和设备驱动程序正常结束其设备使用。

如果操作系统强行删除设备,它可能不会在执行此操作之前发送 DBT_DEVICEQUERYREMOVE 消息。

nEvent 参数可使用以下值之一:

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnDevModeChange

当用户更改设备模式设置时,框架将针对所有顶级 CWnd 对象调用此成员函数。

afx_msg void OnDevModeChange(LPTSTR lpDeviceName);

参数

lpDeviceName
指向在 Windows 初始化文件 WIN.INI 中指定的设备名称。

注解

处理 WM_DEVMODECHANGE 消息的应用程序可以重新初始化其设备模式设置。 使用 Windows ExtDeviceMode 函数保存和还原设备设置的应用程序通常不处理此函数。

当用户从控制面板更改默认打印机时不会调用此函数。 在这种情况下,将调用 OnWinIniChange 函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnDrawClipboard

当剪贴板的内容更改时,框架将针对剪贴板查看器链中的每个窗口调用此成员函数。

afx_msg void OnDrawClipboard();

备注

只有已通过调用 SetClipboardViewer 成员函数加入剪贴板查看器链的应用程序才需要响应此调用。

接收 OnDrawClipboard 调用的每个窗口都应调用 SendMessage Windows 函数,以将 WM_DRAWCLIPBOARD 消息传递给剪贴板查看器链中的下一个窗口。 下一个窗口的句柄由 SetClipboardViewer 成员函数返回;可以修改该句柄以响应 OnChangeCbChain 成员函数调用。

CWnd::OnDrawIconicThumbnailOrLivePreview

由框架在需要获取要在 Windows 7 选项卡缩略图上或客户端上(进行应用程序速览)显示的位图时进行调用。

virtual void OnDrawIconicThumbnailOrLivePreview(
    CDC& dc,
    CRect rect,
    CSize szRequiredThumbnailSize,
    BOOL bIsThumbnail,
    BOOL& bAlphaChannelSet);

参数

dc
指定设备上下文。

rect
指定要呈现的区域的边框。

szRequiredThumbnailSize
指定目标缩略图的大小。 如果 bIsThumbnailFALSE,则应忽略。

bIsThumbnail
指定是否为图标缩略图或实时预览(速览)调用此方法。

bAlphaChannelSet
[out] 如果你的实现初始化在 dc 中选择的位图的 Alpha 通道,请将其设置为 TRUE

备注

在派生类中重写此方法并在指定的设备上下文上绘制以自定义缩略图和速览。 如果 bThumbnailTRUE,则可忽略 szRequiredThumbnailSize。 在这种情况下,应该知道绘制的是全大小位图(即覆盖整个工作区的位图)。 设备上下文 (dc) 随附选定的 32 位位图。 默认实现将 WM_PRINT 连同 PRF_CLIENTPRF_CHILDRENPRF_NONCLIENT 标志一起发送到此窗口。

CWnd::OnDrawItem

当控件或菜单的视觉方面发生更改时,框架将对所有者绘制按钮控件、组合框控件、列表框控件或菜单的所有者调用此成员函数。

afx_msg void OnDrawItem(
    int nIDCtl,
    LPDRAWITEMSTRUCT lpDrawItemStruct);

参数

nIDCtl
包含发送了 WM_DRAWITEM 消息的控件的标识符。 如果菜单发送了消息,则 nIDCtl 包含 0。

lpDrawItemStruct
指定指向 DRAWITEMSTRUCT 数据结构的长指针,该结构包含有关要绘制的项和所需绘制类型的信息。

备注

DRAWITEMSTRUCT 结构的 itemAction 成员定义要执行的绘制操作。 此成员中的数据允许控件所有者确定所需的绘制操作。

在处理此消息后返回之前,应用程序应确保 DRAWITEMSTRUCT 结构的 hDC 成员所标识的设备上下文已还原到默认状态。

如果 hwndItem 成员属于 CButtonCMenuCListBoxCComboBox 对象,则调用相应类的 DrawItem 虚拟函数。 重写相应控件类的 DrawItem 成员函数可绘制项。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnDropFiles

当用户在一个已将自身注册为所放置文件的接收方的窗口上释放鼠标左键时,框架会调用此成员函数。

afx_msg void OnDropFiles(HDROP hDropInfo);

参数

hDropInfo
指向描述放置的文件的内部数据结构的指针。 DragFinishDragQueryFileDragQueryPoint Windows 函数使用此句柄来检索有关放置的文件的信息。

注解

通常,派生类将设计为支持放置的文件,并且在窗口构造期间会注册自身。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEnable

当应用程序更改 CWnd 对象的已启用状态时,框架会调用此成员函数。

afx_msg void OnEnable(BOOL bEnable);

参数

bEnable
指定 CWnd 对象是已启用还是已禁用。 如果已启用 CWnd,则此参数为 TRUE;如果已禁用 CWnd,则为 FALSE

备注

EnableWindow 成员函数返回之前、窗口已启用状态(WS_DISABLED 样式位)更改之后调用 OnEnable

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEndSession

CWnd 对象从 OnQueryEndSession 成员函数调用返回非零值后,框架会调用此成员函数。

afx_msg void OnEndSession(BOOL bEnding);

参数

bEnding
指定是否正在结束会话。 如果正在结束会话,则为 TRUE;否则为 FALSE

备注

OnEndSession 调用向 CWnd 对象告知是否正在实际结束会话。

如果 bEndingTRUE,则 Windows 可以在所有应用程序处理此调用并返回后随时终止。 因此,让应用程序在 OnEndSession 内部执行终止所需的所有任务。

当会话正在结束时,你无需调用 DestroyWindow 成员函数或 PostQuitMessage Windows 函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEnterIdle

框架调用此成员函数以向应用程序的主窗口过程告知模式对话框或菜单正在进入空闲状态。

afx_msg void OnEnterIdle(
    UINT nWhy,
    CWnd* pWho);

参数

nWhy
指定消息是因显示对话框还是菜单而生成的。 此参数可能是以下值之一:

  • MSGF_DIALOGBOX 由于正在显示对话框,系统处于空闲状态。

  • MSGF_MENU 由于正在显示菜单,系统处于空闲状态。

pWho
指定指向对话框(如果 nWhyMSGF_DIALOGBOX)或包含显示的菜单的窗口(如果 nWhyMSGF_MENU)的指针。 此指针可能是暂时性的,不应存储它以供稍后使用。

注解

在处理一条或多条先前消息后,当其队列中没有消息处于等待状态时,模式对话框或菜单将进入空闲状态。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEnterMenuLoop

进入菜单模式循环后,框架会调用此成员函数。

afx_msg void OnEnterMenuLoop(BOOL bIsTrackPopupMenu);

参数

bIsTrackPopupMenu
指定相关的菜单是否为弹出菜单。 如果该函数成功,则使用非零值;否则使用 0。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEnterSizeMove

在受影响的窗口进入移动或大小调整模式循环后,框架会调用此成员函数一次。

afx_msg void OnEnterSizeMove();

备注

此方法接收 Windows SDK 中所述的 WM_ENTERSIZEMOVE 通知。

当用户单击窗口的标题栏或大小调整边框,或者当窗口将 WM_SYSCOMMAND 消息传递给 CWnd::DefWindowProc 函数并且该消息的 wParam 参数指定 SC_MOVESC_SIZE 时,窗口将进入移动或大小调整模式循环

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnEraseBkgnd

CWnd 对象背景需要擦除时(例如,调整大小时),框架会调用此成员函数。

afx_msg BOOL OnEraseBkgnd(CDC* pDC);

参数

pDC
指定设备上下文对象。

返回值

如果擦除背景,则返回非零值;否则返回 0。

备注

调用它来准备一个用于绘制的失效区域。

默认实现使用窗口类结构的 hbrBackground 成员指定的窗口类背景画笔来擦除背景。

如果 hbrBackground 成员为 NULL,则 OnEraseBkgnd 的重写版本应擦除背景色。 该版本还应通过首先对画笔调用 UnrealizeObject,然后选择画笔,将所需画笔的原点与 CWnd 坐标对齐。

如果重写的 OnEraseBkgnd 处理消息并擦除背景,则它应返回非零值以响应 WM_ERASEBKGND;这表示不需要进一步擦除。 如果它返回 0,则窗口将仍旧标记为需要擦除。 (通常,这意味着 PAINTSTRUCT 结构的 fErase 成员将是 TRUE。)

Windows 假设使用 MM_TEXT 映射模式来计算背景。 如果设备上下文使用任何其他映射模式,则擦除的区域可能不在工作区的可见部分内。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnExitMenuLoop

退出菜单模式循环后,框架会调用此成员函数。

afx_msg void OnExitMenuLoop(BOOL bIsTrackPopupMenu);

参数

bIsTrackPopupMenu
指定相关的菜单是否为弹出菜单。 如果该函数成功,则使用非零值;否则使用 0。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnExitSizeMove

在受影响的窗口退出移动或大小调整模式循环后,框架会调用此成员函数一次。

afx_msg void OnExitSizeMove();

注解

此方法接收 Windows SDK 中所述的 WM_EXITSIZEMOVE 通知。

当用户单击窗口的标题栏或大小调整边框,或者当窗口将 WM_SYSCOMMAND 消息传递给 CWnd::DefWindowProc 函数并且该消息的 wParam 参数指定 SC_MOVESC_SIZE 时,窗口将进入移动或大小调整模式循环。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnFontChange

在应用程序更改字体资源池后,系统中的所有顶级窗口都会收到来自框架的 OnFontChange 调用。

afx_msg void OnFontChange();

注解

在系统中添加或删除字体(例如,通过 AddFontResourceRemoveFontResource Windows 函数)的应用程序应将 WM_FONTCHANGE 消息发送到所有顶级窗口。

若要发送此消息,请结合设置为 HWND_BROADCASThWnd 参数使用 SendMessage Windows 函数。

CWnd::OnGetDlgCode

针对控件进行调用,以便控件可以自己处理箭头键和 TAB 键输入。

afx_msg UINT OnGetDlgCode();

返回值

以下一个或多个值,指示应用程序处理的输入类型:

  • DLGC_BUTTON 按钮(泛型)。

  • DLGC_DEFPUSHBUTTON 默认按钮。

  • DLGC_HASSETSELEM_SETSEL 消息。

  • DLGC_UNDEFPUSHBUTTON 不进行默认按钮处理。 (应用程序可将此标志与 DLGC_BUTTON 结合使用,以指示它处理按钮输入但依赖系统进行默认按钮处理。)

  • DLGC_RADIOBUTTON 单选按钮。

  • DLGC_STATIC 静态控件。

  • DLGC_WANTALLKEYS 所有键盘输入。

  • DLGC_WANTARROWS 箭头键。

  • DLGC_WANTCHARSWM_CHAR 消息。

  • DLGC_WANTMESSAGE 所有键盘输入。 应用程序将此消息传递给控件。

  • DLGC_WANTTAB TAB 键。

注解

通常,Windows 处理 CWnd 控件的所有箭头键和 TAB 键输入。 通过重写 OnGetDlgCodeCWnd 控件可以选择使用特定类型的输入来处理自身。

预定义控件类的默认 OnGetDlgCode 函数返回适用于每个类的代码。

CWnd::OnGetMinMaxInfo

每当 Windows 需要知道最大化位置或尺寸或者最小或最大跟踪大小时,框架都会调用此成员函数。

afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);

参数

lpMMI
指向 MINMAXINFO 结构,该结构包含有关窗口的最大化大小和位置及其最小和最大跟踪大小的信息。 有关此结构的详细信息,请参阅 MINMAXINFO 结构。

备注

最大化大小是当窗口的边框完全展开时的大小。 窗口的最大跟踪大小是使用边框来调整窗口大小所能达到的最大窗口大小。 窗口的最小跟踪大小是使用边框来调整窗口大小所能达到的最小窗口大小。

Windows 填充一个点数组,为各种位置和尺寸指定默认值。 应用程序可能会更改 OnGetMinMaxInfo 中的这些值。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnHelp

处理应用程序中的 F1 帮助(使用当前上下文)。

afx_msg void OnHelp();

备注

有关详细信息,请参阅CWinApp::OnHelp

CWnd::OnHelpFinder

处理 ID_HELP_FINDERID_DEFAULT_HELP 命令。

afx_msg void OnHelpFinder();

备注

有关详细信息,请参阅CWinApp::OnHelpFinder

CWnd::OnHelpIndex

处理 ID_HELP_INDEX 命令,并提供默认帮助主题。

afx_msg void OnHelpIndex();

备注

有关详细信息,请参阅CWinApp::OnHelpIndex

CWnd::OnHelpInfo

当用户按 F1 键时,由框架调用。

afx_msg BOOL OnHelpInfo(HELPINFO* lpHelpInfo);

参数

lpHelpInfo
指向 HELPINFO 结构的指针,该结构包含有关请求了其帮助的菜单项、控件、对话框或窗口的信息。

返回值

如果窗口具有键盘焦点或者菜单在窗口中处于活动状态,则返回 TRUE。 如果没有任何窗口具有键盘焦点,则返回 FALSE

备注

如果按 F1 时某个菜单处于活动状态,则将 WM_HELP 发送到与该菜单关联的窗口;否则将 WM_HELP 发送到具有键盘焦点的窗口。 如果没有任何窗口具有键盘焦点,则将 WM_HELP 发送到当前处于活动状态的窗口。

CWnd::OnHelpUsing

处理 ID_HELP_USING 命令。

afx_msg void OnHelpUsing();

注解

有关详细信息,请参阅CWinApp::OnHelpUsing

CWnd::OnHotKey

当用户按下系统范围的热键时,框架会调用此成员函数。

afx_msg void OnHotKey(
    UINT nHotKeyId,
    UINT nKey1,
    UINT nKey2);

参数

nHotKeyId
[in] 生成了消息的热键的标识符。 如果消息是由系统定义的热键生成的,则此参数将使用以下值之一:

  • IDHOT_SNAPDESKTOP - 按下了贴靠桌面热键。
  • IDHOT_SNAPWINDOW - 按下了贴靠窗口热键。

nKey1
[in] 标志的按位组合 (OR),指示与 nKey2 参数指定的键一起按下的键。 可能的值为:

  • MOD_ALT - 按住了任一 ALT 键。
  • MOD_CONTROL - 按住了任一 CTRL 键。
  • MOD_SHIFT - 按住了任一 SHIFT 键。
  • MOD_WIN - 按住了任一 WINDOWS 键。 这些键标有 Microsoft Windows 徽标。

nKey2
[in] 热键的虚拟键代码。

备注

此方法接收 Windows SDK 中所述的 WM_HOTKEY 通知。 此消息放置在与注册了热键的线程关联的消息队列的顶部。 使用 RegisterHotKey 函数注册系统范围的热键。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnHScroll

当用户单击窗口的水平滚动条时,框架会调用此成员函数。

afx_msg void OnHScroll(
    UINT nSBCode,
    UINT nPos,
    CScrollBar* pScrollBar);

参数

nSBCode
指定一个滚动条代码,指示用户的滚动请求。 此参数可以是以下项之一:

  • SB_LEFT 滚动到最左边。

  • SB_ENDSCROLL 结束滚动。

  • SB_LINELEFT 向左滚动。

  • SB_LINERIGHT 向右滚动。

  • SB_PAGELEFT 向左滚动一页。

  • SB_PAGERIGHT 向右滚动一页。

  • SB_RIGHT 滚动到最右边。

  • SB_THUMBPOSITION 滚动到绝对位置。 当前位置由 nPos 参数指定。

  • SB_THUMBTRACK 将滚动框拖到指定位置。 当前位置由 nPos 参数指定。

nPos
如果滚动条代码为 SB_THUMBPOSITIONSB_THUMBTRACK,则指定滚动框位置;否则不使用此参数。 根据初始滚动范围,nPos 可能为负,并且应在必要时强制转换为 int

pScrollBar
如果滚动消息来自滚动条控件,则包含指向该控件的指针。 如果用户单击了窗口的滚动条,则此参数为 NULL。 该指针可能是暂时性的,不应存储它以供稍后使用。

备注

在拖动滚动框时,提供某些反馈的应用程序通常使用 SB_THUMBTRACK 滚动条代码。

如果应用程序滚动由滚动条控制的内容,则它还必须使用 SetScrollPos 成员函数来重置滚动框的位置。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

示例

void CMdiView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
{
   // Get the minimum and maximum scroll-bar positions.
   int minpos;
   int maxpos;
   GetScrollRange(SB_HORZ, &minpos, &maxpos);
   maxpos = GetScrollLimit(SB_HORZ);

   // Get the current position of scroll box.
   int curpos = GetScrollPos(SB_HORZ);

   // Determine the new position of scroll box.
   switch (nSBCode)
   {
   case SB_LEFT: // Scroll to far left.
      curpos = minpos;
      break;

   case SB_RIGHT: // Scroll to far right.
      curpos = maxpos;
      break;

   case SB_ENDSCROLL: // End scroll.
      break;

   case SB_LINELEFT: // Scroll left.
      if (curpos > minpos)
         curpos--;
      break;

   case SB_LINERIGHT: // Scroll right.
      if (curpos < maxpos)
         curpos++;
      break;

   case SB_PAGELEFT: // Scroll one page left.
   {
      // Get the page size.
      SCROLLINFO info;
      GetScrollInfo(SB_HORZ, &info, SIF_ALL);

      if (curpos > minpos)
         curpos = max(minpos, curpos - (int)info.nPage);
   }
   break;

   case SB_PAGERIGHT: // Scroll one page right.
   {
      // Get the page size.
      SCROLLINFO info;
      GetScrollInfo(SB_HORZ, &info, SIF_ALL);

      if (curpos < maxpos)
         curpos = min(maxpos, curpos + (int)info.nPage);
   }
   break;

   case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
      curpos = nPos;      // of the scroll box at the end of the drag operation.
      break;

   case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
      curpos = nPos;   // position that the scroll box has been dragged to.
      break;
   }

   // Set the new position of the thumb (scroll box).
   SetScrollPos(SB_HORZ, curpos);

   CView::OnHScroll(nSBCode, nPos, pScrollBar);
}

CWnd::OnHScrollClipboard

当剪贴板数据采用 CF_OWNERDISPLAY 格式并且剪贴板查看器的水平滚动条中具有事件时,剪贴板查看器会调用剪贴板所有者的 OnHScrollClipboard 成员函数。

afx_msg void OnHScrollClipboard(
    CWnd* pClipAppWnd,
    UINT nSBCode,
    UINT nPos);

参数

pClipAppWnd
指定指向剪贴板查看器窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。

nSBCode
在低位字中指定以下滚动条代码之一:

  • SB_BOTTOM 滚动到右下角。

  • SB_ENDSCROLL 结束滚动。

  • SB_LINEDOWN 向下滚动一行。

  • SB_LINEUP 向上滚动一行。

  • SB_PAGEDOWN 向下滚动一页。

  • SB_PAGEUP 向上滚动一页。

  • SB_THUMBPOSITION 滚动到绝对位置。 当前位置在 nPos 中提供。

  • SB_TOP 滚动到左上角。

nPos
如果滚动条代码为 SB_THUMBPOSITION,则包含滚动框位置;否则不使用此参数。

备注

所有者应滚动剪贴板图像、使相应部分失效以及更新滚动条值。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnIconEraseBkgnd

必须在绘制图标之前填充图标的背景时,框架将对最小化的(图标)CWnd 对象调用此成员函数。

afx_msg void OnIconEraseBkgnd(CDC* pDC);

参数

pDC
指定图标的设备上下文对象。 可能是暂时性的,不应存储它以供稍后使用。

备注

仅当为窗口默认实现定义了类图标时,CWnd 才接收此调用;否则调用 OnEraseBkgnd

DefWindowProc 成员函数使用父窗口的背景画笔来填充图标背景。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnInitMenu

当菜单即将变为活动状态时,框架会调用此成员函数。

afx_msg void OnInitMenu(CMenu* pMenu);

参数

pMenu
指定要初始化的菜单。 可能是暂时性的,不应存储它以供稍后使用。

注解

当用户单击菜单栏上的项或按下菜单键时,将调用 OnInitMenu。 重写此成员函数可在显示菜单之前对其进行修改。

OnInitMenu 仅在首次访问菜单时(例如,当用户单击菜单栏上的项时)调用一次。 此方法不提供有关菜单项的信息。 当用户移到菜单中的项时(例如,通过在多个菜单项上移动鼠标),不会再次调用该函数。 在用户退出菜单(例如,通过单击应用程序工作区)并随后单击菜单栏上的某个项后,将再次调用该函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnInitMenuPopup

当弹出菜单即将变为活动状态时,框架会调用此成员函数。

afx_msg void OnInitMenuPopup(
    CMenu* pPopupMenu,
    UINT nIndex,
    BOOL bSysMenu);

参数

pPopupMenu
指定弹出菜单的菜单对象。 可能是暂时性的,不应存储它以供稍后使用。

nIndex
指定主菜单中的弹出菜单的索引。

bSysMenu
如果弹出菜单是控件菜单,则为 TRUE;否则为 FALSE

备注

这样,应用程序就可以在显示弹出菜单之前对其进行修改,而无需更改整个菜单。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnInputDeviceChange

在系统中添加或删除 I/O 设备时,框架会调用此成员函数。

afx_msg void OnInputDeviceChange(unsigned short uFlag);

参数

uFlag
[in] 此标志可包含以下值:

  • GIDC_ARRIVAL - 已将新设备添加到系统。
  • GIDC_REMOVAL - 已从系统中删除设备。

备注

此方法接收 Windows SDK 中所述的 WM_INPUT_DEVICE_CHANGE 通知。 这是一条常规输入设备消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnInputLangChange

更改应用程序的输入语言后,框架将对受影响的最顶部窗口调用此成员。

afx_msg void OnInputLangChange(
    UINT nCharSet,
    UINT nLocaleId);

参数

nCharSet
[in] 新区域设置的字符集。 有关详细信息,请参阅 LOGFONT 结构的 lfCharSet 参数。

nLocaleId
[in] 输入区域设置标识符。 有关详细信息,请参阅语言标识符常量和字符串

备注

此方法接收 Windows SDK 中所述的 WM_INPUTLANGCHANGE 通知消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnInputLangChangeRequest

当用户选择新的输入语言时,框架将针对具有焦点的窗口调用此成员。

afx_msg void OnInputLangChangeRequest(
    UINT nFlags,
    UINT nLocaleId);

参数

nFlags
[in] 标志的按位 (OR) 组合,指示从已安装的区域设置列表中的上一个或下一个区域设置中选择了新区域设置,或者新输入区域设置的键盘布局可与系统字符集配合使用。 可能的值为 INPUTLANGCHANGE_BACKWARDINPUTLANGCHANGE_FORWARDINPUTLANGCHANGE_SYSCHARSET

nLocaleId
[in] 输入区域设置标识符。 有关详细信息,请参阅语言标识符常量和字符串

注解

此方法接收 Windows SDK 中所述的 WM_INPUTLANGCHANGEREQUEST 通知消息。 当用户使用键盘控制面板应用程序中指定的热键或系统任务栏上的指示器选择新的输入语言时,将发布此消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnKeyDown

按下非系统键时,框架会调用此成员函数。

afx_msg void OnKeyDown(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定给定键的虚拟键代码。 有关标准虚拟键代码的列表,请参阅 Winuser.h

nRepCnt
重复次数(由于用户按住键而重复击键的次数)。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

说明
0-7 扫描代码(OEM 相关的值)。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1;否则为 0)。
14 前一键状态(如果在调用之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

对于 WM_KEYDOWN 消息,键转换位(位 15)为 0,上下文代码位(位 13)为 0。

备注

非系统键是未按下 ALT 键的情况下按下的键盘键,或者当 CWnd 具有输入焦点时按下的键盘键。

由于自动重复,在发出 OnKeyUp 成员函数调用之前可能会多次调用 OnKeyDown。 该位指示可以使用前一键状态来确定 OnKeyDown 调用是首次按下转换还是重复按下转换。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnKeyUp

释放非系统键时,框架会调用此成员函数。

afx_msg void OnKeyUp(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定给定键的虚拟键代码。 有关标准虚拟键代码的列表,请参阅 Winuser.h

nRepCnt
重复次数(由于用户按住键而重复击键的次数)。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

说明
0-7 扫描代码(OEM 相关的值)。 高位字的低字节。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1;否则为 0)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1;否则为 0)。
14 前一键状态(如果在调用之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

对于 WM_KEYUP 消息,键转换位(位 15)为 1,上下文代码位(位 13)为 0。

备注

非系统键是未按下 ALT 键的情况下按下的键盘键,或者当 CWnd 具有输入焦点时按下的键盘键。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnKillFocus

框架在失去输入焦点之前的那一刻调用此成员函数。

afx_msg void OnKillFocus(CWnd* pNewWnd);

参数

pNewWnd
指定一个指向接收输入焦点的窗口的指针(可能是 NULL,也可能是暂时性的)。

注解

如果 CWnd 对象正在显示插入点,则此时应销毁插入点。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnLButtonDblClk

当用户双击鼠标左键时,框架会调用此成员函数。

afx_msg void OnLButtonDblClk(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

只有具有 CS_DBLCLKSWNDCLASS 样式的窗口才接收 OnLButtonDblClk 调用。 这是 Microsoft 基础类窗口的默认设置。 当用户在系统的双击时间限制内按下、释放然后再次按下鼠标左键时,Windows 将调用 OnLButtonDblClk。 双击鼠标左键实际上会生成四个事件:WM_LBUTTONDOWNWM_LBUTTONUP 消息、WM_LBUTTONDBLCLK 调用,以及释放按钮时生成的另一个 WM_LBUTTONUP 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnLButtonDown

当用户按下鼠标左键时,框架会调用此成员函数。

afx_msg void OnLButtonDown(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnLButtonUp

当用户释放鼠标左键时,框架会调用此成员函数。

afx_msg void OnLButtonUp(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMButtonDblClk

当用户双击鼠标中键时,框架会调用此成员函数。

afx_msg void OnMButtonDblClk(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

只有具有 CS_DBLCLKSWNDCLASS 样式的窗口才接收 OnMButtonDblClk 调用。 这是所有 Microsoft 基础类窗口的默认设置。 当用户在系统的双击时间限制内按下、释放然后再次按下鼠标中键时,Windows 将生成 OnMButtonDblClk 调用。 双击鼠标中键实际上会生成四个事件:WM_MBUTTONDOWNWM_MBUTTONUP 消息、WM_MBUTTONDBLCLK 调用以及另一个 WM_MBUTTONUP 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMButtonDown

当用户按下鼠标中键时,框架会调用此成员函数。

afx_msg void OnMButtonDown(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMButtonUp

当用户释放鼠标中键时,框架会调用此成员函数。

afx_msg void OnMButtonUp(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMDIActivate

框架针对正在停用的子窗口和正在激活的子窗口调用此成员函数。

afx_msg void OnMDIActivate(
    BOOL bActivate,
    CWnd* pActivateWnd,
    CWnd* pDeactivateWnd);

参数

bActivate
如果正在激活子级,则为 TRUE;如果正在停用子级,则为 FALSE

pActivateWnd
包含指向要激活的 MDI 子窗口的指针。 被 MDI 子窗口接收时,pActivateWnd 包含指向正在激活的子窗口的指针。 此指针可能是暂时性的,不应存储它以供稍后使用。

pDeactivateWnd
包含指向正在停用的 MDI 子窗口的指针。 此指针可能是暂时性的,不应存储它以供稍后使用。

注解

MDI 子窗口独立于 MDI 框架窗口激活。 当框架变为活动状态时,上次使用 OnMDIActivate 调用激活的子窗口会收到 WM_NCACTIVATE 消息以绘制活动窗口框架和标题栏,但它不会收到另一个 OnMDIActivate 调用。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMeasureItem

创建控件时,框架将针对所有者绘制按钮、组合框、列表框或菜单项的所有者调用此成员函数。

afx_msg void OnMeasureItem(
    int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);

参数

nIDCtl
控件的 ID。

lpMeasureItemStruct
指向包含所有者绘制控件尺寸的 MEASUREITEMSTRUCT 数据结构。

备注

重写此成员函数,填充 lpMeasureItemStruct 指向的 MEASUREITEMSTRUCT 数据结构并返回;这会向 Windows 告知控件的尺寸,并使 Windows 能够正确处理用户与控件的交互。

如果使用 LBS_OWNERDRAWVARIABLECBS_OWNERDRAWVARIABLE 样式创建了列表框或组合框,则框架将针对控件中每个项的所有者调用此函数;否则调用此函数一次。

在发送 WM_INITDIALOG 消息之前,Windows 将针对使用 OWNERDRAWFIXED 样式创建的组合框和列表框的所有者发起 OnMeasureItem 调用。 因此,当所有者收到此调用时,Windows 尚未确定控件中使用的字体的高度和宽度;需要这些值的函数调用和计算应在应用程序或库的 main 函数中发生。

如果要测量的项是 CMenuCListBoxCComboBox 对象,则会调用相应类的 MeasureItem 虚拟函数。 重写相应控件类的 MeasureItem 成员函数可计算和设置每个项的大小。

仅当控件的类是在运行时创建的,或者该控件是使用 LBS_OWNERDRAWVARIABLECBS_OWNERDRAWVARIABLE 样式创建的时,才会调用 OnMeasureItem。 如果该控件是由对话框编辑器创建的,则不会调用 OnMeasureItem。 这是因为,WM_MEASUREITEM 消息会在控件创建过程中提前发送。 如果使用 DDX_ControlSubclassDlgItemSubclassWindow 进行子类化,则子类化通常发生在创建过程之后。 因此,无法在控件的 OnChildNotify 函数(这是 MFC 用来实现 ON_WM_MEASUREITEM_REFLECT 的机制)中处理 WM_MEASUREITEM 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMenuChar

当用户按下不与当前菜单中任何预定义助记键匹配的菜单助记键字符时,框架会调用此成员函数。

afx_msg LRESULT OnMenuChar(
    UINT nChar,
    UINT nFlags,
    CMenu* pMenu);

参数

nChar
根据生成设置,指定用户按下的 ANSI 或 Unicode 字符。

nFlags
如果菜单是弹出菜单,则包含 MF_POPUP 标志。 如果菜单是控件菜单,则包含 MF_SYSMENU 标志。

pMenu
包含指向所选 CMenu 的指针。 该指针可能是暂时性指针,不应存储它。

返回值

返回值的高位字应包含以下命令代码之一:

说明
0 告知 Windows 丢弃用户按下的字符,并通过系统扬声器发出短促的哔声。
1 告知 Windows 关闭当前菜单。
2 向 Windows 告知返回值的低位字包含特定项的项编号。 此项是 Windows 选择的。

如果高位字包含 0 或 1,则忽略低位字。 使用加速键(快捷键)选择放置在菜单中的位图时,应用程序应处理此消息。

备注

消息将发送到拥有该菜单的 CWnd。 当用户按下 ALT 和其他任意键时,也会调用 OnMenuChar,即使该键不对应于助记键字符。 在这种情况下,pMenu 指向 CWnd 拥有的菜单,nFlags 为 0。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMenuDrag

当用户开始拖动菜单项时,框架将针对当前拖放菜单调用此成员函数。

afx_msg UINT OnMenuDrag(
    UINT nPos,
    CMenu* pMenu);

参数

nPos
[in] 拖动操作开始时菜单项的索引位置。

pMenu
[in] 指向包含菜单项的 CMenu 对象的指针。

返回值

返回值 含义
MND_CONTINUE 菜单应保持活动状态。 如果鼠标已释放,则应忽略它。
MND_ENDMENU 应结束菜单。

备注

此方法接收 Windows SDK 中所述的 WM_MENUDRAG 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMenuGetObject

当鼠标光标进入菜单项或从项的中间移到项的顶部或底部时,框架将针对当前拖放菜单调用此成员函数。

afx_msg UINT OnMenuGetObject(MENUGETOBJECTINFO* pMenuGetObjectInfo);

参数

pMenu
[in] 指向 MENUGETOBJECTINFO 结构的指针,该结构包含有关鼠标光标所在的拖放菜单的信息。

返回值

返回值 含义
MNGO_NOERROR 支持拖放操作的接口指针在 MENUGETOBJECTINFO 结构的 pvObj 成员中返回。 目前仅支持 IDropTarget 接口。
MNGO_NOINTERFACE 不支持拖放接口。

注解

此方法接收 Windows SDK 中所述的 WM_MENUGETOBJECT 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMenuRButtonUp

在光标位于菜单项上的情况下,当用户释放鼠标右键时,框架会调用此成员函数。

afx_msg void OnMenuRButtonUp(
    UINT nPos,
    CMenu* pMenu);

参数

nPos
[in] 释放鼠标右键时菜单项的索引位置。

pMenu
[in] 指向包含菜单项的 CMenu 对象的指针。

备注

此方法接收 Windows SDK 中所述的 WM_MENURBUTTONUP 通知。 WM_MENURBUTTONUP 消息使应用程序能够为消息中指定的菜单项提供区分上下文的菜单。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMenuSelect

如果 CWnd 对象与某个菜单相关联,则框架将在用户选择菜单项时调用 OnMenuSelect

afx_msg void OnMenuSelect(
    UINT nItemID,
    UINT nFlags,
    HMENU hSysMenu);

参数

nItemID
标识选定的项。 如果选定的项是菜单项,则 nItemID 包含菜单项 ID。 如果选定的项包含弹出菜单,则 nItemID 包含弹出菜单索引,hSysMenu 包含主(单击的)菜单的句柄。

nFlags
包含以下菜单标志的组合:

  • MF_BITMAP 项是位图。

  • MF_CHECKED 项已检中。

  • MF_DISABLED 项已禁用。

  • MF_GRAYED 项已灰显。

  • MF_MOUSESELECT 使用鼠标选择了项。

  • MF_OWNERDRAW 项是所有者绘制项。

  • MF_POPUP 项包含弹出菜单。

  • MF_SEPARATOR 项是菜单项分隔符。

  • MF_SYSMENU 项包含在控件菜单中。

hSysMenu
如果 nFlags 包含 MF_SYSMENU,则标识与消息关联的菜单。 如果 nFlags 包含 MF_POPUP,则标识主菜单的句柄。 如果 nFlags 不包含 MF_SYSMENUMF_POPUP,则表示未使用它。

备注

如果 nFlags 包含 0xFFFF 且 hSysMenu 包含 0,则表示由于用户按下了 ESC 键或已在菜单外部单击,Windows 已关闭菜单。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMouseActivate

当光标位于非活动窗口中并且用户按下鼠标按钮时,框架会调用此成员函数。

afx_msg int OnMouseActivate(
    CWnd* pDesktopWnd,
    UINT nHitTest,
    UINT message);

参数

pDesktopWnd
指定一个指向所要激活的窗口的顶级父窗口的指针。 该指针可能是暂时性指针,不应存储它。

nHitTest
指定命中测试区域代码。 命中测试是一项确定光标位置的测试。

message
指定鼠标消息编号。

返回值

指定是否激活 CWnd 以及是否丢弃鼠标事件。 它必须是以下值之一:

  • MA_ACTIVATE 激活 CWnd 对象。

  • MA_NOACTIVATE 不激活 CWnd 对象。

  • MA_ACTIVATEANDEAT 激活 CWnd 对象并丢弃鼠标事件。

  • MA_NOACTIVATEANDEAT 不激活 CWnd 对象并丢弃鼠标事件。

注解

默认实现在进行任何处理之前将此消息传递给父窗口。 如果父窗口返回 TRUE,则停止处理。

有关各个命中测试区域代码的说明,请参阅 OnNcHitTest 成员函数

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

示例

// The code fragment below shows how to UI activate an ActiveX control.
// CMyAxCtrl is a COleControl-derived class.
int CMyAxCtrl::OnMouseActivate(CWnd *pDesktopWnd, UINT nHitTest, UINT message)
{
   OnActivateInPlace(TRUE, NULL); // OnActivateInPlace() is an undocumented function
   return COleControl::OnMouseActivate(pDesktopWnd, nHitTest, message);
}

CWnd::OnMouseHover

当光标悬停在窗口的工作区上并在先前的 TrackMouseEvent 调用中指定的持续时间内保持此状态时,框架会调用此成员函数。

afx_msg void OnMouseHover(
    UINT nFlags,
    CPoint point);

参数

nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。

point
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

注解

此方法接收 Windows SDK 中所述的 WM_MOUSEHOVER 通知。

nFlags 参数可为下表中列出的修改键组合。 有关详细信息,请参阅关于鼠标输入

修改键 说明
MK_CONTROL 已按下 CTRL 键。
MK_LBUTTON 按下了鼠标左键。
MK_MBUTTON 按下了鼠标中键。
MK_RBUTTON 按下了鼠标右键。
MK_SHIFT 已按下 SHIFT 键。
MK_XBUTTON1 已按下 Microsoft IntelliMouse 的 XBUTTON1 鼠标按钮。
MK_XBUTTON2 已按下 Microsoft IntelliMouse 的 XBUTTON2 鼠标按钮。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMouseHWheel

当鼠标的水平滚轮倾斜或旋转时,框架会调用此成员。

afx_msg void OnMouseHWheel(
    UINT nFlags,
    short zDelta,
    CPoint pt);

参数

nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。 有关标志列表,请参阅关于鼠标输入中的“消息参数”子标题。

zDelta
[in] 表示滚轮的旋转距离,以 WHEEL_DELTA (120) 的倍数或除数表示。 正值表示滚轮向右旋转;负值表示滚轮向左旋转。

pt
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

备注

此方法接收 Windows SDK 中所述的 WM_MOUSEHWHEEL 通知消息。 当鼠标的水平滚轮倾斜或旋转时,此消息将发送到具有焦点的窗口。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMouseLeave

当光标离开在先前 TrackMouseEvent 调用中指定的窗口工作区时,框架会调用此成员函数。

afx_msg void OnMouseLeave();

备注

此方法接收 Windows SDK 中所述的 WM_MOUSELEAVE 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMouseMove

当鼠标光标移动时,框架会调用此成员函数。

afx_msg void OnMouseMove(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

如果未捕获鼠标,则鼠标光标下方的 CWnd 对象会收到 WM_MOUSEMOVE 消息;否则,消息将发送到捕获了鼠标的窗口。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMouseWheel

当用户旋转鼠标滚轮并遇到滚轮的下一个齿格时,框架会调用此成员函数。

afx_msg BOOL OnMouseWheel(
    UINT nFlags,
    short zDelta,
    CPoint pt);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

zDelta
指示旋转距离。 zDelta 值以 WHEEL_DELTA (120) 的倍数或除数表示。 小于零的值指示向后旋转(朝向用户),而大于零的值指示向前旋转(远离用户)。 用户可以通过在鼠标软件中更改滚轮设置来反转此响应。 有关此参数的详细信息,请参阅“注解”。

pt
指定光标的 x 和 y 坐标。 这些坐标始终相对于屏幕的左上角。

返回值

如果启用了鼠标滚轮滚动,则返回非零值;否则返回 0。

注解

除非重写,否则 OnMouseWheel 将调用 WM_MOUSEWHEEL 的默认值。 Windows 自动将消息路由到具有焦点的控件或子窗口。 Win32 函数 DefWindowProc 沿父链将消息传播到处理该消息的窗口。

zDelta 参数是 WHEEL_DELTA(设置为 120)的倍数。 此值是要执行的操作的阈值,应针对每个增量执行一个此类操作(例如,向前滚动一个齿格)。

WHEEL_DELTA 设置为 120 以提高滚轮(例如没有齿格的自由旋转滚轮)的精度。 滚轮精度越高,其每次旋转时发送的消息越多,但每条消息的增量值越小。 若要使用此类滚轮,请添加传入的 zDelta 值,直到达到 WHEEL_DELTA(以便获得给定增量旋转的相同响应),或者滚动部分行以响应更频繁的消息。 还可以选择滚动粒度并累积增量,直到达到 WHEEL_DELTA

重写此成员函数可提供你自己的鼠标滚轮滚动行为。

注意

OnMouseWheel 处理面向 Windows NT 4.0 和更高版本的消息。 要进行 Windows 95/98 或 Windows NT 3.51 消息处理,请使用 OnRegisteredMouseWheel

CWnd::OnMove

移动 CWnd 对象后,框架会调用此成员函数。

afx_msg void OnMove(
    int x,
    int y);

参数

x
指定工作区左上角的新 x 坐标位置。 此新位置以重叠窗口和弹出窗口的屏幕坐标以及子窗口的父客户端坐标形式给出。

y
指定工作区左上角的新 y 坐标位置。 此新位置以重叠窗口和弹出窗口的屏幕坐标以及子窗口的父客户端坐标形式给出。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnMoving

当用户移动 CWnd 对象时,框架会调用此成员函数。

afx_msg void OnMoving(
    UINT nSide,
    LPRECT lpRect);

参数

nSide
要移动的窗口边缘。

lpRect
将包含项坐标的 CRectRECT 结构的地址。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcActivate

需要更改非工作区以指示活动或非活动状态时,框架会调用此成员函数。

afx_msg BOOL OnNcActivate(BOOL bActive);

参数

bActive
指定何时需要更改标题栏或图标以指示活动或非活动状态。 如果要绘制活动标题栏或图标,则 bActive 参数为 TRUE。 如果要绘制非活动的标题栏或图标,此参数为 FALSE

返回值

如果 Windows 应继续进行默认处理,则返回非零值;如果要阻止停用标题栏或图标,则返回 0。

备注

如果 bActiveTRUE,则默认实现将以活动颜色绘制标题栏和标题栏文本;如果 bActiveFALSE,则以非活动颜色绘制。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcCalcSize

需要计算工作区的大小和位置时,框架会调用此成员函数。

afx_msg void OnNcCalcSize(
    BOOL bCalcValidRects,
    NCCALCSIZE_PARAMS* lpncsp);

参数

bCalcValidRects
指定应用程序是否应指定工作区的哪个部分包含有效信息。 Windows 会将有效信息复制到新工作区中的指定区域。 如果此参数为 TRUE,则应用程序应指定工作区的哪个部分有效。

lpncsp
指向 NCCALCSIZE_PARAMS 数据结构,其中包含可供应用程序用来计算 CWnd 矩形(包括工作区、边框、标题栏、滚动条等)的新大小和位置的信息。

注解

通过处理此消息,应用程序可以在窗口大小或位置发生更改时控制窗口工作区的内容。

无论 bCalcValidRects 的值如何,由 NCCALCSIZE_PARAMS 结构的 rgrc 结构成员指定的数组中的第一个矩形都包含窗口的坐标。 对于子窗口,坐标相对于父窗口的工作区。 对于顶级窗口,坐标是屏幕坐标。 应用程序应修改 rgrc[0] 矩形以反映工作区的大小和位置。

仅当 bCalcValidRectsTRUE 时,rgrc[1]rgrc[2] 矩形才有效。 在这种情况下,rgrc[1] 矩形包含窗口在移动或调整大小之前的坐标。 rgrc[2] 矩形包含移动窗口之前窗口工作区的坐标。 所有坐标相对于父窗口或屏幕。

默认实现根据窗口特征(滚动条、菜单等是否存在)计算工作区的大小,并将结果放在 lpncsp 中。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcCreate

首次创建 CWnd 对象时,框架会在发送 WM_CREATE 消息之前调用此成员函数。

afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct);

参数

lpCreateStruct
指向 CWndCREATESTRUCT 数据结构。

返回值

如果创建了非工作区,则返回非零值。 如果发生错误,则返回值为 0;在这种情况下,Create 函数将返回 failure

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcDestroy

销毁非工作区时由框架调用,它是在销毁 Windows 窗口时调用的最后一个成员函数。

afx_msg void OnNcDestroy();

注解

默认实现执行一些清理工作,然后调用虚拟成员函数 PostNcDestroy

如果你想要执行自己的清理(例如 delete this 操作),请重写 PostNcDestroy。 如果重写 OnNcDestroy,则必须在基类中调用 OnNcDestroy 以确保释放在内部分配给窗口的任何内存。

CWnd::OnNcHitTest

每次移动鼠标时,框架都会针对包含光标的 CWnd 对象(或使用 SetCapture 成员函数捕获鼠标输入的 CWnd 对象)调用此成员函数。

afx_msg LRESULT OnNcHitTest(CPoint point);

参数

point
包含光标的 x 和 y 坐标。 这些坐标始终是屏幕坐标。

返回值

鼠标命中测试枚举值之一。 有关值列表,请参阅 WM_NCHITTEST

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcLButtonDblClk

在光标位于 CWnd 的非工作区中的情况下,当用户双击鼠标左键时,框架会调用此成员函数。

afx_msg void OnNcLButtonDblClk(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

注解

在适当情况下会发送 WM_SYSCOMMAND 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcLButtonDown

在光标位于 CWnd 对象的非工作区中的情况下,当用户按下鼠标左键时,框架会调用此成员函数。

afx_msg void OnNcLButtonDown(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

在适当情况下会发送 WM_SYSCOMMAND

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递给函数的参数反映了框架在收到消息时收到的参数。如果调用此函数的基类实现,该实现将使用最初随消息一起传递的参数,而不是提供给函数的参数。

CWnd::OnNcLButtonUp

在光标位于非工作区中的情况下,当用户释放鼠标左键时,框架会调用此成员函数。

afx_msg void OnNcLButtonUp(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

注解

在适当情况下会发送 WM_SYSCOMMAND

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMButtonDblClk

在光标位于的非工作区中的情况下,当用户双击鼠标中键时,框架会调用此成员函数。

afx_msg void OnNcMButtonDblClk(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMButtonDown

在光标位于非工作区中的情况下,当用户按下鼠标中键时,框架会调用此成员函数。

afx_msg void OnNcMButtonDown(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMButtonUp

在光标位于非工作区中的情况下,当用户释放鼠标中键时,框架会调用此成员函数。

afx_msg void OnNcMButtonUp(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMouseHover

当光标悬停在窗口的非工作区上并在先前的 TrackMouseEvent 调用中指定的持续时间内保持此状态时,框架会调用此成员函数。

afx_msg void OnNcMouseHover(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
[in] 由 CWnd::DefWindowProc 函数作为 WM_NCHITTEST 消息处理结果返回的命中测试值。

point
[in] 一个 CPoint 对象,指定光标相对于屏幕左上角的 x 和 y 坐标

备注

此方法接收 Windows SDK 中所述的 WM_NCMOUSEHOVER 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMouseLeave

当光标离开在先前 TrackMouseEvent 调用中指定的窗口非工作区时,框架会调用此成员函数。

afx_msg void OnNcMouseLeave();

备注

此方法接收 Windows SDK 中所述的 WM_NCMOUSELEAVE 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcMouseMove

当光标在非工作区中移动时,框架会调用此成员函数。

afx_msg void OnNcMouseMove(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

在适当情况下会发送 WM_SYSCOMMAND 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcPaint

需要绘制非工作区时,框架会调用此成员函数。

afx_msg void OnNcPaint();

备注

默认实现绘制窗口框架。

应用程序可以重写此调用并绘制其自身的自定义窗口框架。 剪切区域始终是矩形,即使框架的形状已更改。

CWnd::OnNcRButtonDblClk

在光标位于 CWnd 的非工作区中的情况下,当用户双击鼠标右键时,框架会调用此成员函数。

afx_msg void OnNcRButtonDblClk(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcRButtonDown

在光标位于非工作区中的情况下,当用户按下鼠标右键时,框架会调用此成员函数。

afx_msg void OnNcRButtonDown(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcRButtonUp

在光标位于非工作区中的情况下,当用户释放鼠标右键时,框架会调用此成员函数。

afx_msg void OnNcRButtonUp(
    UINT nHitTest,
    CPoint point);

参数

nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。

point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint 对象。 这些坐标始终相对于屏幕的左上角。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcRenderingChanged

当非工作区的呈现策略已更改时,框架会调用此成员。

afx_msg void OnNcRenderingChanged(BOOL bIsRendering);

参数

bIsRendering
[in] 如果为窗口的非工作区启用了桌面窗口管理器 (DWM) 呈现,则此参数为 TRUE;如果禁用了呈现,则为 FALSE

注解

此方法接收 Windows SDK 中所述的 WM_DWMNCRENDERINGCHANGED 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcXButtonDblClk

在光标位于窗口的非工作区中的情况下,当用户双击 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

void OnNcXButtonDblClk(
    short nHitTest,
    UINT nButton,
    CPoint point);

参数

nHitTest
[in] 由 CWnd::DefWindowProc 函数作为 WM_NCHITTEST 消息处理结果返回的命中测试值。

nButton
[in] 如果双击了第一个 Microsoft Intellimouse X 按钮,则值为 XBUTTON1;如果双击了第二个 X 按钮,则值为 XBUTTON2

point
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

备注

此方法接收 Windows SDK 中所述的 WM_XBUTTONDBLCLK 通知。 此消息将发布到包含光标的窗口。 如果窗口捕获了鼠标,则不发布此消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcXButtonDown

在光标位于窗口的非工作区中的情况下,当用户按下鼠标的 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

afx_msg void OnNcXButtonDown(
    short nHitTest,
    UINT nButton,
    CPoint point);

参数

nHitTest
[in] 由 CWnd::DefWindowProc 函数作为 WM_NCHITTEST 消息处理结果返回的命中测试值。

nButton
[in] 如果按下第一个鼠标 X 按钮,则值为 XBUTTON1;如果按下第二个 X 按钮,则值为 XBUTTON2

point
[in] 一个 CPoint 对象,指定光标相对于屏幕左上角的 xy 坐标。

备注

此方法接收 Windows SDK 中所述的 WM_NCXBUTTONDOWN 通知。 此消息将发布到包含光标的窗口。 如果窗口捕获了鼠标,则不发布此消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNcXButtonUp

在光标位于窗口的非工作区中的情况下,当用户释放鼠标的 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

afx_msg void OnNcXButtonUp(
    short nHitTest,
    UINT nButton,
    CPoint point);

参数

nHitTest
[in] 由 CWnd::DefWindowProc 函数作为 WM_NCHITTEST 消息处理结果返回的命中测试值。

nButton
[in] 如果释放第一个鼠标 X 按钮,则值为 XBUTTON1;如果释放第二个 X 按钮,则值为 XBUTTON2

point
[in] 一个 CPoint 对象,指定光标相对于屏幕左上角的 x 和 y 坐标

备注

此方法接收 Windows SDK 中所述的 WM_NCXBUTTONUP 通知。 此消息将发布到包含光标的窗口。 如果窗口捕获了鼠标,则不发布此消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNextMenu

使用左右箭头键在菜单栏与系统菜单之间切换时,框架会调用此成员函数。

afx_msg void OnNextMenu(
    UINT nKey,
    LPMDINEXTMENU lpMdiNextMenu);

参数

nKey
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。 有关标志列表,请参阅关于鼠标输入中的“消息参数”子标题。

lpMdiNextMenu
[in] 指向 MDINEXTMENU 结构的指针,该结构包含有关要激活的菜单的信息。

备注

此方法接收 Windows SDK 中所述的 WM_UNINITMENUPOPUP 通知。 为响应此消息,应用程序可以设置 MDINEXTMENU 结构的 hmenuNext 成员来指定要切换到的菜单,并设置 hwndNext 成员来指定接收菜单通知消息的窗口。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnNotify

框架调用此成员函数来向控件的父窗口告知该控件中发生了事件,或者该控件需要某种信息。

virtual BOOL OnNotify(
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

参数

wParam
如果消息来自控件,则标识发送消息的控件。 否则,wParam 为 0。

lParam
指向包含通知代码和附加信息的通知消息 (NMHDR) 结构的指针。 对于某些通知消息,此参数指向一个更大的结构,该结构的第一成员为 NMHDR 结构。

pResult
指向 LRESULT 变量的指针,如果已处理消息,将在该变量中存储结果代码。

返回值

如果应用程序处理此消息,则它会返回非零值;否则返回 0。

备注

OnNotify 处理控件通知的消息映射。

在派生类中重写此成员函数以处理 WM_NOTIFY 消息。 除非调用基类 OnNotify,否则重写不会处理消息映射。

有关 WM_NOTIFY 消息的详细信息,请参阅技术说明 61 (TN061):ON_NOTIFYWM_NOTIFY 消息。 另请参阅控件主题和 TN062 Windows 控件的消息反射中介绍的相关主题。

CWnd::OnNotifyFormat

框架调用此成员函数来确定当前窗口接受的是 WM_NOTIFY 通知消息中的 ANSI 还是 Unicode 结构。

afx_msg UINT OnNotifyFormat(
    CWnd* pWnd,
    UINT nCommand);

参数

pWnd
[in] 指向 CWnd 对象的指针,该对象表示发送 WM_NOTIFY 消息的窗口。 如果 nCommand 参数为 NF_QUERY,则此参数是指向控件的指针;如果 nCommandNF_REQUERY,则此参数是指向控件的父窗口的指针。

nCommand
[in] 用于专用化 WM_NOTIFY 消息的命令值。 可能的值为:

  • NF_QUERY - 该消息是一个查询,用于确定是要在 WM_NOTIFY 消息中使用 ANSI 还是 Unicode 结构。 此消息在创建控件期间从控件发送到其父窗口,以响应此消息的 NF_REQUERY 形式。
  • NF_REQUERY - 该消息是对控件的请求,该控件将此消息的 NF_QUERY 形式发送到其父窗口。 此请求从父窗口发送,并要求控件重新向父窗口查询要在 WM_NOTIFY 消息中使用的结构类型。 如果 nCommand 参数为 NF_REQUERY,则返回值为重新查询操作的结果。

返回值

返回值 含义
NFR_ANSI 应在控件发送的 WM_NOTIFY 消息中使用 ANSI 结构。
NFR_UNICODE 应在控件发送的 WM_NOTIFY 消息中使用 Unicode 结构。
0 出现了错误。

注解

此方法接收 Windows SDK 中所述的 WM_NOTIFYFORMAT 通知。 WM_NOTIFY 消息从公用控件发送到其父窗口,并从父窗口发送到公用控件。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnPaint

当 Windows 或应用程序请求重绘应用程序窗口的一部分时,框架会调用此成员函数。

afx_msg void OnPaint();

备注

在调用 UpdateWindowRedrawWindow 成员函数时发送 WM_PAINT 消息。

由于在设置了 RDW_INTERNALPAINT 标志的情况下调用了 RedrawWindow 成员函数,窗口可能会收到内部绘制消息。 在这种情况下,窗口可能不包含更新区域。 应用程序应调用 GetUpdateRect 成员函数来确定窗口是否包含更新区域。 如果 GetUpdateRect 返回 0,则应用程序不应调用 BeginPaintEndPaint 成员函数。

应用程序需负责通过在其内部数据结构中查找每个 WM_PAINT 消息来检查任何必要的内部重绘或更新,因为 WM_PAINT 消息可能是由无效区域以及在设置了 RDW_INTERNALPAINT 标志的情况下调用 RedrawWindow 成员函数而导致的。

Windows 仅发送内部 WM_PAINT 消息一次。 在 UpdateWindow 成员函数将内部 WM_PAINT 消息发送到某个窗口后,在该窗口失效或者在设置了 RDW_INTERNALPAINT 标志的情况下再次调用 RedrawWindow 成员函数之前,不会发送或发布更多的 WM_PAINT 消息。

有关在文档/视图应用程序中呈现图像的信息,请参阅 CView::OnDraw

有关如何使用 WM_Paint 的详细信息,请参阅 Windows SDK 中的以下主题:

CWnd::OnPaintClipboard

当剪贴板所有者已将数据以 OnPaintClipboard 格式放置在剪贴板上,并且剪贴板查看器的工作区需要重新绘制时,剪贴板查看器将调用剪贴板所有者的 CF_OWNERDISPLAY 成员函数。

afx_msg void OnPaintClipboard(
    CWnd* pClipAppWnd,
    HGLOBAL hPaintStruct);

参数

pClipAppWnd
指定指向剪贴板应用程序窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。

hPaintStruct
标识一个 PAINTSTRUCT 数据结构,该结构定义要绘制的工作区部分。

注解

若要确定是需要重新绘制整个工作区还是只重新绘制某一部分,剪贴板所有者必须将 PAINTSTRUCT 结构的 rcpaint 成员中指定的绘图区域尺寸与最新 OnSizeClipboard 成员函数调用中指定的尺寸进行比较。

OnPaintClipboard 应使用 GlobalLock Windows 函数来锁定包含 PAINTSTRUCT 数据结构的内存,并在退出之前使用 GlobalUnlock 函数解锁该内存。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnPaletteChanged

在具有输入焦点的窗口实现其逻辑调色板后,框架将对所有顶级窗口调用此成员函数,从而更改系统调色板。

afx_msg void OnPaletteChanged(CWnd* pFocusWnd);

参数

pFocusWnd
指定指向导致系统调色板发生更改的窗口的指针。 该指针可能是暂时性指针,不应存储它。

备注

此调用允许没有输入焦点的窗口使用调色板来实现其逻辑调色板并更新其工作区。

针对所有顶级窗口和重叠窗口(包括更改了系统调色板并导致发送 WM_PALETTECHANGED 消息的窗口)调用 OnPaletteChanged 成员函数。 如果任何子窗口使用调色板,则必须将此消息传递给它。

为避免出现无限循环,除非窗口确定 pFocusWnd 不包含指向自身的指针,否则它不应实现其调色板。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnPaletteIsChanging

框架调用此成员函数来向应用程序告知某个应用程序即将实现其逻辑调色板。

afx_msg void OnPaletteIsChanging(CWnd* pRealizeWnd);

参数

pRealizeWnd
指定即将实现其逻辑调色板的窗口。

备注

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnParentNotify

当创建或销毁父级的子窗口时,或者在光标位于子窗口上的情况下当用户单击鼠标按钮时,框架会调用父级的 OnParentNotify 成员函数。

afx_msg void OnParentNotify(
    UINT message,
    LPARAM lParam);

参数

message
指定要向父级通知的事件和子窗口的标识符。 该事件是 message 的低位字。 如果事件是 WM_CREATEWM_DESTROY,则 message 的高位字是子窗口的标识符;否则,高位字是未定义的。 事件(message 的低位字)可为以下任一值:

  • WM_CREATE 正在创建子窗口。

  • WM_DESTROY 正在销毁子窗口。

  • WM_LBUTTONDOWN 用户已将鼠标光标放在子窗口上并单击了鼠标左键。

  • WM_MBUTTONDOWN 用户已将鼠标光标放在子窗口上并单击了鼠标中键。

  • WM_RBUTTONDOWN 用户已将鼠标光标放在子窗口上并单击了鼠标右键。

lParam
如果 message 的事件(低位字)是 WM_CREATEWM_DESTROY,则 lParam 指定子窗口的窗口句柄;否则 lParam 包含光标的 x 和 y 坐标。 x 坐标在低位字中,y 坐标在高位字中。

注解

创建子窗口时,系统会在创建窗口的 Create 成员函数返回之前的那一刻调用 OnParentNotify。 销毁子窗口时,系统会在进行任何处理以销毁窗口之前调用 OnParentNotify

针对子窗口的所有上级窗口(包括顶级窗口)调用 OnParentNotify

除具有 WS_EX_NOPARENTNOTIFY 样式的子窗口之外的其他所有子窗口会将此消息发送到其父窗口。 默认情况下,对话框中的子窗口具有 WS_EX_NOPARENTNOTIFY 样式,除非通过调用 CreateEx 成员函数创建没有此样式的子窗口。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnPowerBroadcast

发生电源管理事件时,框架会调用此成员函数。

afx_msg UINT OnPowerBroadcast(
    UINT nPowerEvent,
    UINT nEventData);

参数

nPowerEvent
[in] 电源管理事件。

nEventData
[in] 事件特定的数据。

返回值

如果事件是请求,则返回 TRUE 以允许请求,或返回 BROADCAST_QUERY_DENY 以拒绝请求。

备注

此方法接收 WM_POWERBROADCAST 消息,如 Windows SDK 中所述。

nPowerEvent 参数指定事件,例如电池电量低、电源状态已更改、已请求或拒绝操作暂停权限、发生事件后正在自动恢复操作、系统正在暂停操作或暂停后正在恢复操作。 通常不使用 nEventData 参数。 有关详细信息,请参阅 WM_POWERBROADCAST 消息的 wParamlParam 参数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnQueryDragIcon

框架通过一个最小化的(图标)、未为其类定义图标的窗口调用此成员函数。

afx_msg HCURSOR OnQueryDragIcon();

返回值

一个双字值,其低位字中包含光标或图标句柄。 该光标或图标必须与显示驱动程序的分辨率兼容。 如果应用程序返回 NULL,则系统将显示默认光标。 默认返回值为 NULL

注解

当用户拖动最小化的窗口时,系统会发出此调用以获取要显示的光标。 如果应用程序返回图标或光标的句柄,则系统会将其转换为黑白色。 如果应用程序返回句柄,则该句柄必须标识与显示驱动程序分辨率兼容的单色光标或图标。 应用程序可以调用 CWinApp::LoadCursorCWinApp::LoadIcon 成员函数来从其可执行文件中的资源加载光标或图标并获取此句柄。

CWnd::OnQueryEndSession

当用户选择结束 Windows 会话或应用程序调用 ExitWindows Windows 函数时,框架会调用此成员函数。

afx_msg BOOL OnQueryEndSession();

返回值

如果可以方便地关闭应用程序,则返回非零值;否则返回 0。

备注

如果任何应用程序返回 0,则不结束 Windows 会话。 在一个应用程序返回 0 后,Windows 就会立即停止调用 OnQueryEndSession,并为已返回非零值的任何应用程序发送参数值为 FALSEWM_ENDSESSION 消息。

CWnd::OnQueryNewPalette

CWnd 对象即将接收输入焦点时,框架会调用此成员函数,从而使 CWnd 在接收焦点时有机会实现其逻辑调色板。

afx_msg BOOL OnQueryNewPalette();

返回值

如果 CWnd 实现其逻辑调色板,则返回非零值;否则返回 0。

CWnd::OnQueryOpen

CWnd 对象已最小化并且用户请求将 CWnd 还原到其预先最小化的大小和位置时,框架会调用此成员函数。

afx_msg BOOL OnQueryOpen();

返回值

如果图标可以打开,则返回非零值;如果阻止图标打开,则返回 0。

备注

OnQueryOpen 中,CWnd 不应执行任何会导致激活或焦点发生更改的操作(例如,创建对话框)。

CWnd::OnQueryUIState

调用以检索窗口的用户界面 (UI) 状态。

afx_msg UINT OnQueryUIState();

返回值

如果焦点指示器和键盘加速键可见,则返回值为 NULL。 否则,返回值可为以下一个或多个值:

  • UISF_HIDEFOCUS 焦点指示器已隐藏。

  • UISF_HIDEACCEL 键盘加速键已隐藏。

  • UISF_ACTIVE Windows XP:应该以用于活动控件的样式绘制控件。

备注

此成员函数模拟 WM_QUERYUISTATE 消息的功能,如 Windows SDK 中所述。

CWnd::OnRawInput

当前窗口获取原始输入时,框架会调用此成员函数。

afx_msg void OnRawInput(
    UINT nInputCode,
    HRAWINPUT hRawInput);

参数

nInputCode
[in] 输入代码,指示输入是否在应用程序位于前台时发生。 在任一情况下,应用程序都必须调用 CWnd::DefWindowProc,以便系统可以执行清理。 此参数可能是以下值之一:

  • RIM_INPUT - 输入在应用程序位于前台时发生。
  • RIM_INPUTSINK - 输入在应用程序不位于前台时发生。

hRawInput
[in] 包含来自设备的原始输入的 RAWINPUT 结构的句柄。

备注

此方法接收 Windows SDK 中所述的 WM_INPUT 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnRButtonDblClk

当用户双击鼠标右键时,框架会调用此成员函数。

afx_msg void OnRButtonDblClk(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

注解

只有具有 CS_DBLCLKS WNDCLASS 样式的窗口才能接收 OnRButtonDblClk 调用。 这是 Microsoft 基础类库中窗口的默认设置。 当用户在系统的双击时间限制内按下、释放然后再次按下鼠标右键时,Windows 将调用 OnRButtonDblClk。 双击鼠标右键实际上会生成四个事件:WM_RBUTTONDOWNWM_RBUTTONUP 消息、OnRButtonDblClk 调用,以及释放按钮时生成的另一个 WM_RBUTTONUP 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnRButtonDown

当用户按下鼠标右键时,框架会调用此成员函数。

afx_msg void OnRButtonDown(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_RBUTTON 如果按下了鼠标右键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnRButtonUp

当用户释放鼠标右键时,框架会调用此成员函数。

afx_msg void OnRButtonUp(
    UINT nFlags,
    CPoint point);

参数

nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:

  • MK_CONTROL 如果按下了 CTRL 键,则设置此值。

  • MK_LBUTTON 如果按下了鼠标左键,则设置此值。

  • MK_MBUTTON 如果按下了鼠标中键,则设置此值。

  • MK_SHIFT 如果按下了 SHIFT 键,则设置此值。

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。

备注

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnRegisteredMouseWheel

当用户旋转鼠标滚轮并遇到滚轮的下一个齿格时,框架会调用此成员函数。

afx_msg LRESULT OnRegisteredMouseWheel(
    WPARAM wParam,
    LPARAM lParam);

参数

wParam
指针的水平位置。

lParam
指针的垂直位置。

返回值

此时不重要。 始终为零。

注解

除非重写,否则 OnRegisteredMouseWheel 会将消息路由到相应的窗口(具有焦点的父窗口),并调用该窗口的 WM_MOUSEWHEEL 处理程序。

重写此成员函数可提供你自己的消息路由或更改鼠标滚轮的滚动行为。

注意

OnRegisteredMouseWheel 处理面向 Windows 95/98 和 Windows NT 3.51 的消息。 要进行 Windows NT 4.0 消息处理,请使用 OnMouseWheel

CWnd::OnRenderAllFormats

销毁所有者应用程序时,框架将调用剪贴板所有者的 OnRenderAllFormats 成员函数。

afx_msg void OnRenderAllFormats();

注解

剪贴板所有者应以它能够生成的所有格式呈现数据,并通过调用 SetClipboardData Windows 函数将每种格式的数据句柄传递给剪贴板。 这可以确保剪贴板包含有效数据,即使呈现数据的应用程序已销毁。 应用程序应在调用 SetClipboardData Windows 函数之前调用 OpenClipboard 成员函数,随后再调用 CloseClipboard Windows 函数。

CWnd::OnRenderFormat

需要呈现采用延迟呈现方式的特定格式时,框架将调用剪贴板所有者的 OnRenderFormat 成员函数。

afx_msg void OnRenderFormat(UINT nFormat);

参数

nFormat
指定剪贴板格式。

备注

接收方应以该格式呈现数据,并通过调用 SetClipboardData Windows 函数将其传递给剪贴板。

不要从 OnRenderFormat 内部调用 OpenClipboard 成员函数或 CloseClipboard Windows 函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSessionChange

框架调用此成员函数来向应用程序通知会话状态发生更改。

afx_msg void OnSessionChange(
    UINT nSessionState,
    UINT nId);

参数

nSessionState
[in] 状态代码描述会话状态更改。

nId
[in] 会话标识符。

注解

此方法接收 Windows SDK 中所述的 WM_WTSSESSION_CHANGE 通知。

nSessionState 参数指定已从控制台或远程终端连接或断开连接会话、用户已登录或注销、会话已锁定或解锁,或者会话已更改为远程控制状态。 有关详细信息,请参阅 WM_WTSSESSION_CHANGE 消息的 wParam 参数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSetCursor

如果未捕获鼠标输入并且鼠标导致光标在 CWnd 对象内移动,则框架会调用此成员函数。

afx_msg BOOL OnSetCursor(
    CWnd* pWnd,
    UINT nHitTest,
    UINT message);

参数

pWnd
指定指向包含光标的窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。

nHitTest
指定命中测试区域代码。 命中测试确定光标的位置。

message
指定鼠标消息编号。

返回值

非零值表示停止进一步的处理,0 值表示继续。

备注

默认实现在处理之前调用父窗口的 OnSetCursor。 如果父窗口返回 TRUE,则停止进一步的处理。 调用父窗口可让父窗口控制子窗口中的光标设置。

如果光标不在工作区中,则默认实现会将光标设置为箭头;如果光标在工作区中,则将光标设置为已注册类光标。

如果 nHitTestHTERROR 并且 message 是按下鼠标按钮消息,则调用 MessageBeep 成员函数。

CWnd 进入菜单模式时,message 参数为 0

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSetFocus

框架在获取输入焦点后调用此成员函数。

afx_msg void OnSetFocus(CWnd* pOldWnd);

参数

pOldWnd
包含失去输入焦点的 CWnd 对象(可为 NULL)。 该指针可能是暂时性的,不应存储它以供稍后使用。

备注

若要显示插入点,CWnd 此时应调用相应的插入点函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSettingChange

当 Win32 SystemParametersInfo 函数更改系统范围的设置时,框架将针对所有顶级窗口调用 OnSettingChange

afx_msg void OnSettingChange(
    UINT uFlags,
    LPCTSTR lpszSection);

参数

uFlags
当系统由于调用了 SystemParametersInfo 而发送消息时,此参数是一个指示已更改的系统参数的标志。 有关值列表,请参阅 Windows SDK 中的 SystemParametersInfo。 当应用程序发送消息时,此参数必须为 0。

lpszSection
指向一个指定已更改部分的名称的字符串。 (该字符串不包括括住部分名称的方括号。)

备注

应用程序在更改系统参数时应将消息发送到所有顶级窗口;如果用户通过控制面板更改设置,Windows 将发送消息。

ON_WM_SETTINGCHANGE 消息与 ON_WM_WININICHANGE 消息类似,两者的差别如下:

  • 在运行 Windows NT 4.0 或更高版本时或者在 Windows 95/98 中使用 ON_WM_SETTINGCHANGE

  • 在运行 Windows NT 3.51 或更低版本时使用 ON_WININICHANGE。 此消息现已过时。

只能在消息映射中包含这些宏之一。 若要编写适用于 Windows 95/98 和 Windows NT 4.0 的程序,请为 ON_WM_SETTINGCHANGE 编写处理程序。 在 Windows NT 3.51 中,处理程序将由 OnSettingChangeuFlags 调用,并且始终为零。

CWnd::OnShowWindow

CWnd 对象即将隐藏或显示时,框架会调用此成员函数。

afx_msg void OnShowWindow(
    BOOL bShow,
    UINT nStatus);

参数

bShow
指定是否正在显示窗口。 如果正在显示窗口,则此参数为 TRUE;如果正在隐藏窗口,则为 FALSE

nStatus
指定正在显示的窗口的状态。 如果因调用 ShowWindow 成员函数而发送了消息,则此参数为 0;否则 nStatus 是下列其中一项:

  • SW_PARENTCLOSING 父窗口正在关闭(变成图标)或弹出窗口正在隐藏。

  • SW_PARENTOPENING 父窗口正在打开(显示)或弹出窗口正在显示。

注解

当调用 ShowWindow 成员函数、最大化或还原重叠窗口,或者重叠窗口或弹出窗口已关闭(变成图标)或打开(显示在屏幕上)时,将隐藏或显示窗口。 关闭某个重叠窗口时,与该窗口关联的所有弹出窗口都将隐藏。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSize

框架在窗口的大小更改后调用此成员函数。

afx_msg void OnSize(
    UINT nType,
    int cx,
    int cy);

参数

nType
指定请求的大小调整类型。 此参数可能是以下值之一:

  • SIZE_MAXIMIZED 窗口已最大化。

  • SIZE_MINIMIZED 窗口已最小化。

  • SIZE_RESTORED 窗口已调整大小,但 SIZE_MINIMIZEDSIZE_MAXIMIZED 均不适用。

  • SIZE_MAXHIDE 当其他某个窗口最大化时,消息将发送到所有弹出窗口。

  • SIZE_MAXSHOW 当其他某个窗口还原到原来的大小时,消息将发送到所有弹出窗口。

cx
指定工作区的新宽度。

cy
指定工作区的新高度。

备注

如果从 OnSize 针对子窗口调用 SetScrollPosMoveWindow 成员函数,则 SetScrollPosMoveWindowbRedraw 参数应为非零值,以重绘 CWnd

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

示例

// Resize the edit control contained in the view to
// fill the entire view when the view's window is
// resized. CMdiView is a CView derived class.
void CMdiView::OnSize(UINT nType, int cx, int cy)
{
   CView::OnSize(nType, cx, cy);
   // Resize edit to fill the whole view.
   // OnSize can be called before OnInitialUpdate
   // so make sure the edit control has been created.
   if (::IsWindow(m_Edit.GetSafeHwnd()))
   {
      m_Edit.MoveWindow(0, 0, cx, cy);
   }
}

CWnd::OnSizeClipboard

当剪贴板包含具有 CF_OWNERDISPLAY 属性的数据,并且剪贴板查看器窗口的工作区大小已更改时,剪贴板查看器将调用剪贴板所有者的 OnSizeClipboard 成员函数。

afx_msg void OnSizeClipboard(
    CWnd* pClipAppWnd,
    HGLOBAL hRect);

参数

pClipAppWnd
标识剪贴板应用程序窗口。 该指针可能是暂时性指针,不应存储它。

hRect
标识全局内存对象。 内存对象包含一个 RECT 数据结构,该结构指定供剪贴板所有者绘制的区域。

注解

即将销毁或最小化剪贴板应用程序时,将使用 null 矩形 (0,0,0,0) 作为新大小来调用 OnSizeClipboard 成员函数。 这允许剪贴板所有者释放其显示资源。

OnSizeClipboard 中,应用程序必须使用 GlobalLock Windows 函数来锁定包含 RECT 数据结构的内存。 让应用程序在做出让步或返回控制权之前使用 GlobalUnlock Windows 函数解锁该内存。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSizing

框架调用此成员函数来指示用户正在调整矩形的大小。

afx_msg void OnSizing(
    UINT nSide,
    LPRECT lpRect);

参数

nSide
要移动的窗口边缘。

lpRect
将包含项坐标的 CRectRECT 结构的地址。

备注

通过处理此消息,应用程序可以监视拖动矩形的大小和位置,并根据需要更改其大小或位置。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

示例

void CSplitChildFrm::OnSizing(UINT fwSide, LPRECT pRect)
{
   CMDIChildWnd::OnSizing(fwSide, pRect);

   // Resize the splitter window in the frame. m_wndSplitter is of 
   // type CSplitterWnd
   int nWidth = (pRect->right) - (pRect->left);
   m_wndSplitter.SetColumnInfo(0, nWidth / 2, 10);
   m_wndSplitter.SetColumnInfo(1, nWidth / 2, 10);
   m_wndSplitter.RecalcLayout();
}

CWnd::OnSpoolerStatus

每当在打印管理器队列中添加或删除作业时,框架都会从打印管理器调用此成员函数。

afx_msg void OnSpoolerStatus(
    UINT nStatus,
    UINT nJobs);

参数

nStatus
指定 SP_JOBSTATUS 标志。

nJobs
指定打印管理器队列中剩余的作业数。

备注

此调用仅供参考。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnStyleChanged

SetWindowLong 函数更改一个或多个窗口样式后,框架会调用此成员函数。

afx_msg void OnStyleChanged(
    int nStyleType,
    LPSTYLESTRUCT lpStyleStruct);

参数

nStyleType
指定已更改窗口的扩展样式还是非扩展样式。 此参数可为以下值的组合:

  • GWL_EXSTYLE 已更改窗口的扩展样式。

  • GWL_STYLE 已更改窗口的非扩展样式。

lpStyleStruct
指向包含窗口新样式的 STYLESTRUCT 结构。 应用程序可以检查样式,但无法更改样式。

注解

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnStyleChanging

SetWindowLong 函数即将更改一种或多种窗口样式时,框架会调用此成员函数。

afx_msg void OnStyleChanging(
    int nStyleType,
    LPSTYLESTRUCT lpStyleStruct);

参数

nStyleType
指定已更改窗口的扩展样式还是非扩展样式。 此参数可为以下值的组合:

  • GWL_EXSTYLE 已更改窗口的扩展样式。

  • GWL_STYLE 已更改窗口的非扩展样式。

lpStyleStruct
指向包含窗口新样式的 STYLESTRUCT 结构。 应用程序可以检查和更改样式。

备注

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSysChar

如果 CWnd 具有输入焦点并且 WM_SYSKEYUPWM_SYSKEYDOWN 消息已转换,则框架会调用此成员函数。

afx_msg void OnSysChar(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定控件菜单键的 ASCII 字符键代码。

nRepCnt
指定重复次数,即由于用户按住键而重复击键的次数。

nFlags
nFlags 参数可使用以下值:

含义
0-15 指定重复次数。 该值是由于用户按住键而重复击键的次数。
16-23 指定扫描代码。 该值取决于原始设备制造商 (OEM)
24 指定键是否为扩展键,例如增强型 101 或 102 键键盘上的右侧 ALT 和 CTRL 键。 如果是扩展键,则值为 1;否则为 0。
25-28 在 Windows 内部使用。
29 指定上下文代码。 如果在按住 ALT 键的同时按该键,则值为 1;否则值为 0。
30 指定前一个键状态。 如果在发送消息之前键处于按下状态,则值为 1;如果键处于未按下状态,则值为 0。
31 指定转换状态。 如果释放了键,则值为 1;如果按下了键,则值为 0。

注解

它指定控件菜单键的虚拟键代码。 (有关标准虚拟键代码的列表,请参阅 Winuser.h)

当上下文代码为 0 时,WM_SYSCHAR 可将 WM_SYSCHAR 消息传递给 TranslateAccelerator Windows 函数,该函数将处理该消息,就如同它是普通键消息而不是系统字符键一样。 这样,即使活动窗口没有输入焦点,也能对活动窗口使用加速键。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSysColorChange

当系统颜色设置发生更改时,框架将对所有顶级窗口调用此成员函数。

afx_msg void OnSysColorChange();

注解

对于受系统颜色更改影响的任何窗口,Windows 将调用 OnSysColorChange

其画笔使用现有系统颜色的应用程序应删除这些画笔,并使用新的系统颜色重新创建画笔。

CWnd::OnSysCommand

当用户从控件菜单中选择一个命令,或者当用户选择“最大化”或“最小化”按钮时,框架会调用此成员函数。

afx_msg void OnSysCommand(
    UINT nID,
    LPARAM lParam);

参数

nID
指定请求的系统命令的类型。 此参数可使用下列任一值:

  • SC_CLOSE 关闭 CWnd 对象。

  • SC_HOTKEY 激活与应用程序指定的热键关联的 CWnd 对象。 lParam 的低位字标识要激活的窗口的 HWND

  • SC_HSCROLL 水平滚动。

  • SC_KEYMENU 通过击键检索菜单。

  • SC_MAXIMIZE(或 SC_ZOOM)最大化 CWnd 对象。

  • SC_MINIMIZE(或 SC_ICON)最小化 CWnd 对象。

  • SC_MOUSEMENU 通过鼠标单击检索菜单。

  • SC_MOVE 移动 CWnd 对象。

  • SC_NEXTWINDOW 移到下一个窗口。

  • SC_PREVWINDOW 移到上一个窗口。

  • SC_RESTORE 将窗口还原为正常位置和大小。

  • SC_SCREENSAVE 执行 SYSTEM.INI 文件的 [boot] 节中指定的屏幕保护程序。

  • SC_SIZE 调整 CWnd 对象的大小。

  • SC_TASKLIST 执行或激活 Windows 任务管理器应用程序。

  • SC_VSCROLL 垂直滚动。

lParam
如果使用鼠标选择了控件菜单命令,则 lParam 包含光标坐标。 低位字包含 x 坐标,高位字包含 y 坐标。 否则不使用此参数。

  • SC_HOTKEY 激活与应用程序指定的热键关联的窗口。 lParam 的低位字标识要激活的窗口。

  • SC_SCREENSAVE 执行在控制面板的“桌面”部分中指定的屏幕保护应用程序。

备注

默认情况下,OnSysCommand 对上表中指定的预定义操作执行控件菜单请求。

WM_SYSCOMMAND 消息中,nID 参数的四个低阶位由 Windows 在内部使用。 当应用程序测试 nID 的值时,它必须使用按位 AND 运算符将值 0xFFF0 与 nID 值相组合以获取正确的结果。

可以使用 GetSystemMenuAppendMenuInsertMenuModifyMenu 成员函数修改控件菜单中的菜单项。 修改控件菜单的应用程序必须处理 WM_SYSCOMMAND 消息,任何未由应用程序处理的 WM_SYSCOMMAND 消息必须传递给 OnSysCommand。 应用程序添加的任何命令值必须由应用程序处理,而不能传递给 OnSysCommand

通过将 WM_SYSCOMMAND 消息传递给 OnSysCommand,应用程序可以随时执行任何系统命令。

为了从控件菜单中选择项而定义的加速键(快捷键)击键将转换为 OnSysCommand 调用;所有其他加速键击键将转换为 WM_COMMAND 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSysDeadChar

如果在调用 OnSysKeyUpOnSysKeyDown 成员函数时 CWnd 对象具有输入焦点,则框架会调用此成员函数。

afx_msg void OnSysDeadChar(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定死键字符值。

nRepCnt
指定重复次数。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

含义
0-7 扫描代码(OEM 相关的值)。 高位字的低字节。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1;否则为 0)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1;否则为 0)。
14 前一键状态(如果在调用之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

注解

它指定死键的字符值。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSysKeyDown

如果 CWnd 对象具有输入焦点,则当用户按住 ALT 键然后按下另一个键时,框架会调用 OnSysKeyDown 成员函数。

afx_msg void OnSysKeyDown(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定按下的键的虚拟键代码。 有关标准虚拟键代码的列表,请参阅 Winuser.h

nRepCnt
指定重复次数。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

含义
0-7 扫描代码(OEM 相关的值)。 高位字的低字节。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1;否则为 0)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1,否则为 0)。
14 前一键状态(如果在发送消息之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

对于 OnSysKeyDown 调用,键转换位(位 15)为 0。 如果在按住 ALT 键的同时按下该键,则上下文代码位(位 13)为 1;如果由于没有任何窗口具有输入焦点而将消息发送到活动窗口,则为 0。

备注

如果当前没有任何窗口具有输入焦点,则调用活动窗口的 OnSysKeyDown 成员函数。 接收消息的 CWnd 对象可以通过检查 nFlags 中的上下文代码来区分这两个上下文。

当上下文代码为 0 时,可将 OnSysKeyDown 收到的 WM_SYSKEYDOWN 消息传递给 TranslateAccelerator Windows 函数,该函数将处理该消息,就如同它是普通键消息而不是系统键消息一样。 这样,即使活动窗口没有输入焦点,也能对活动窗口使用加速键。

由于自动重复,在接收 OnSysKeyDown 消息之前可能会发生多次 WM_SYSKEYUP 调用。 可以使用前一键状态(位 14)来确定 OnSysKeyDown 调用指示的是首次按下转换还是重复按下转换。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnSysKeyUp

如果 CWnd 对象具有焦点,则当用户释放在按住 ALT 键的同时按下的键时,框架会调用 OnSysKeyUp 成员函数。

afx_msg void OnSysKeyUp(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
指定按下的键的虚拟键代码。 有关标准虚拟键代码的列表,请参阅 Winuser.h

nRepCnt
指定重复次数。

nFlags
指定扫描代码、键转换代码、前一个键状态和上下文码,如下表中所示:

含义
0-7 扫描代码(OEM 相关的值)。 高位字的低字节。
8 扩展键,例如功能键或数字小键盘上的键(如果它是扩展键,则为 1;否则为 0)。
9-10 未使用。
11-12 在 Windows 内部使用。
13 上下文代码(如果在按住 ALT 键的同时按下该键,则为 1,否则为 0)。
14 前一键状态(如果在发送消息之前该键已按下,则为 1,如果该键未按下,则为 0)。
15 转换状态(如果该键已释放,则为 1;如果该键已按下,则为 0)。

对于 OnSysKeyUp 调用,键转换位(位 15)为 1。 如果在按住 ALT 键的同时按下该键,则上下文代码位(位 13)为 1;如果由于没有任何窗口具有输入焦点而将消息发送到活动窗口,则为 0。

备注

如果当前没有任何窗口具有输入焦点,则调用活动窗口的 OnSysKeyUp 成员函数。 接收调用的 CWnd 对象可以通过检查 nFlags 中的上下文代码来区分这两个上下文。

当上下文代码为 0 时,可将 OnSysKeyUp 收到的 WM_SYSKEYUP 消息传递给 TranslateAccelerator Windows 函数,该函数将处理该消息,就如同它是普通键消息而不是系统键消息一样。 这样,即使活动窗口没有输入焦点,也能对活动窗口使用加速键(快捷键)。

对于 IBM 增强型 101 和 102 键键盘,增强键是键盘主区域上的右 ALT 和右 CTRL 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 以及数字键盘左侧键群中的箭头键;数字键盘中的斜杠 (/) 和 ENTER 键。 其他一些键盘可能支持 nFlags 中的扩展键位

对于非美国版增强型 102 键键盘,右 ALT 键作为 CTRL+ALT 组合键处理。 下面显示了当用户按下和释放此键时生成的消息和调用序列:

Sequence 访问的函数 传递的消息
1. WM_KEYDOWN VK_CONTROL
2. WM_KEYDOWN VK_MENU
3. WM_KEYUP VK_CONTROL
4. WM_SYSKEYUP VK_MENU

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnTCard

当用户单击可创作型按钮时,框架会调用此成员函数。

afx_msg void OnTCard(
    UINT idAction,
    DWORD dwActionData);

参数

idAction
指示用户执行的操作。 此参数可使用以下值之一:

  • IDABORT 用户单击了可创作型“中止”按钮。

  • IDCANCEL 用户单击了可创作型“取消”按钮。

  • IDCLOSE 用户关闭了培训卡。

  • IDHELP 用户单击了可创作型 Windows“帮助”按钮。

  • IDIGNORE 用户单击了可创作型“忽略”按钮。

  • IDOK 用户单击了可创作型“确定”按钮。

  • IDNO 用户单击了可创作型“否”按钮。

  • IDRETRY 用户单击了可创作型“重试”按钮。

  • HELP_TCARD_DATA 用户单击了可创作型按钮。 dwActionData 参数包含帮助作者指定的长整数。

  • HELP_TCARD_NEXT 用户单击了可创作型“下一步”按钮。

  • HELP_TCARD_OTHER_CALLER 另一个应用程序请求了培训卡。

  • IDYES 用户单击了可创作型“是”按钮。

dwActionData
如果 idAction 指定 HELP_TCARD_DATA,则此参数是帮助作者指定的长整数。 否则此参数为零。

备注

仅当应用程序通过 Windows 帮助启动了培训卡时才调用此函数。 应用程序通过在 WinHelp 函数调用中指定 HELP_TCARD 命令来启动训练卡。

CWnd::OnTimeChange

框架在系统时间更改后调用此成员函数。

afx_msg void OnTimeChange();

注解

让任何更改系统时间的应用程序将此消息发送到所有顶级窗口。 若要将 WM_TIMECHANGE 消息发送到所有顶级窗口,应用程序可以使用 SendMessage Windows 函数并将其 hwnd 参数设置为 HWND_BROADCAST

CWnd::OnTimer

框架在用于安装计时器的 SetTimer 成员函数中指定的每个间隔之后调用此成员函数。

afx_msg void OnTimer(UINT_PTR nIDEvent);

参数

nIDEvent
指定计时器的标识符。

备注

当应用程序的消息队列中没有其他消息时,DispatchMessage Windows 函数将发送 WM_TIMER 消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

示例

请参见 CWnd::SetTimer中的示例。

CWnd::OnToolHitTest

框架调用此成员函数来确定某个点是否在指定的工具的边框内。

virtual INT_PTR OnToolHitTest(
    CPoint point,
    TOOLINFO* pTI) const;

参数

point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角

pTI
指向 TOOLINFO 结构的指针。 默认会设置以下结构值:

  • hwnd = m_hWnd 窗口的句柄

  • uId = (UINT)hWndChild 子窗口的句柄

  • uFlags |= TTF_IDISHWND 工具的句柄

  • lpszText = LPSTR_TEXTCALLBACK 指向要在指定窗口中显示的字符串的指针

返回值

如果找到工具提示控件,则返回窗口控件 ID。 如果找不到工具提示控件,则返回 -1。

备注

如果该点在矩形中,则此函数会检索有关工具的信息。

如果与工具提示关联的区域不是按钮,则 OnToolHitTest 会将结构标志设置为 TTF_NOTBUTTONTTF_CENTERTIP

重写 OnToolHitTest 可提供非默认提供的信息。

有关结构的详细信息,请参阅 Windows SDK 中的 TOOLINFO

CWnd::OnTouchInput

处理来自 Windows 触摸屏的单个输入。

virtual BOOL OnTouchInput(
    CPoint pt,
    int nInputNumber,
    int nInputsCount,
    PTOUCHINPUT pInput);

参数

pt
在屏幕上触摸的点(以客户端坐标表示)。

nInputNumber
触摸输入数量。

nInputsCount
触摸输入总数。

pInput
指向 TOUCHINPUT 结构的指针。

返回值

如果应用程序处理 Windows 触摸输入,则返回 TRUE;否则返回 FALSE

备注

CWnd::OnTouchInputs

处理通过 Windows 触摸提供的输入。

virtual BOOL OnTouchInputs(
    UINT nInputsCount,
    PTOUCHINPUT pInputs);

参数

nInputsCount
Windows 触摸输入总数。

pInputs
TOUCHINPUT 的数组。

返回值

如果应用程序处理 Windows 触摸输入,则返回 TRUE;否则返回 FALSE

备注

CWnd::OnUniChar

按下某个键时,框架会调用此成员函数。 即,当前窗口具有键盘焦点,并且 WM_KEYDOWN 消息已由 TranslateMessage 函数转换。

afx_msg void OnUniChar(
    UINT nChar,
    UINT nRepCnt,
    UINT nFlags);

参数

nChar
[in] 指定按下的键的字符代码。

nRepCnt
[in] 指定当前消息的重复次数。 该值是由于用户按住键而自动重复击键的次数。 如果击键的保持时间足够长,则发送多个消息。 但是,重复次数不是累积性的。

nFlags
[in] 用于指定扫描代码、扩展键、上下文代码、前一个键状态和转换状态的标志,如下表中所示:

标志位 说明
0-7 指定扫描代码。 该值取决于原始设备制造商 (OEM)。
8 指定一个扩展键,例如增强型 101 或 102 键键盘上的右侧 ALT 和 CTRL 键。 如果键是扩展键,则标志为 1;否则为 0。
9-12 在 Windows 内部使用。
13 指定上下文代码。 如果在按住 ALT 键的同时按该键,则标志为 1;否则值为 0。
14:指定前一个键状态。 如果在发送消息之前键处于按下状态,则标志为 1;如果键处于未按下状态,则标志为 0。
15 指定转换状态。 如果释放了键,则标志为 1;如果按下了键,则标志为 0。

备注

此方法接收 Windows SDK 中所述的 WM_UNICHAR 通知。 WM_UNICHAR 消息旨在将 Unicode 字符发送或发布到 ANSI 窗口。 它等效于 WM_CHAR 消息,但使用 Unicode 转换格式 32 编码 (UTF-32),而 WM_CHAR 消息则使用 UTF-16。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnUnInitMenuPopup

销毁下拉菜单或子菜单后,框架会调用此成员函数。

afx_msg void OnUnInitMenuPopup(
    CMenu* pPopupMenu,
    UINT nFlags);

参数

pMenu
[in] 指向表示菜单或子菜单的 CMenu 对象的指针。

nFlags
[in] 已销毁的菜单。 目前它只能是窗口菜单 MF_SYSMENU

备注

此方法接收 Windows SDK 中所述的 WM_UNINITMENUPOPUP 通知。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnUpdateUIState

调用以更改指定窗口及其所有子窗口的用户界面 (UI) 状态。

afx_msg void OnUpdateUIState(
    UINT nAction,
    UINT nUIElement);

参数

nAction
指定要执行的操作。 可以是以下其中一个值:

  • UIS_CLEAR 应隐藏 UI 状态元素(由 nUIElement 指定)。

  • UIS_INITIALIZE 应根据最后一个输入事件更改 UI 状态元素(由 nUIElement 指定)。 有关详细信息,请参阅 WM_UPDATEISTATE 的“注解”部分

  • UIS_SET 应显示 UI 状态元素(由 nUIElement 指定)。

nUIElement
指定受影响的 UI 状态元素或指定控件样式。 可以是以下其中一个值:

  • UISF_HIDEACCEL 键盘加速键。

  • UISF_HIDEFOCUS 焦点指示器。

  • UISF_ACTIVE Windows XP:应该以用于活动控件的样式绘制控件。

备注

此成员函数模拟 WM_UPDATEUISTATE 消息的功能,如 Windows SDK 中所述。

CWnd::OnUserChanged

在用户登录或注销后,框架将针对所有窗口调用此成员。

afx_msg void OnUserChanged();

备注

此方法接收 Windows SDK 中所述的 WM_USERCHANGED 通知消息。 当用户登录或注销时,操作系统会更新用户特定的设置。 系统在更新设置后立即发送此消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnVKeyToItem

如果 CWnd 对象拥有一个具有 LBS_WANTKEYBOARDINPUT 样式的列表框,该列表框将发送 WM_VKEYTOITEM 消息来响应 WM_KEYDOWN 消息。

afx_msg int OnVKeyToItem(
    UINT nKey,
    CListBox* pListBox,
    UINT nIndex);

参数

nKey
指定用户按下的键的虚拟键代码。 有关标准虚拟键代码的列表,请参阅 Winuser.h

pListBox
指定指向列表框的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。

nIndex
指定当前插入点位置。

返回值

指定应用程序为响应消息而执行的操作。 返回值 -2 表示应用程序处理了选择项的所有方面并且不需要列表框的进一步操作。 返回值 -1 表示列表框应执行默认操作以响应击键。 0 或更大的返回值指定列表框中项的从零开始的索引,并指示列表框应对给定项的击键执行默认操作。

备注

框架仅对具有 LBS_HASSTRINGS 样式的列表框调用此成员函数。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnVScroll

当用户单击窗口的垂直滚动条时,框架会调用此成员函数。

afx_msg void OnVScroll(
    UINT nSBCode,
    UINT nPos,
    CScrollBar* pScrollBar);

参数

nSBCode
指定一个滚动条代码,指示用户的滚动请求。 此参数可以是以下项之一:

  • SB_BOTTOM 滚动到底部。

  • SB_ENDSCROLL 结束滚动。

  • SB_LINEDOWN 向下滚动一行。

  • SB_LINEUP 向上滚动一行。

  • SB_PAGEDOWN 向下滚动一页。

  • SB_PAGEUP 向上滚动一页。

  • SB_THUMBPOSITION 滚动到绝对位置。 当前位置在 nPos 中提供。

  • SB_THUMBTRACK 将滚动框拖到指定位置。 当前位置在 nPos 中提供。

  • SB_TOP 滚动到顶部。

nPos
如果滚动条代码为 SB_THUMBPOSITIONSB_THUMBTRACK,则包含当前滚动框位置;否则不使用。 根据初始滚动范围,nPos 可能为负,并且应在必要时强制转换为 int

pScrollBar
如果滚动消息来自滚动条控件,则包含指向该控件的指针。 如果用户单击了窗口的滚动条,则此参数为 NULL。 该指针可能是暂时性的,不应存储它以供稍后使用。

注解

在拖动滚动框时,提供某些反馈的应用程序通常使用 OnVScroll

如果 OnVScroll 滚动 CWnd 对象的内容,则它还必须使用 SetScrollPos 成员函数来重置滚动框的位置。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnVScrollClipboard

当剪贴板数据采用 CF_OWNERDISPLAY 格式并且剪贴板查看器的垂直滚动条中具有事件时,剪贴板查看器会调用剪贴板所有者的 OnVScrollClipboard 成员函数。

afx_msg void OnVScrollClipboard(
    CWnd* pClipAppWnd,
    UINT nSBCode,
    UINT nPos);

参数

pClipAppWnd
指定指向剪贴板查看器窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。

nSBCode
指定以下滚动条值之一:

  • SB_BOTTOM 滚动到底部。

  • SB_ENDSCROLL 结束滚动。

  • SB_LINEDOWN 向下滚动一行。

  • SB_LINEUP 向上滚动一行。

  • SB_PAGEDOWN 向下滚动一页。

  • SB_PAGEUP 向上滚动一页。

  • SB_THUMBPOSITION 滚动到绝对位置。 当前位置在 nPos 中提供。

  • SB_TOP 滚动到顶部。

nPos
如果滚动条代码为 SB_THUMBPOSITION,则包含滚动框位置;否则不使用 nPos

注解

所有者应滚动剪贴板图像、使相应部分失效以及更新滚动条值。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnWindowMaximizedChanged

当前窗口已最大化时,框架会调用此成员,该窗口由桌面窗口管理器 (DWM) 编写。

afx_msg void OnWindowMaximizedChanged(BOOL bIsMaximized);

参数

bIsMaximized
[in] 如果当前窗口已最大化,则参数值为 TRUE,否则为 FALSE

注解

此方法接收 Windows SDK 中所述的 WM_DWMWINDOWMAXIMIZEDCHANGE 通知消息。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnWindowPosChanged

当由于调用 SetWindowPos 成员函数或另一个窗口管理函数而更改了大小、位置或 Z 顺序时,框架会调用此成员函数。

afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);

参数

lpwndpos
指向包含有关窗口新大小和位置的信息的 WINDOWPOS 数据结构。

备注

默认实现将 WM_SIZEWM_MOVE 消息发送到窗口。 如果应用程序处理 OnWindowPosChanged 调用但不调用其基类,则不发送这些消息。 在调用 OnWindowPosChanged(但不调用其基类)期间执行任何移动或大小更改处理会更有效。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnWindowPosChanging

当由于调用 SetWindowPos 成员函数或另一个窗口管理函数而即将更改大小、位置或 Z 顺序时,框架会调用此成员函数。

afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);

参数

lpwndpos
指向包含有关窗口新大小和位置的信息的 WINDOWPOS 数据结构。

注解

应用程序可以通过在 WINDOWPOS 结构的 flags 成员中设置或清除相应的位来防止更改窗口。

对于具有 WS_OVERLAPPEDWS_THICKFRAME 样式的窗口,默认实现会向该窗口发送 WM_GETMINMAXINFO 消息。 这是为了验证窗口的新大小和位置并强制使用 CS_BYTEALIGNCLIENTCS_BYTEALIGN 客户端样式。 应用程序可以通过不调用此功能的基类来重写此功能。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnWinIniChange

对 Windows 初始化文件 WIN.INI 进行更改后,框架会调用此成员函数。

afx_msg void OnWinIniChange(LPCTSTR lpszSection);

参数

lpszSection
指向一个指定已更改部分的名称的字符串。 (该字符串不包括括住部分名称的方括号。)

备注

在应用程序使用 SystemParametersInfo Windows 函数更改 WIN.INI 文件中的设置后,该函数会调用 OnWinIniChange

若要将 WM_WININICHANGE 消息发送到所有顶级窗口,应用程序可以使用 SendMessage Windows 函数并将其 hwnd 参数设置为 HWND_BROADCAST

如果应用程序同时更改 WIN.INI 中的许多不同节,则应用程序应在将 lpszSection 设置为 NULL 的情况下发送一条 WM_WININICHANGE 消息。 否则,应用程序应在每次对 WIN.INI 进行更改时都发送 WM_WININICHANGE

如果应用程序收到 lpszSection 设置为 NULLOnWinIniChange 调用,则该应用程序应检查 WIN.INI 中影响到它的所有节。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnWndMsg

此成员函数由 WindowProc 调用,或者在消息反射期间调用。

virtual BOOL OnWndMsg(
    UINT message,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

参数

message
指定要发送的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

pResult
WindowProc 的返回值。 取决于消息;可为 NULL

返回值

如果消息已处理,则为 TRUE;否则为 FALSE。

备注

OnWndMsg 确定消息类型,并调用相应的框架函数(例如,对 WM_COMMAND 调用 OnCommand)或者在消息映射中查找相应的消息。

有关消息反射的详细信息,请参阅处理反射的消息

CWnd::OnXButtonDblClk

在光标位于窗口的工作区中的情况下,当用户双击 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

afx_msg void OnXButtonDblClk(
    UINT nFlags,
    UINT nButton,
    CPoint point);

参数

nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。

nButton
[in] 如果双击了第一个 Microsoft Intellimouse X 按钮,则值为 XBUTTON1;如果双击了第二个 X 按钮,则值为 XBUTTON2。

point
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

注解

此方法接收 Windows SDK 中所述的 WM_XBUTTONDBLCLK 通知。 如果未捕获鼠标,则消息将发布到光标下方的窗口。 否则,消息将发布到捕获了鼠标的窗口。

nFlags 参数可为下表中列出的修改键组合。 有关详细信息,请参阅关于鼠标输入

修改键 说明
MK_CONTROL 已按下 CTRL 键。
MK_LBUTTON 按下了鼠标左键。
MK_MBUTTON 按下了鼠标中键。
MK_RBUTTON 按下了鼠标右键。
MK_SHIFT 已按下 SHIFT 键。
MK_XBUTTON1 已按下 Microsoft IntelliMouse 的 XBUTTON1 鼠标按钮。
MK_XBUTTON2 已按下 Microsoft IntelliMouse 的 XBUTTON2 鼠标按钮。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnXButtonDown

在光标位于窗口的工作区中的情况下,当用户按下 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

afx_msg void OnXButtonDown(
    UINT nFlags,
    UINT nButton,
    CPoint point);

参数

nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。

nButton
[in] 如果单击了第一个 Microsoft Intellimouse X 按钮,则值为 XBUTTON1;如果单击了第二个 X 按钮,则值为 XBUTTON2

point
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

注解

此方法接收 Windows SDK 中所述的 WM_XBUTTONDOWN 通知。 如果未捕获鼠标,则消息将发布到光标下方的窗口。 否则,消息将发布到捕获了鼠标的窗口。

nFlags 参数可为下表中列出的修改键组合。 有关详细信息,请参阅关于鼠标输入

修改键 说明
MK_CONTROL 已按下 CTRL 键。
MK_LBUTTON 按下了鼠标左键。
MK_MBUTTON 按下了鼠标中键。
MK_RBUTTON 按下了鼠标右键。
MK_SHIFT 已按下 SHIFT 键。
MK_XBUTTON1 已按下 Microsoft IntelliMouse 的 XBUTTON1 鼠标按钮。
MK_XBUTTON2 已按下 Microsoft IntelliMouse 的 XBUTTON2 鼠标按钮。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OnXButtonUp

在光标位于窗口的工作区中的情况下,当用户释放 XBUTTON1XBUTTON2 时,框架会调用此成员函数。

afx_msg void OnXButtonUp(
    UINT nFlags,
    UINT nButton,
    CPoint point);

参数

nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL 标志指示按下了 CTRL 键。

nButton
[in] 如果双击了第一个 Microsoft Intellimouse X 按钮,则值为 XBUTTON1;如果双击了第二个 X 按钮,则值为 XBUTTON2

point
[in] 一个 CPoint 对象,指定光标相对于工作区左上角的 xy 坐标。

注解

此方法接收 Windows SDK 中所述的 WM_XBUTTONUP 通知。 如果未捕获鼠标,则消息将发布到光标下方的窗口。 否则,消息将发布到捕获了鼠标的窗口。

nFlags 参数可为下表中列出的修改键组合。 有关详细信息,请参阅关于鼠标输入

修改键 说明
MK_CONTROL 已按下 CTRL 键。
MK_LBUTTON 按下了鼠标左键。
MK_MBUTTON 按下了鼠标中键。
MK_RBUTTON 按下了鼠标右键。
MK_SHIFT 已按下 SHIFT 键。
MK_XBUTTON1 已按下 Microsoft IntelliMouse 的 XBUTTON1 鼠标按钮。
MK_XBUTTON2 已按下 Microsoft IntelliMouse 的 XBUTTON2 鼠标按钮。

注意

框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。

CWnd::OpenClipboard

打开剪贴板。

BOOL OpenClipboard();

返回值

如果剪贴板是通过 CWnd 打开的,则返回非零值;如果在另一个应用程序或窗口中打开了剪贴板,则返回 0。

备注

在调用 Windows CloseClipboard 函数之前,其他应用程序将无法修改剪贴板。

在调用 EmptyClipboard Windows 函数之前,当前 CWnd 对象不会成为剪贴板的所有者。

示例

//handler for Edit | Copy menu
void CMdiView::OnEditCopy()
{
   if (!OpenClipboard())
   {
      AfxMessageBox(_T("Cannot open the Clipboard"));
      return;
   }
   // Remove the current Clipboard contents
   if (!EmptyClipboard())
   {
      AfxMessageBox(_T("Cannot empty the Clipboard"));
      return;
   }

   // Get the currently selected data, hData handle to
   // global memory of data
   CString str;
   m_Edit.GetWindowText(str);
   size_t cbStr = (str.GetLength() + 1) * sizeof(TCHAR);
   HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
   memcpy_s(GlobalLock(hData), cbStr, str.LockBuffer(), cbStr);
   GlobalUnlock(hData);
   str.UnlockBuffer();

   // For the appropriate data formats...
   UINT uiFormat = (sizeof(TCHAR) == sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
   if (::SetClipboardData(uiFormat, hData) == NULL)
   {
      AfxMessageBox(_T("Unable to set Clipboard data"));
      CloseClipboard();
      return;
   }

   CloseClipboard();
}

CWnd::operator HWND

使用此运算符获取 CWnd 对象的句柄。

operator HWND() const;

CWnd::operator !=

比较两个 CWnd 对象以确定它们的 m_hWnd 是否不同。

BOOL operator!=(const CWnd& wnd) const;

参数

wnd
CWnd 对象的引用。

返回值

如果相等,则返回非零值;否则返回 0。

CWnd::operator ==

比较两个 CWnd 对象以确定它们的 m_hWnd 是否相同。

BOOL operator==(const CWnd& wnd) const;

参数

wnd
CWnd 对象的引用。

返回值

如果相等,则返回非零值;否则返回 0。

CWnd::PaintWindowlessControls

在控件容器上绘制无窗口控件。

BOOL PaintWindowlessControls(CDC* pDC);

参数

pDC
要在其上绘制无窗口控件的设备上下文。

返回值

如果存在控件容器并且已成功绘制无窗口控件,则返回 TRUE,否则返回 FALSE

CWnd::PostMessage

将消息放入窗口的消息队列中,然后返回且不等待相应的窗口处理消息。

BOOL PostMessage(
    UINT message,
    WPARAM wParam = 0,
    LPARAM lParam = 0);

参数

message
指定要发布的消息。

wParam
指定附加消息信息。 此参数的内容取决于发布的消息。

lParam
指定附加消息信息。 此参数的内容取决于发布的消息。

返回值

如果消息已发布,则返回非零值;否则返回 0。

备注

通过调用 GetMessagePeekMessage Windows 函数来检索消息队列中的消息。

Windows PostMessage 函数可用于访问另一个应用程序。

示例

请参阅 AfxGetMainWnd 的示例。

CWnd::PostNcDestroy

在销毁窗口后由默认的 OnNcDestroy 成员函数调用。

virtual void PostNcDestroy();

备注

派生类可以使用此函数进行自定义清理,例如删除 this 指针。

CWnd::PreCreateWindow

在创建附加到此 CWnd 对象的 Windows 窗口之前由框架调用。

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

参数

cs
CREATESTRUCT 结构。

返回值

如果应继续创建窗口,则返回非零值;0 表示创建失败。

注解

警告

如果菜单为 NULL 且样式包含 WS_CHILD,则 CWnd::PreCreateWindow 现在会将 cs 的 hMenu 成员分配到 this 指针。 要使功能正常,请确保对话框控件的 ID 不是 NULL

此项更改解决了托管/本机互操作方案中的崩溃问题。 CWnd::Create 中的 TRACE 语句会提醒开发人员出现了该问题。

切勿直接调用此函数。

此函数的默认实现检查 NULL 窗口类名并替换相应的默认值。 重写此成员函数可以在创建窗口之前修改 CREATESTRUCT 结构。

派生自 CWnd 的每个类将自身的功能添加到其 PreCreateWindow 重写中。 根据设计,不会记录 PreCreateWindow 的这些派生。 若要确定适合每个类的样式以及样式之间的相互依赖关系,可以检查应用程序基类的 MFC 源代码。 如果选择重写 PreCreateWindow,,则可以使用从 MFC 源代码中收集的信息来确定应用程序基类中使用的样式是否提供了所需的功能。

有关更改窗口样式的详细信息,请参阅更改 MFC 创建的窗口的样式

示例

// alter the styles of the mdi frame window
BOOL CMdiChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // 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 CMDIChildWnd::PreCreateWindow(cs);
}

CWnd::PreSubclassWindow

框架调用此成员函数以允许子类化窗口之前进行其他必要的子类化。

virtual void PreSubclassWindow();

备注

重写此成员函数可以动态子类化控件。 它是一个高级可重写函数。

CWnd::PreTranslateMessage

由类 CWinApp 用于在将窗口消息调度到 TranslateMessageDispatchMessage Windows 函数之前对其进行转换。

virtual BOOL PreTranslateMessage(MSG* pMsg);

参数

pMsg
指向包含要处理的消息的 MSG 结构。

返回值

如果消息已转换且不应调度,则返回非零值;如果消息未转换且应调度,则返回 0。

CWnd::Print

调用此成员函数可以在指定的设备上下文中绘制当前窗口,这种情况在打印机设备上下文中最常见。

void Print(
    CDC* pDC,
    DWORD dwFlags) const;

参数

pDC
一个指向设备上下文的指针。

dwFlags
指定绘制选项。 此参数可为下列一个或多个标志:

  • PRF_CHECKVISIBLE 仅当窗口可见时才绘制窗口。

  • PRF_CHILDREN 绘制所有可见的子窗口。

  • PRF_CLIENT 绘制窗口的工作区。

  • PRF_ERASEBKGND 在绘制窗口之前擦除背景。

  • PRF_NONCLIENT 绘制窗口的非工作区。

  • PRF_OWNED 绘制所有拥有的窗口。

备注

CWnd::DefWindowProc 函数根据指定的绘制选项处理此消息:

  • 如果指定了 PRF_CHECKVISIBLE 并且窗口不可见,则不执行任何操作。

  • 如果指定了 PRF_NONCLIENT,则在给定的设备上下文中绘制非工作区。

  • 如果指定了 PRF_ERASEBKGND,则向窗口发送 WM_ERASEBKGND 消息。

  • 如果指定了 PRF_CLIENT,则向窗口发送 WM_PRINTCLIENT 消息。

  • 如果设置了 PRF_CHILDREN,则向每个可见子窗口发送 WM_PRINT 消息。

  • 如果设置了 PRF_OWNED,则向每个可见的被拥有窗口发送 WM_PRINT 消息。

CWnd::PrintClient

调用此成员函数可在指定的设备上下文(通常是打印机设备上下文)中绘制任何窗口。

void PrintClient(
    CDC* pDC,
    DWORD dwFlags) const;

参数

pDC
一个指向设备上下文的指针。

dwFlags
指定绘制选项。 此参数可为下列一个或多个标志:

  • PRF_CHECKVISIBLE 仅当窗口可见时才绘制窗口。

  • PRF_CHILDREN 绘制所有可见的子窗口。

  • PRF_CLIENT 绘制窗口的工作区。

  • PRF_ERASEBKGND 在绘制窗口之前擦除背景。

  • PRF_NONCLIENT 绘制窗口的非工作区。

  • PRF_OWNED 绘制所有拥有的窗口。

CWnd::PrintWindow

将可视窗口复制到指定设备上下文(通常是打印机设备上下文)。

BOOL PrintWindow(
    CDC* pDC,
    UINT nFlags) const;

参数

pDC
指向要打印到的设备上下文的指针。

nFlags
指定绘制选项。 有关可能值的列表,请参阅 PrintWindow

返回值

如果函数成功,则为非零值;否则为

注解

此成员函数模拟 PrintWindow 函数的功能,如 Windows SDK 中所述。

CWnd::RedrawWindow

更新给定窗口工作区中的指定矩形或区域。

BOOL RedrawWindow(
    LPCRECT lpRectUpdate = NULL,
    CRgn* prgnUpdate = NULL,
    UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);

参数

lpRectUpdate
指向包含更新矩形坐标的 RECT 结构。 如果 prgnUpdate 包含有效的区域句柄,则忽略此参数。

prgnUpdate
标识更新区域。 如果 prgnUpdatelpRectUpdate 均为 NULL,则将整个工作区添加到更新区域。

flags
以下标志用于使窗口失效:

  • RDW_ERASE 在重绘窗口时使窗口接收 WM_ERASEBKGND 消息。 还必须指定 RDW_INVALIDATE 标志;否则 RDW_ERASE 不起作用。

  • RDW_FRAME 导致与更新区域相交的窗口的任何非工作区部分接收 WM_NCPAINT 消息。 还必须指定 RDW_INVALIDATE 标志;否则 RDW_FRAME 不起作用。

  • RDW_INTERNALPAINT 导致将 WM_PAINT 消息发布到窗口,无论该窗口是否包含无效区域。

  • RDW_INVALIDATE 使 lpRectUpdateprgnUpdate 失效(只有其中的一个可以不为 NULL)。 如果两者均为 NULL,则整个窗口失效。

以下标志用于使窗口有效:

  • RDW_NOERASE 抑制任何挂起的 WM_ERASEBKGND 消息。

  • RDW_NOFRAME 抑制任何挂起的 WM_NCPAINT 消息。 此标志必须与 RDW_VALIDATE 结合使用,通常与 RDW_NOCHILDREN 结合使用。 请慎用此选项,因为它可能导致无法正确绘制窗口的某些部分。

  • RDW_NOINTERNALPAINT 抑制任何挂起的内部 WM_PAINT 消息。 此标志不影响来自无效区域的 WM_PAINT 消息。

  • RDW_VALIDATE 使 lpRectUpdateprgnUpdate 有效(只有其中的一个可以不为 NULL)。 如果两者均为 NULL,则整个窗口有效。 此标志不影响内部 WM_PAINT 消息。

以下标志控制何时发生重绘。 除非指定这些位之一,否则 RedrawWindow 函数不会执行绘制。

  • RDW_ERASENOW 导致受影响的窗口(由 RDW_ALLCHILDRENRDW_NOCHILDREN 标志指定)在函数返回之前根据需要接收 WM_NCPAINTWM_ERASEBKGND 消息。 推迟 WM_PAINT 消息。

  • RDW_UPDATENOW 导致受影响的窗口(由 RDW_ALLCHILDRENRDW_NOCHILDREN 标志指定)在函数返回之前根据需要接收 WM_NCPAINTWM_ERASEBKGNDWM_PAINT 消息。

默认情况下,受 RedrawWindow 函数影响的窗口取决于指定的窗口是否具有 WS_CLIPCHILDREN 样式。 WS_CLIPCHILDREN 窗口的子窗口不受影响。 但是,不是 WS_CLIPCHILDREN 窗口的窗口在遇到 WS_CLIPCHILDREN 窗口之前将以递归方式生效或失效。 以下标志控制受 RedrawWindow 函数影响的窗口:

  • RDW_ALLCHILDREN 在重绘操作中包括子窗口(如果有)。

  • RDW_NOCHILDREN 从重绘操作中排除子窗口(如果有)。

返回值

如果成功重绘了窗口,则返回非零值;否则返回 0。

注解

当使用 RedrawWindow 成员函数来使桌面窗口的一部分失效时,该窗口不会接收 WM_PAINT 消息。 若要重绘桌面,应用程序应使用 CWnd::ValidateRgnCWnd::InvalidateRgnCWnd::UpdateWindowRedrawWindow

CWnd::ReflectChildNotify

此消息函数由框架从 OnChildNotify 调用。

BOOL ReflectChildNotify(
    UINT message,
    WPARAM wParam,
    LPARAM lParam,
    LRESULT* pResult);

参数

message
指定要反射的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

pResult
子窗口生成的结果,由父窗口返回。 可以为 NULL

返回值

如果反射了消息,则返回 TRUE;否则返回 FALSE

备注

它是一个帮助器函数,用于将 message 反射到其源。

反射的消息直接发送到 CWnd::OnWndMsgCCmdTarget::OnCmdMsg

有关消息反射的详细信息,请参阅处理反射的消息

CWnd::ReflectLastMsg

框架调用此成员函数以将最后一条消息反射到子窗口。

static BOOL PASCAL ReflectLastMsg(
    HWND hWndChild,
    LRESULT* pResult = NULL);

参数

hWndChild
子窗口的句柄。

pResult
子窗口生成的结果,由父窗口返回。 可以为 NULL

返回值

如果已处理消息,则返回非零值;否则返回 0。

注解

如果 hWndChild 标识的窗口是 OLE 控件或者是永久映射中的窗口,则此成员函数将调用 SendChildNotifyLastMsg

有关消息反射的详细信息,请参阅处理反射的消息

CWnd::ReleaseDC

释放设备上下文以供其他应用程序使用。

int ReleaseDC(CDC* pDC);

参数

pDC
标识要释放的设备上下文。

返回值

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

注解

ReleaseDC 成员函数的影响取决于设备上下文类型。

对于每个 ReleaseDC 成员函数调用以及每个 GetWindowDC 成员函数调用,应用程序必须调用 GetDC 成员函数。

CWnd::RepositionBars

调用此函数以在窗口的工作区中重新定位控件条以及调整其大小。

void RepositionBars(UINT nIDFirst,
    UINT nIDLast,
    UINT nIDLeftOver,
    UINT nFlag = reposDefault,
    LPRECT lpRectParam = NULL,
    LPCRECT lpRectClient = NULL,
    BOOL bStretch = TRUE) ;

参数

nIDFirst
要重新定位和调整大小的一系列控件条中第一个控件条的 ID。

nIDLast
要重新定位和调整大小的一系列控件条中最后一个控件条的 ID。

nIDLeftOver
指定用于填充工作区其余部分的窗格的 ID。

nFlag
可以是下列值之一:

  • CWnd::reposDefault 执行控件条布局。 lpRectParam 未使用,可为 NULL

  • CWnd::reposQuery 控件条布局未完成,而是使用工作区大小初始化了 lpRectParam,就如同布局实际上已完成一样。

  • CWnd::reposExtralpRectParam 的值添加到 nIDLast 的工作区并执行布局。

lpRectParam
指向 RECT 结构;其用法取决于 nFlag 的值。

lpRectClient
指向包含可用工作区的 RECT 结构。 如果为 NULL,则将使用窗口的工作区。

bStretch
指示是否应将条拉伸到框架大小。

备注

nIDFirstnIDLast 参数定义要在工作区中重新定位的控件条 ID 范围。 nIDLeftOver 参数指定子窗口(通常是视图)的 ID,将重新定位该子窗口并调整其大小以填充未由控件条填充的工作区其余部分。

CWnd::RunModalLoop

调用此成员函数可检索、转换或调度消息,直到 ContinueModal 返回 FALSE

int RunModalLoop(DWORD dwFlags = 0);

参数

dwFlags
指定要发送的 Windows 消息。 可以是以下其中一个值:

  • MLF_NOIDLEMSG 不向父级发送 WM_ENTERIDLE 消息。

  • MLF_NOKICKIDLE 不向窗口发送 WM_KICKIDLE 消息。

  • MLF_SHOWONIDLE 当消息队列空闲时显示窗口。

返回值

指定传递给 EndModalLoop 成员函数的 nResult 参数的值,该参数随后将用于结束模式循环。

注解

默认情况下,在调用 EndModalLoop 后,ContinueModal 返回 FALSE。 将作为 nResult 提供的值返回给 EndModalLoop

CWnd::ScreenToClient

将显示中的给定点或矩形的屏幕坐标转换为客户端坐标。

void ScreenToClient(LPPOINT lpPoint) const;  void ScreenToClient(LPRECT lpRect) const;

参数

lpPoint
指向包含要转换的屏幕坐标的 CPoint 对象或 POINT 结构

lpRect
指向包含要转换的屏幕坐标的 CRect 对象或 RECT 结构

备注

ScreenToClient 成员函数将 lpPointlpRect 中指定的屏幕坐标替换为客户端坐标。 新坐标相对于 CWnd 工作区的左上角。

示例

请参阅 CListCtrl::GetItemRect 的示例。

CWnd::ScrollWindow

滚动当前 CWnd 对象的工作区内容。

void ScrollWindow(
    int xAmount,
    int yAmount,
    LPCRECT lpRect = NULL,
    LPCRECT lpClipRect = NULL);

参数

xAmount
指定水平滚动的量(以设备单位表示)。 此参数必须是负值才能向左滚动。

yAmount
指定垂直滚动的量(以设备单位表示)。 此参数必须是负值才能向上滚动。

lpRect
指向指定要滚动的工作区部分的 CRect 对象或 RECT 结构。 如果 lpRectNULL,则滚动整个工作区。 如果光标矩形与滚动矩形相交,则重新定位插入点。

lpClipRect
指向指定要滚动的裁剪矩形的 CRect 对象或 RECT 结构。 仅滚动此矩形内的位。 即使矩形外部的位在 lpRect 矩形中,它们也不受影响。 如果 lpClipRectNULL,则不对滚动矩形执行任何剪裁。

注解

如果插入点位于正在滚动的 CWnd 中,则 ScrollWindow 会自动隐藏插入点以防止将其擦除,然后在滚动完成后还原插入点。 插入点位置会相应地调整。

ScrollWindow 成员函数未覆盖的区域不会重绘,而是合并到当前 CWnd 对象的更新区域中。 应用程序最终将收到一条 WM_PAINT 消息,通知它该区域需要重绘。 若要在完成滚动的同时重绘未覆盖的区域,请在调用 ScrollWindow 后立即调用 UpdateWindow 成员函数。

如果 lpRectNULL,则窗口中任何子窗口的位置将偏移由 xAmountyAmount 指定的量,并且 CWnd 中的任何无效(未绘制)区域也会偏移。 当 lpRectNULL 时,ScrollWindow 速度更快。

如果 lpRect 不是 NULL,则子窗口的位置不会更改,CWnd 中的无效区域不会偏移。 为防止在 lpRect 不是 NULL 时出现更新问题,请在调用 ScrollWindow 之前调用 UpdateWindow 成员函数以重绘 CWnd

CWnd::ScrollWindowEx

滚动窗口工作区的内容。

int ScrollWindowEx(
    int dx,
    int dy,
    LPCRECT lpRectScroll,
    LPCRECT lpRectClip,
    CRgn* prgnUpdate,
    LPRECT lpRectUpdate,
    UINT flags);

参数

dx
指定水平滚动的量(以设备单位表示)。 此参数必须使用负值才能向左滚动。

dy
指定垂直滚动的量(以设备单位表示)。 此参数必须使用负值才能向上滚动。

lpRectScroll
指向指定要滚动的工作区部分的 RECT 结构。 如果此参数为 NULL,则滚动整个工作区。

lpRectClip
指向指定要滚动的裁剪矩形的 RECT 结构。 此结构优先于 lpRectScroll 指向的矩形。 仅滚动此矩形内的位。 即使矩形外部的位在 lpRectScroll 矩形中,它们也不受影响。 如果此参数为 NULL,则不对滚动矩形执行任何剪裁。

prgnUpdate
标识已修改的区域,该区域包含因滚动而失效的区域。 此参数可以为 NULL

lpRectUpdate
指向 RECT 结构,该结构接收因滚动而失效的矩形边界。 此参数可以为 NULL

flags
可以是下列值之一:

  • SW_ERASE 当与 SW_INVALIDATE 一起指定时,通过向窗口发送 WM_ERASEBKGND 消息来擦除最近失效的区域。

  • SW_INVALIDATE 在滚动后使 prgnUpdate 标识的区域失效。

  • SW_SCROLLCHILDREN 按照 dxdy 中指定的像素数滚动与 lpRectScroll 指向的矩形相交的所有子窗口。 Windows 向与 lpRectScroll 相交的所有子窗口发送 WM_MOVE 消息,即使这些窗口未移动。 当滚动子窗口并且光标矩形与滚动矩形相交时,将重新定位插入点。

返回值

如果该函数成功,则返回值为 SIMPLEREGION(矩形失效区域)、COMPLEXREGION(非矩形失效区域;重叠矩形)或 NULLREGION(无失效区域);否则返回值为 ERROR

注解

此函数类似于 ScrollWindow 函数,但具有一些附加功能。

如果未指定 SW_INVALIDATESW_ERASE,则 ScrollWindowEx 成员函数不会使滚离的区域失效。 如果设置了其中的任一标志,ScrollWindowEx 将使此区域失效。 在应用程序调用 UpdateWindow 成员函数、调用 RedrawWindow 成员函数(指定 RDW_UPDATENOWRDW_ERASENOW)或从应用程序队列中检索 WM_PAINT 消息之前,该区域不会更新。

如果窗口具有 WS_CLIPCHILDREN 样式,则 prgnUpdatelpRectUpdate 指定的返回区域表示滚动窗口的必须更新的总区域范围,包括子窗口中需要更新的任何区域范围。

如果指定了 SW_SCROLLCHILDREN 标志,在滚动子窗口的一部分后,Windows 无法正确更新屏幕。 已滚动子窗口的位于源矩形之外的部分不会擦除,并且不会在其新目标中正确重绘。 使用 DeferWindowPos Windows 函数移动不完全位于 lpRectScroll 矩形内的子窗口。 如果设置了 SW_SCROLLCHILDREN 标志并且插入点矩形与滚动矩形相交,则重新定位光标。

假设所有输入和输出坐标(对应于 lpRectScrolllpRectCliplpRectUpdateprgnUpdate)以客户端坐标表示,无论窗口是否具有 CS_OWNDCCS_CLASSDC 类样式。 如有必要,请使用 LPtoDPDPtoLP Windows 函数在逻辑坐标之间进行转换。

CWnd::SendChildNotifyLastMsg

框架调用此成员函数以从父窗口向子窗口提供通知消息,使子窗口能够处理任务。

BOOL SendChildNotifyLastMsg(LRESULT* pResult = NULL);

参数

pResult
子窗口生成的结果,由父窗口返回。

返回值

如果子窗口已处理发送到其父级的消息,则返回非零值;否则返回 0。

注解

如果当前消息是反射的消息,则 SendChildNotifyLastMsg 会将其发送到源。

有关消息反射的详细信息,请参阅处理反射的消息

CWnd::SendDlgItemMessage

向控件发送消息。

LRESULT SendDlgItemMessage(
    int nID,
    UINT message,
    WPARAM wParam = 0,
    LPARAM lParam = 0);

参数

nID
指定将接收消息的对话框控件的标识符。

message
指定要发送的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

返回值

指定控件的窗口过程返回的值;如果找不到控件,则指定 0。

备注

SendDlgItemMessage 成员函数在消息处理完成之前不会返回。

使用 SendDlgItemMessage 与获取给定的控件的 CWnd* 并调用 SendMessage 成员函数相同。

示例

void CMyDlg::SetSpinRange()
{
   //set the min and max range of the up/down or spin control
   SendDlgItemMessage(IDC_SPIN1, UDM_SETRANGE, 0, (LPARAM)MAKELONG(8, 1));
}

CWnd::SendMessage

将指定的消息发送到此窗口。

LRESULT SendMessage(
    UINT message,
    WPARAM wParam = 0,
    LPARAM lParam = 0);

参数

message
指定要发送的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

返回值

消息处理结果;其值取决于发送的消息。

注解

SendMessage 成员函数直接调用窗口过程,在窗口过程处理完消息之前不会返回。 它与 PostMessage 成员函数不同,后者将消息放入窗口的消息队列并立即返回。

示例

void CAboutDlg::OnPaint()
{
   // This code, normally emitted by the Application Wizard for a dialog-
   // based project for the dialog's WM_PAINT handler, runs only if the
   // window is iconic. The window erases the icon's area, then
   // paints the icon referenced by m_hIcon.
   if (IsIconic())
   {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);

      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
   }
   else
   {
      CDialog::OnPaint();
   }
}

CWnd::SendMessageToDescendants

调用此成员函数可将指定的 Windows 消息发送到所有后代窗口。

void SendMessageToDescendants(
    UINT message,
    WPARAM wParam = 0,
    LPARAM lParam = 0,
    BOOL bDeep = TRUE,
    BOOL bOnlyPerm = FALSE);

参数

message
指定要发送的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

bDeep
指定搜索深入到的级别。 如果指定 TRUE,则以递归方式搜索所有子级;如果指定 FALSE,则只搜索直接子级。

bOnlyPerm
指定消息是否由暂时性窗口接收。 如果指定 TRUE,则暂时性窗口可以接收消息;如果指定 FALSE,则只有永久性窗口接收消息。 有关暂时性窗口的详细信息,请参阅技术说明 3

备注

如果 bDeepFALSE,则消息只发送到窗口的直接子级;否则消息将发送到所有后代窗口。

如果 bDeepbOnlyPermTRUE,则在暂时性窗口下继续搜索。 在这种情况下,只有在搜索过程中遇到的永久性窗口才会接收消息。 如果 bDeepFALSE,则消息只发送到窗口的直接子级。

示例

// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.

// change font of child controls of a dialog
LOGFONT lf = {0};
// redraw of child controls not needed in OnInitDialog
// since controls aren't drawn yet.
short int fRedraw = FALSE;

lf.lfHeight = 15; // Request a 15-pixel-high font

// with face name "Arial".
wcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));

m_font.CreateFontIndirect(&lf); // Create the font.

SendMessageToDescendants(WM_SETFONT,
                         (WPARAM)m_font.m_hObject, //handle to font
                         MAKELONG((WORD)fRedraw, 0),
                         FALSE); // send to all descendants(TRUE) or
                                 // just children of *this (FALSE)

CWnd::SendNotifyMessage

将指定的消息发送到窗口。

BOOL SendNotifyMessage(
    UINT message,
    WPARAM wParam,
    LPARAM lParam);

参数

message
指定要发送的消息。

wParam
指定其他消息相关信息。

lParam
指定其他消息相关信息。

返回值

如果该函数成功,则为非 0;否则为 0。

注解

如果窗口是由调用线程创建的,则 SendNotifyMessage 将针对该窗口调用窗口过程,并且在窗口过程处理完消息之前不会返回。 如果窗口是由其他线程创建的,则 SendNotifyMessage 会将消息传递给窗口过程并立即返回;它不会等待窗口过程完成消息处理。

CWnd::SetActiveWindow

使 CWnd 成为活动窗口。

CWnd* SetActiveWindow();

返回值

先前处于活动状态的窗口。

返回的指针可能是暂时性的,不应存储它以供稍后使用。

注解

应慎用 SetActiveWindow 成员函数,因为它允许应用程序任意接管活动窗口和输入焦点。 正常情况下,Windows 会负责处理所有激活。

CWnd::SetCapture

使所有后续鼠标输入发送到当前 CWnd 对象,而不管光标位置如何。

CWnd* SetCapture();

返回值

指向先前接收所有鼠标输入的窗口对象的指针。 如果没有此类窗口,则返回值为 NULL。 返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

CWnd 不再需要所有鼠标输入时,应用程序应调用 ReleaseCapture 函数,以便其他窗口可以接收鼠标输入。

捕获鼠标输入时,不会向活动窗口发送 WM_NCHITTESTWM_SETCURSOR 消息。

CWnd::SetCaretPos

设置插入点的位置。

static void PASCAL SetCaretPos(POINT point);

参数

point
指定插入点的新 x 和 y 坐标(以客户端坐标表示)。

备注

仅当插入点由当前任务中的窗口拥有时,SetCaretPos 成员函数才移动插入点。 无论插入点是否隐藏,SetCaretPos 都会移动插入点。

插入点是共享资源。 如果窗口不拥有插入点,则它不应移动插入点。

示例

// The following code snippet shows a caret when the left
// mouse button is pressed, and sets the caret's position to
// the cursor's position.
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
   //create a solid caret, the width is 2, the length is 20.
   CreateSolidCaret(2, 20);

   SetCaretPos(point);
   ShowCaret();

   CView::OnLButtonDown(nFlags, point);
}

CWnd::SetClipboardViewer

将此窗口添加到每当剪贴板内容发生更改时向其发出通知(通过 WM_DRAWCLIPBOARD 消息)的窗口链中。

HWND SetClipboardViewer();

返回值

如果成功,则返回剪贴板查看器链中下一个窗口的句柄。 应用程序应保存此句柄(可将其存储为成员变量),并在响应剪贴板查看器链消息时使用它。

备注

作为剪贴板查看器链一部分的窗口必须响应 WM_DRAWCLIPBOARDWM_CHANGECBCHAINWM_DESTROY 消息,并将消息传递给链中的下一个窗口。

此成员函数向窗口发送 WM_DRAWCLIPBOARD 消息。 由于尚未返回剪贴板查看器链中下一个窗口的句柄,因此应用程序不应传递它在 WM_DRAWCLIPBOARD 调用期间收到的 SetClipboardViewer 消息。

若要从剪贴板查看器链中删除自身,应用程序必须调用 ChangeClipboardChain 成员函数。

CWnd::SetDlgCtrlID

将窗口的窗口 ID 或控件 ID 设置为新值。

int SetDlgCtrlID(int nID);

参数

nID
为控件标识符设置的新值。

返回值

如果成功,则返回窗口的前一个标识符;否则返回 0。

备注

该窗口可为任一子窗口,而不仅仅是对话框中的控件。 该窗口不能是顶级窗口。

CWnd::SetDlgItemInt

将对话框中给定控件的文本设置为指定的整数值的字符串表示形式。

void SetDlgItemInt(
    int nID,
    UINT nValue,
    BOOL bSigned = TRUE);

参数

nID
指定要更改的控件的整数 ID。

nValue
指定用于生成项文本的整数值。

bSigned
指定整数值是有符号还是无符号。 如果此参数为 TRUE,则 nValue 有符号。 如果此参数为 TRUEnValue 小于 0,则在字符串中第一个数字之前添加一个负号。 如果此参数为 FALSE,则 nValue 无符号。

注解

SetDlgItemInt 向给定的控件发送 WM_SETTEXT 消息。

示例

请参阅 CWnd::SetDlgItemText 的示例。

CWnd::SetDlgItemText

设置窗口或对话框拥有的控件的标题或文本。

void SetDlgItemText(
    int nID,
    LPCTSTR lpszString);

参数

nID
标识要设置其文本的控件。

lpszString
指向 CString 对象或以 null 结尾的字符串,其中包含要复制到控件的文本。

备注

SetDlgItemText 向给定的控件发送 WM_SETTEXT 消息。

示例

// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.

// Initialize dialog controls
SetDlgItemText(IDC_EDITNAME, _T("Type in text"));
SetDlgItemInt(IDC_EDITNUM, 100);

CWnd::SetForegroundWindow

将创建窗口的线程置于前台,并激活窗口。

BOOL SetForegroundWindow();

返回值

如果该函数成功,则为非 0;否则为 0。

注解

键盘输入将定向到窗口,并为用户更改各种视觉提示。 前台窗口是用户当前正在使用的窗口。 前台窗口仅适用于顶级窗口(框架窗口或对话框)。

示例

请参阅 CWnd::FindWindow 的示例。

CWnd::SetFocus

声明输入焦点。

CWnd* SetFocus();

返回值

指向先前具有输入焦点的窗口对象的指针。 如果没有此类窗口,则返回值为 NULL。 返回的指针可能是暂时性的,请不要存储它。

注解

输入焦点将所有后续键盘输入定向到此窗口。 以前具有输入焦点的任何窗口都会失去它。

SetFocus 成员函数向失去输入焦点的窗口发送 WM_KILLFOCUS 消息,向接收输入焦点的窗口发送 WM_SETFOCUS 消息。 它还会激活窗口或其父级。

如果当前窗口处于活动状态但没有焦点(即没有任何窗口具有焦点),则按下任何键都会生成消息 WM_SYSCHARWM_SYSKEYDOWNWM_SYSKEYUP

CWnd::SetFont

WM_SETFONT 消息发送到窗口以使用指定的字体。

void SetFont(
    CFont* pFont,
    BOOL bRedraw = TRUE);

参数

pFont
指向 CFont 对象的指针。

bRedraw
如果要让窗口在处理 WM_SETFONT 消息后立即重绘,则值为 TRUE;否则为 FALSE

备注

除非窗口处理 WM_SETFONT 消息,否则此方法不起作用。 许多从 CWnd 派生的 MFC 类都会处理此消息,因为它们附加到一个预定义的窗口类,该类包括 WM_SETFONT 消息的消息处理程序。 若要使用此方法,从 CWnd 派生的类必须为 WM_SETFONT 消息定义一个方法处理程序。

CWnd::SetIcon

调用此成员函数可将句柄设置为由 hIcon 标识的特定图标。

HICON SetIcon(
    HICON hIcon,
    BOOL bBigIcon);

参数

hIcon
上一个图标的句柄。

bBigIcon
如果为 TRUE,则指定一个 32 x 32 像素的图标;如果为 FALSE,则指定一个 16 x 16 像素的图标。

返回值

图标的图柄。

备注

注册窗口类时,它会选择一个图标。

示例

请参阅 CWnd::GetSystemMenu 的示例。

CWnd::SetLayeredWindowAttributes

设置分层窗口的不透明度和透明度颜色键。

BOOL SetLayeredWindowAttributes(
    COLORREF crKey,
    BYTE bAlpha,
    DWORD dwFlags);

参数

crKey
指向 COLORREF 值的指针,该值指定组合分层窗口时要使用的透明度颜色键。 窗口以这种颜色绘制的所有像素都是透明的。 若要生成 COLORREF,请使用 RGB 宏。

bAlpha
用于描述分层窗口的不透明度的 Alpha 值。 有关详细信息,请参阅 BLENDFUNCTION 结构的 SourceConstantAlpha 成员。 当 bAlpha 为 0 时,窗口是完全透明的。 当 bAlpha 为 255 时,窗口是不透明的。

dwFlags
指定要执行的操作。 此参数可使用以下一个或多个值。 有关可能值的列表,请参阅 SetLayeredWindowAttributes

返回值

如果函数成功,则为非零值;否则为

注解

此成员函数模拟 SetLayeredWindowAttributes 函数的功能,如 Windows SDK 中所述。

CWnd::SetMenu

将当前菜单设置为指定的菜单。

BOOL SetMenu(CMenu* pMenu);

参数

pMenu
标识新菜单。 如果此参数为 NULL,则删除当前菜单。

返回值

如果菜单已更改,则返回非零值;否则返回 0。

注解

导致重绘窗口以反映菜单更改。

SetMenu 不会销毁先前的菜单。 应用程序应调用 CMenu::DestroyMenu 成员函数来完成此任务。

示例

请参阅 CMenu::LoadMenu 的示例。

CWnd::SetOwner

将当前窗口的所有者设置为指定的窗口对象。

void SetOwner(CWnd* pOwnerWnd);

参数

pOwnerWnd
标识窗口对象的新所有者。 如果此参数为 NULL,则窗口对象没有所有者。

注解

然后,此所有者可以从当前窗口对象接收命令消息。 默认情况下,当前窗口的父级是其所有者。

在与窗口层次结构不相关的窗口对象之间建立连接通常很有用。 例如,CToolBar 将通知发送到其所有者而不是其父级。 这样,工具栏就能变成一个窗口(例如 OLE 容器应用程序窗口)的子级,同时可将通知发送到另一个窗口(例如就地框架窗口)。 此外,在进行就地编辑期间停用或激活服务器窗口时,框架窗口拥有的任何窗口都将隐藏或显示。 这种所有权是通过 SetOwner 调用显式设置的。

此函数的所有权概念不同于 GetWindow 的所有权概念。

CWnd::SetParent

更改子窗口的父窗口。

CWnd* SetParent(CWnd* pWndNewParent);

参数

pWndNewParent
标识新的父窗口。

返回值

如果成功,则返回指向上一个父窗口对象的指针。 返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

如果子窗口可见,Windows 将执行相应的重绘。

CWnd::SetProperty

调用此成员函数可设置 dwDispID 指定的 OLE 控件属性。

void AFX_CDECL SetProperty(
    DISPID dwDispID,
    VARTYPE vtProp, ...);

参数

dwDispID
标识要设置的属性。

vtProp
指定要设置的属性的类型。 有关可能的值,请参阅 COleDispatchDriver::InvokeHelper 的“注解”部分。

...
vtProp指定的类型的单个参数。

注解

注意

只能对表示 OLE 控件的 CWnd 对象调用此函数。

有关将此成员函数用于 OLE 控件容器的详细信息,请参阅 ActiveX 控件容器:对 ActiveX 控件容器中的 ActiveX 控件编程一文。

CWnd::SetRedraw

应用程序调用 SetRedraw 以允许重绘更改或防止重绘更改。

void SetRedraw(BOOL bRedraw = TRUE);

参数

bRedraw
指定重绘标志的状态。 如果此参数为 TRUE,则设置重绘标志;如果 FALSE,则清除该标志。

备注

此成员函数设置或清除重绘标志。 在清除重绘标志时,每次更改后不会更新内容,并且在设置重绘标志之前不会重绘内容。 例如,需要将多个项添加到列表框的应用程序可以清除重绘标志,添加项,然后设置重绘标志。 最后,应用程序可以调用 InvalidateInvalidateRect 成员函数来导致重绘列表框。

示例

// Updating a control or window with large amounts of data may cause
// flicker. In such cases it may be better to turn off drawing

//m_list is a member of type CListCtrl
m_List.SetRedraw(FALSE); // turn drawing off regardless of list mode

//
// Update control
//

m_List.SetRedraw(TRUE); // turn drawing back on and update the window

// invalidate the entire control, force painting
m_List.Invalidate();
m_List.UpdateWindow();

CWnd::SetScrollInfo

调用此成员函数可设置 SCROLLINFO 结构维护的有关滚动条的信息。

BOOL SetScrollInfo(
    int nBar,
    LPSCROLLINFO lpScrollInfo,
    BOOL bRedraw = TRUE);

参数

nBar
指定滚动条是控件,还是窗口的非工作区的一部分。 如果它是非工作区的一部分,则 nBar 还会指示滚动条是水平定位、垂直定位还是同时采用这两种定位方式。 必须是下列其中一项:

  • SB_CTL 包含滚动条控件的参数。 m_hWnd 数据成员必须是滚动条控件的句柄。

  • SB_HORZ 指定窗口是水平滚动条。

  • SB_VERT 指定窗口是垂直滚动条。

lpScrollInfo
指向 SCROLLINFO 结构的指针。 有关此结构的详细信息,请参阅 Windows SDK。

bRedraw
指定是否应重绘滚动条以反映新位置。 如果 bRedrawTRUE,则重绘滚动条。 如果为 FALSE,则不重绘滚动条。 默认情况下,滚动条会重新绘制。

返回值

如果成功,则返回值为 TRUE。 否则为 FALSE

备注

SCROLLINFO 结构包含有关滚动条的信息,包括最小和最大滚动位置、页面大小以及滚动框 (Thumb) 的位置。 若要详细了解如何更改结构默认值,请参阅 Windows SDK 中的 SCROLLINFO 结构主题。

指示滚动条位置的 MFC Windows 消息处理程序 CWnd::OnHScrollCWnd::OnVScroll 仅提供 16 位位置数据。 GetScrollInfoSetScrollInfo 提供 32 位滚动条位置数据。 因此,应用程序可以在处理 CWnd::OnHScrollCWnd::OnVScroll 以获取 32 位滚动条位置数据时调用 GetScrollInfo

注意

CWnd::GetScrollInfo 使应用程序能够使用 32 位滚动条位置。

CWnd::SetScrollPos

设置滚动框的当前位置,并根据请求重绘滚动条以反映滚动框的新位置。

int SetScrollPos(
    int nBar,
    int nPos,
    BOOL bRedraw = TRUE);

参数

nBar
指定要设置的滚动条。 此参数可为下列任一项:

  • SB_HORZ 设置滚动框在窗口水平滚动条中的位置。

  • SB_VERT 设置滚动框在窗口垂直滚动条中的位置。

nPos
指定滚动框的新位置。 它必须在滚动范围内。

bRedraw
指定是否应重绘滚动条以反映新的滚动框位置。 如果此参数为 TRUE,则重绘滚动条;如果为 FALSE,则不会重绘滚动条。

返回值

滚动框的先前位置。

注解

如果后续调用另一个函数会重绘滚动条,则将 bRedraw 设置为 FALSE 很有用。

CWnd::SetScrollRange

设置给定滚动条的最小和最大位置值。

void SetScrollRange(
    int nBar,
    int nMinPos,
    int nMaxPos,
    BOOL bRedraw = TRUE);

参数

nBar
指定要设置的滚动条。 此参数可以是以下值之一:

  • SB_HORZ 设置窗口水平滚动条的范围。

  • SB_VERT 设置窗口垂直滚动条的范围。

nMinPos
指定最小滚动位置。

nMaxPos
指定最大滚动位置。

bRedraw
指定是否应重新绘制滚动条以反映更改。 如果 bRedrawTRUE,则重绘滚动条;如果为 FALSE,则不重绘滚动条。

备注

它还可用于隐藏或显示标准滚动条。

在处理滚动条通知消息时,应用程序不应调用此函数来隐藏滚动条。

如果在调用 SetScrollPos 成员函数之后立即调用 SetScrollRange,则 SetScrollPos 成员函数中的 bRedraw 参数应为 0,以防止滚动条绘制两次。

标准滚动条的默认范围为 0 到 100。 滚动条控件的默认范围为空(nMinPosnMaxPos 值均为 0)。 nMinPosnMaxPos 指定的值之差不得大于 INT_MAX

CWnd::SetTimer

安装系统计时器。

UINT_PTR SetTimer(
    UINT_PTR nIDEvent,
    UINT nElapse,
    void (CALLBACK* lpfnTimer)(HWND,
    UINT,
    UINT_PTR,
    DWORD));

参数

nIDEvent
指定非零计时器标识符。 如果计时器标识符是唯一的,则 SetTimer 返回与此相同的值。 否则,SetTimer 将确定新的唯一值并返回该值。 对于窗口计时器(具有 NULL 回调函数),该值必须仅对与当前窗口关联的其他窗口计时器唯一。 对于回调计时器,该值必须对所有进程中的所有计时器唯一。 因此,当你创建回调计时器时,返回的值很可能与指定的值不同。

nElapse
指定超时值或间隔,以毫秒为单位。

lpfnTimer
指定应用程序提供的、用于处理 WM_TIMER 消息的 TimerProc 回调函数的地址。 如果此参数为 NULL,则 WM_TIMER 消息将被放入应用程序的消息队列并由 CWnd 对象处理。

返回值

如果该函数成功,则返回新计时器的计时器标识符。 此值不一定与通过 nIDEvent 参数传入的值相等。 应用程序应始终将返回值传递给 KillTimer 成员函数以终止计时器。 如果成功,则返回非零值;否则返回 0。

备注

指定一个间隔值,每次经过该间隔,系统就会向安装应用程序的安装消息队列发布一条 WM_TIMER 消息,或将该消息传递给应用程序定义的 TimerProc 回调函数。

无需将 lpfnTimer 回调函数命名为 TimerProc,但必须将它声明为静态函数,并按如下所示对它进行定义。

void CALLBACK TimerProc(
    HWND hWnd,   // handle of CWnd that called SetTimer
    UINT nMsg,   // WM_TIMER
    UINT_PTR nIDEvent,   // timer identification
    DWORD dwTime    // system time);

示例

此示例使用 CWnd::SetTimerCWnd::OnTimerCWnd::KillTimer 来处理 WM_TIMER 消息。 第一个计时器设置为在 OnStartTimer 内每隔 2 秒向主框架窗口发送一条 WM_TIMER 消息。 OnTimer 事件处理程序为主框架窗口处理 WM_TIMER 消息。 此方法导致电脑扬声器每隔 2 秒发出一次哔声。 第二个计时器每隔 3.75 秒向回调函数发送一条消息。 OnStopTimer 通过对每个计时器 ID 调用 CWnd::KillTimer 来停止这两个计时器。

void CMainFrame::OnStartTimer()
{
   // This timer uses a WM_TIMER message, not a callback.
   // Therefore, the timer is specific to this window.
   // m_nWindowTimer is a UINT_PTR field.
   m_nWindowTimer = SetTimer(1, 2000, NULL);

   // For this demo, we specify an interval that won't overlap
   // with the window timer.
   m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);

   // See whether we got the ID we requested in the first parameter.
#ifdef _DEBUG
   CString str;
   str.Format(_T("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
   TRACE(str);
#endif
}

void CALLBACK CMainFrame::MyTimerProc(
    HWND hWnd,         // handle of CWnd that called SetTimer
    UINT nMsg,         // WM_TIMER
    UINT_PTR nIDEvent, // timer identification
    DWORD dwTime       // system time
)
{
   MessageBeep(0x00000030L); // Windows question sound.
}

void CMainFrame::OnStopTimer()
{
   KillTimer(m_nWindowTimer);
   KillTimer(m_nCallbackTimer);
}

void CMainFrame::OnTimer(UINT nIDEvent)
{
   MessageBeep(0xFFFFFFFF); // Beep

   // Call base class handler.
   CMDIFrameWnd::OnTimer(nIDEvent);
}

CWnd::SetWindowContextHelpId

调用此成员函数可将帮助上下文标识符与指定的窗口相关联。

BOOL SetWindowContextHelpId(DWORD dwContextHelpId);

参数

dwContextHelpId
帮助上下文标识符。

返回值

如果该函数成功,则为非 0;否则为 0。

注解

如果子窗口没有帮助上下文标识符,它将继承其父窗口的标识符。 同样,如果被拥有窗口没有帮助上下文标识符,它将继承其所有者窗口的标识符。 这种帮助上下文标识符继承使应用程序能够仅为对话框及其所有控件设置单个标识符。

示例

// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.

// Associate a help context id with the control.
// IDC_TESTHELP_CONTROL is the id of the control
// and HIDC_TESTHELP_CONTROL is its help context
// id associated with the control.
CWnd *pWnd = GetDlgItem(IDC_TESTHELP_CONTROL);
pWnd->SetWindowContextHelpId(HIDC_TESTHELP_CONTROL);

CWnd::SetWindowPlacement

设置窗口的显示状态以及正常(已还原)、最小化和最大化位置。

BOOL SetWindowPlacement(const WINDOWPLACEMENT* lpwndpl);

参数

lpwndpl
指向指定新显示状态和位置的 WINDOWPLACEMENT 结构。

返回值

如果该函数成功,则为非 0;否则为 0。

CWnd::SetWindowPos

更改子窗口、弹出窗口和顶级窗口的大小、位置和 Z 顺序。

BOOL SetWindowPos(
    const CWnd* pWndInsertAfter,
    int x,
    int y,
    int cx,
    int cy,
    UINT nFlags);

参数

pWndInsertAfter
标识 CWnd 对象,该对象在 Z 顺序中位于此 CWnd 对象之前(顺序比后者更高)。 此参数可以是指向 CWnd 的指针,或指向以下值之一的指针:

  • wndBottom 将窗口置于 Z 顺序的底部。 如果此 CWnd 是最顶部窗口,则该窗口将失去其最顶部状态;系统会将该窗口置于所有其他窗口的底部。

  • wndTop 将窗口置于 Z 顺序的顶部。

  • wndTopMost 将窗口置于所有非最顶部窗口的上面。 该窗口即使已停用,也会保留在最高位置。

  • wndNoTopMost 将窗口重新定位在所有非最顶部窗口的顶部(即所有最顶部窗口的后面)。 如果窗口已经是非最顶部窗口,则此标志不起作用。

有关此参数的用法规则,请参阅本主题的“注解”部分。

x
指定窗口左侧的新位置。

y
指定窗口顶部的新位置。

cx
指定窗口的新宽度。

cy
指定窗口的新高度。

nFlags
指定大小调整和定位选项。 此参数可为以下标志的组合:

  • SWP_DRAWFRAME 围绕窗口绘制一个框架(在创建窗口时定义)。

  • SWP_FRAMECHANGED 向窗口发送 WM_NCCALCSIZE 消息,即使窗口的大小未更改。 如果未指定此标志,则仅在更改窗口大小时才发送 WM_NCCALCSIZE

  • SWP_HIDEWINDOW 隐藏窗口。

  • SWP_NOACTIVATE 不激活窗口。 如果未设置此标志,则窗口将会激活并移到最顶部或非最顶部组的顶部(取决于 pWndInsertAfter 参数的设置)。

  • SWP_NOCOPYBITS 丢弃工作区的整个内容。 如果未指定此标志,则在调整窗口大小或重新定位窗口后,将保存工作区的有效内容并将其复制回工作区。

  • SWP_NOMOVE 保留当前位置(忽略 xy 参数)。

  • SWP_NOOWNERZORDER 不更改所有者窗口在 Z 顺序中的位置。

  • SWP_NOREDRAW 不重绘更改。 如果设置了此标志,则不执行任何形式的重绘。 这适用于工作区、非工作区(包括标题和滚动条),以及由于移动窗口而显示的任何父窗口部分。 如果设置了此标志,应用程序必须显式使该窗口和父窗口的任何部分失效,或重绘必须重绘的部分。

  • SWP_NOREPOSITIONSWP_NOOWNERZORDER 相同。

  • SWP_NOSENDCHANGING 防止窗口接收 WM_WINDOWPOSCHANGING 消息。

  • SWP_NOSIZE 保留当前大小(忽略 cxcy 参数)。

  • SWP_NOZORDER 保留当前顺序(忽略 pWndInsertAfter)。

  • SWP_SHOWWINDOW 显示窗口。

返回值

如果该函数成功,则返回非零值;否则返回 0。

备注

窗口在屏幕上按照 Z 顺序排列;Z 顺序顶部的窗口显示在该顺序中所有其他窗口的顶部。

子窗口的所有坐标都是客户端坐标(相对于父窗口工作区的左上角)。

通过将 pWndInsertAfter 参数设置为 &wndTopMost 并确保不设置 SWP_NOZORDER 标志,或者通过设置窗口的 Z 顺序来使其位于任何现有最顶部窗口之上,可将窗口移到 Z 顺序的顶部。 当非最顶部窗口成为最顶部窗口时,它拥有的窗口也将成为最顶部窗口。 它的所有者不会更改。

如果将最顶部窗口重新定位到 Z 顺序的底部 (&wndBottom) 或定位在任何非最顶部窗口之后,则该窗口不再位于最顶部。 当最顶部窗口变为非最顶部窗口时,其全部所有者及其拥有的窗口也将变为非最顶部窗口。

如果 SWP_NOACTIVATESWP_NOZORDER 均未指定(即应用程序请求同时激活窗口并按指定的 Z 顺序放置该窗口时),则仅在以下情况下才使用 pWndInsertAfter 中指定的值:

  • &wndTopMost&wndNoTopMost 均未在 pWndInsertAfter 参数中指定。

  • 此窗口不是活动窗口。

应用程序在不将非活动窗口放到 Z 顺序顶部的情况下无法激活该窗口。 应用程序可以不受限制地更改已激活窗口的 Z 顺序。

非最顶部窗口可以拥有最顶部窗口,但反之则不然。 由最顶部窗口拥有的任何窗口(例如对话框)本身将变成最顶部窗口,以确保所有被拥有的窗口位于其所有者之上。

在 Windows 3.1 和更高版本中,可以通过设置窗口的 WS_EX_TOPMOST 样式将其移到 Z 顺序的顶部并锁定在该位置。 即使此类最顶部窗口已停用,也会保留在最高位置。 例如,选择 WinHelp Always On Top 命令会将“帮助”窗口设为最顶部窗口,然后,当你返回应用程序时,该窗口仍然可见。

若要创建最顶部窗口,请在将 pWndInsertAfter 参数设置为等于 &wndTopMost 的情况下调用 SetWindowPos,或者在创建窗口时设置 WS_EX_TOPMOST 样式。

如果 Z 顺序包含任何具有 WS_EX_TOPMOST 样式的窗口,则使用 &wndTopMost 值移动的窗口将位于所有非最顶部窗口的顶部,但位于任何最顶部窗口之下。 当应用程序激活一个没有 WS_EX_TOPMOST 位的非活动窗口时,该窗口将移到所有非最顶部窗口之上,但位于任何最顶部窗口之下。

如果在 pWndInsertAfter 参数为 &wndBottom 的情况下调用 SetWindowPos,并且 CWnd 是最顶部窗口,则该窗口将失去其最顶部状态(已清除 WS_EX_TOPMOST),系统会将其置于Z 顺序的底部。

示例

void CMyApp::OnHideApplication()
{
   //m_pMainWnd is the main application window, a member of CMyApp
   ASSERT_VALID(m_pMainWnd);

   // hide the application's windows before closing all the documents
   m_pMainWnd->ShowWindow(SW_HIDE);
   m_pMainWnd->ShowOwnedPopups(FALSE);

   // put the window at the bottom of z-order, so it isn't activated
   m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
                            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}

CWnd::SetWindowRgn

调用此成员函数可设置窗口的区域。

int SetWindowRgn(
    HRGN hRgn,
    BOOL bRedraw);

参数

hRgn
区域的句柄。

bRedraw
如果为 TRUE,则操作系统将在设置区域后重绘窗口;否则不重绘。 如果窗口可见,通常会将 bRedraw 设置为 TRUE。 如果设置为 TRUE,则系统会将 WM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGED 消息发送到窗口。

返回值

如果该函数成功,则返回值为非零值。 如果函数失败,则返回值为零。

备注

窗口的窗口区域坐标相对于窗口的左上角,而不是窗口的工作区。

成功调用 SetWindowRgn 后,操作系统将拥有区域句柄 hRgn 指定的区域。 操作系统不创建该区域的副本,因此请不要使用此区域句柄发出任何其他函数调用,也不要关闭此区域句柄。

CWnd::SetWindowText

将窗口的标题设置为指定的文本。

void SetWindowText(LPCTSTR lpszString);

参数

lpszString
指向要用作新标题或控件文本的 CString 对象或 null 结尾的字符串。

注解

如果窗口是控件,则设置控件中的文本。

此函数导致将 WM_SETTEXT 消息发送到此窗口。

示例

// set the text in IDC_EDITNAME
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
pWnd->SetWindowText(_T("Gerald Samper"));

// Get the text back. CString is convenient, because MFC
// will automatically allocate enough memory to hold the
// text--no matter how large it is.

CString str;
pWnd->GetWindowText(str);
ASSERT(str == _T("Gerald Samper"));

// The LPTSTR override works, too, but it might be too short.
// If we supply a buffer that's too small, we'll only get those
// characters that fit.

TCHAR sz[10];
int nRet = pWnd->GetWindowText(sz, 10);

// Nine characters, plus terminating null
ASSERT(_tcscmp(sz, _T("Gerald Sa")) == 0);
ASSERT(nRet == 9);

// You can query the length of the text without the length of
// the string using CWnd::GetWindowTextLength()
nRet = pWnd->GetWindowTextLength();
ASSERT(nRet == 13);

CWnd::ShowCaret

在屏幕上的当前插入点位置显示插入点。

void ShowCaret();

备注

显示之后,插入符号开始自动闪烁。

仅当插入点具有当前形状且未连续两次或更多次隐藏时,ShowCaret 成员函数才显示插入点。 如果插入点不由此窗口拥有,则不显示插入点。

插入点隐藏次数是累积性的。 如果已连续调用 HideCaret 成员函数五次,则必须调用 ShowCaret 五次才能显示插入点。

插入点是共享资源。 仅当窗口具有输入焦点或处于活动状态时,它才应显示插入点。

示例

请参阅 CWnd::CreateCaret 的示例。

CWnd::ShowOwnedPopups

显示或隐藏此窗口拥有的所有弹出窗口。

void ShowOwnedPopups(BOOL bShow = TRUE);

参数

bShow
指定是要显示还是隐藏弹出窗口。 如果此参数为 TRUE,则显示所有已隐藏的弹出窗口。 如果此参数为 FALSE,则隐藏所有可见的弹出窗口。

示例

请参阅 CWnd::SetWindowPos 的示例。

CWnd::ShowScrollBar

显示或隐藏滚动条。

void ShowScrollBar(
    UINT nBar,
    BOOL bShow = TRUE);

参数

nBar
指定滚动条是控件,还是窗口的非工作区的一部分。 如果它是非工作区的一部分,则 nBar 还会指示滚动条是水平定位、垂直定位还是同时采用这两种定位方式。 必须是下列其中一项:

  • SB_BOTH 指定窗口的水平和垂直滚动条。

  • SB_HORZ 指定窗口是水平滚动条。

  • SB_VERT 指定窗口是垂直滚动条。

bShow
指定 Windows 是显示还是隐藏滚动条。 如果此参数为 TRUE,则显示滚动条;否则隐藏滚动条。

注解

在处理滚动条通知消息时,应用程序不应调用 ShowScrollBar 来隐藏滚动条。

CWnd::ShowWindow

设置窗口的可见性状态。

BOOL ShowWindow(int nCmdShow);

参数

nCmdShow
指定 CWnd 的显示方式。 它必须是以下值之一:

  • SW_HIDE 隐藏此窗口并将激活传递给另一个窗口。

  • SW_MINIMIZE 最小化窗口并激活系统列表中的顶级窗口。

  • SW_RESTORE 激活并显示窗口。 如果窗口已最小化或最大化,则 Windows 会将其还原为原始大小和位置。

  • SW_SHOW 激活窗口并以当前大小和位置显示窗口。

  • SW_SHOWMAXIMIZED 激活窗口并显示最大化的窗口。

  • SW_SHOWMINIMIZED 激活窗口并将其显示为图标。

  • SW_SHOWMINNOACTIVE 以图标形式显示窗口。 当前处于活动状态的窗口仍保持活动状态。

  • SW_SHOWNA 以当前状态显示窗口。 当前处于活动状态的窗口仍保持活动状态。

  • SW_SHOWNOACTIVATE 以最近的大小和位置显示窗口。 当前处于活动状态的窗口仍保持活动状态。

  • SW_SHOWNORMAL 激活并显示窗口。 如果窗口已最小化或最大化,则 Windows 会将其还原为原始大小和位置。

返回值

如果窗口先前可见,则返回非零值;如果 CWnd 先前已隐藏,则返回 0。

备注

对于主窗口,只能使用 CWinApp::m_nCmdShow 为每个应用程序调用 ShowWindow 一次。 后续的 ShowWindow 调用必须使用上面列出的值之一,而不能使用 CWinApp::m_nCmdShow 指定的值。

示例

请参阅 CWnd::CalcWindowRect 的示例。

CWnd::SubclassDlgItem

调用此成员函数可以“动态子类化”从对话框模板创建的控件并将其附加到此 CWnd 对象。

BOOL SubclassDlgItem(
    UINT nID,
    CWnd* pParent);

参数

nID
控件的 ID。

pParent
控件的父级(通常是对话框)。

返回值

如果该函数成功,则为非 0;否则为 0。

注解

动态子类化某个控件时,窗口消息将通过 CWnd 的消息映射路由并首先调用 CWnd 的类中的消息处理程序。 传递给基类的消息将传递给控件中的默认消息处理程序。

此成员函数将 Windows 控件附加到 CWnd 对象并替换控件的 WndProcAfxWndProc 函数。 该函数将旧的 WndProc 存储在 GetSuperWndProcAddr 成员函数返回的位置。

示例

// The following code fragment is from CMyDlg::OnInitDialog
// CMyDlg is derived from CDialog.

// IDC_BUTTON1 is the ID for a button on the
// dialog template used for CMyDlg.
m_MyButton.SubclassDlgItem(IDC_BUTTON1, this);

CWnd::SubclassWindow

调用此成员函数可以“动态子类化”窗口并将其附加到此 CWnd 对象。

BOOL SubclassWindow(HWND hWnd);

参数

hWnd
窗口的句柄。

返回值

如果该函数成功,则为非 0;否则为 0。

备注

动态子类化某个窗口时,窗口消息将通过 CWnd 的消息映射路由并首先调用 CWnd 的类中的消息处理程序。 传递给基类的消息将传递给窗口中的默认消息处理程序。

此成员函数将 Windows 控件附加到 CWnd 对象并替换窗口的 WndProcAfxWndProc 函数。 该函数将指向旧 WndProc 的指针存储在 CWnd 对象中。

注意

调用此函数时,窗口不能已附加到 MFC 对象。

示例

// The following code shows how to subclass the edit control and list box
// controls inside a combo box. It uses WM_CTLCOLOR for subclassing.
// CSuperComboBox represents the combo box
HBRUSH CSuperComboBox::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
   if (nCtlColor == CTLCOLOR_EDIT)
   {
      //Edit control
      if (m_edit.GetSafeHwnd() == NULL)
         m_edit.SubclassWindow(pWnd->GetSafeHwnd());
   }
   else if (nCtlColor == CTLCOLOR_LISTBOX)
   {
      //ListBox control
      if (m_listbox.GetSafeHwnd() == NULL)
         m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
   }

   HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
   return hbr;
}

void CSuperComboBox::OnDestroy()
{
   //unsubclass edit and list box before destruction
   if (m_edit.GetSafeHwnd() != NULL)
      m_edit.UnsubclassWindow();
   if (m_listbox.GetSafeHwnd() != NULL)
      m_listbox.UnsubclassWindow();
   CComboBox::OnDestroy();
}

CWnd::UnlockWindowUpdate

调用此成员函数可解锁通过 CWnd::LockWindowUpdate 锁定的窗口。

void UnlockWindowUpdate();

备注

每次只能使用 LockWindowUpdate 锁定一个窗口。 有关锁定窗口的详细信息,请参阅 CWnd::LockWindowUpdate 或 Win32 函数 LockWindowUpdate

CWnd::UnsubclassWindow

调用此成员函数可将 WndProc 设置回其原始值,并将由 HWND 标识的窗口从 CWnd 对象分离。

HWND UnsubclassWindow();

返回值

未子类化的窗口的句柄。

示例

请参阅 CWnd::SubclassWindow 的示例。

CWnd::UpdateData

调用此成员函数可初始化对话框中的数据,或者检索和验证对话框数据。

BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

参数

bSaveAndValidate
指示是正在初始化对话框 (FALSE) 还是正在检索数据 (TRUE) 的标志。

返回值

如果操作成功,则返回非零值;否则返回 0。 如果 bSaveAndValidateTRUE,则非零返回值表示数据已成功验证。

备注

CDialog::OnInitDialog 的默认实现中创建模式对话框时,框架会在将 bSaveAndValidate 设置为 FALSE 的情况下自动调用 UpdateData。 该调用发生在对话框可见之前。 CDialog::OnOK 的默认实现在将 bSaveAndValidate 设置为 TRUE 的情况下调用此成员函数以检索数据,如果成功,则关闭对话框。 (如果在对话框中单击“取消”按钮,则对话框将关闭且不检索数据。)

CWnd::UpdateDialogControls

调用此成员函数可更新使用 ON_UPDATE_COMMAND_UI 回调机制的对话框或窗口中对话框按钮和其他控件的状态。

void UpdateDialogControls(
    CCmdTarget* pTarget,
    BOOL bDisableIfNoHndler);

参数

pTarget
指向应用程序的主框架窗口,用于路由更新消息。

bDisableIfNoHndler
指示是否应将没有更新处理程序的控件自动显示为已禁用的标志。

注解

如果子控件没有处理程序且 bDisableIfNoHndlerTRUE,则将禁用该子控件。

在进行应用程序空闲处理过程中,框架将对对话框栏或工具栏中的控件调用此成员函数。

CWnd::UpdateLayeredWindow

更新分层窗口的位置、大小、形状、内容和透明度。

BOOL UpdateLayeredWindow(
    CDC* pDCDst,
    POINT* pptDst,
    SIZE* psize,
    CDC* pDCSrc,
    POINT* pptSrc,
    COLORREF crKey,
    BLENDFUNCTION* pblend,
    DWORD dwFlags);

参数

pDCDst
指向屏幕设备上下文的指针。 它用于在更新窗口内容时进行调色板颜色匹配。 如果 pDCDstNULL,将使用默认调色板。

如果 pDCSrcNULL,则 pDCDst 必须为 NULL

pptDst
指向 POINT 结构的指针,该结构指定分层窗口的新屏幕位置。 如果当前位置不会更改,则 pptDst 可为 NULL

psize
指向 SIZE 结构的指针,该结构指定分层窗口的新大小。 如果窗口大小不会更改,则 psize 可为 NULL

如果 pDCSrcNULL,则 psize 必须为 NULL

pDCSrc
指向定义分层窗口的表面的 DC 的指针。 如果窗口的形状和视觉上下文不会更改,则 pDCSrc 可为 NULL

pptSrc
指向 POINT 结构的指针,该结构指定层在设备上下文中的位置。

如果 pDCSrcNULL,则 pptSrc 应为 NULL

crKey
指向 COLORREF 值的指针,该值指定组合分层窗口时要使用的透明度颜色键。 窗口以这种颜色绘制的所有像素都是透明的。 若要生成 COLORREF,请使用 RGB 宏。

pblend
指向 BLENDFUNCTION 结构的指针,该结构指定组合分层窗口时要使用的透明度值。

dwFlags
指定要执行的操作。 此参数可使用以下一个或多个值。 有关可能值的列表,请参阅 UpdateLayeredWindow

返回值

如果函数成功,则为非零值;否则为

备注

此成员函数模拟 UpdateLayeredWindow 函数的功能,如 Windows SDK 中所述。

CWnd::UpdateWindow

如果更新区域不为空,则通过发送 WM_PAINT 消息来更新工作区。

void UpdateWindow();

备注

UpdateWindow 成员函数绕过应用程序队列直接发送 WM_PAINT 消息。 如果更新区域为空,则不发送 WM_PAINT

示例

// In this example a rectangle is drawn in a view.
// The OnChangeRect() function changes the dimensions
// of the rectangle and then calls CWnd::Invalidate() so the
// client area of the view will be redrawn next time the
// window is updated.  It then calls CWnd::UpdateWindow
// to force the new rectangle to be painted.

void CMdiView::OnChangeRect()
{
   // Change Rectangle size.
   m_rcBox = CRect(20, 20, 210, 210);

   // Invalidate window so entire client area
   // is redrawn when UpdateWindow is called.
   Invalidate();

   // Update Window to cause View to redraw.
   UpdateWindow();
}

// On Draw function draws the rectangle.
void CMdiView::OnDraw(CDC *pDC)
{
   // Other draw code here.

   pDC->Draw3dRect(m_rcBox, 0x00FF0000, 0x0000FF00);
}

CWnd::ValidateRect

通过从窗口的更新区域中删除矩形来验证给定矩形中的工作区。

void ValidateRect(LPCRECT lpRect);

参数

lpRect
指向 CRect 对象或 RECT 结构,其中包含要从更新区域中删除的矩形的客户端坐标。 如果 lpRectNULL,则验证整个窗口。

备注

BeginPaint 成员函数自动验证整个工作区。 如果在下次生成 WM_PAINT 之前需要验证更新区域的一部分,则不应调用 ValidateRectValidateRgn 成员函数。

Windows 将继续生成 WM_PAINT 消息,直到当前更新区域已验证。

CWnd::ValidateRgn

通过从窗口的当前更新区域中删除区域来验证给定区域中的工作区。

void ValidateRgn(CRgn* pRgn);

参数

pRgn
指向用于标识一个区域的 CRgn 对象的指针,该区域定义要从更新区域中删除的区域。 如果此参数为 NULL,则删除整个工作区。

注解

给定的区域必须事先已由 region 函数创建。 假设区域坐标是客户端坐标。

BeginPaint 成员函数自动验证整个工作区。 如果在生成下一条 WM_PAINT 消息之前必须验证更新区域的一部分,则不应调用 ValidateRectValidateRgn 成员函数。

CWnd::WindowFromPoint

检索包含指定点的窗口;point 必须指定屏幕上某个点的屏幕坐标。

static CWnd* PASCAL WindowFromPoint(POINT point);

参数

point
指定用于定义要检查的点的 CPoint 对象或 POINT 数据结构。

返回值

指向该点所在的窗口对象的指针。 如果没有任何窗口位于给定的点处,则返回值为 NULL。 返回的指针可能是暂时性的,不应存储它以供稍后使用。

备注

WindowFromPoint 不检索已隐藏或禁用的窗口,即使该点位于窗口内。 应用程序应使用 ChildWindowFromPoint 成员函数进行非限制性搜索。

CWnd::WindowProc

CWnd 对象提供 Windows 过程 (WindowProc)。

virtual LRESULT WindowProc(
    UINT message,
    WPARAM wParam,
    LPARAM lParam);

参数

message
指定要处理的 Windows 消息。

wParam
提供处理消息时使用的其他信息。 参数值取决于消息。

lParam
提供处理消息时使用的其他信息。 参数值取决于消息。

返回值

返回值取决于消息。

备注

它通过窗口的消息映射来调度消息。

CWnd::WinHelp

调用以启动 WinHelp 应用程序。

virtual void WinHelp(
    DWORD_PTR dwData,
    UINT nCmd = HELP_CONTEXT);

参数

dwData
指定其他数据。 使用的值取决于 nCmd 参数的值。

nCmd
指定请求的帮助的类型。 有关可能值的列表及其如何影响 dwData 参数,请参阅 Windows SDK 中的 WinHelp Windows 函数。

注解

有关详细信息,请参阅CWinApp::WinHelp

CWnd::RegisterTouchWindow

注册或取消注册 Windows 触摸支持。

BOOL RegisterTouchWindow(
    BOOL bRegister = TRUE,
    ULONG ulFlags = 0);

参数

bRegister
TRUE 表示注册 Windows 触摸支持;FALSE 表示不注册。

ulFlags
一组用于指定可选修改的位标志。 此字段可包含 0 或以下值之一:TWF_FINETOUCHTWF_WANTPALM

返回值

如果成功,则返回 TRUE;否则返回 FALSE

注解

CWnd::ResizeDynamicLayout

如果对窗口启用了动态布局,则窗口大小更改以调整子窗口布局时会通过框架调用。

virtual void ResizeDynamicLayout();

备注

另请参阅

CCmdTarget
层次结构图
CFrameWnd
CView