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_FINDER 和 ID_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 用于在窗口消息调度到 TranslateMessage 和 DispatchMessage 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 |
返回指向此窗口当前正在处理的消息的指针。 只应在处于 On Message 消息处理程序成员函数中时才进行调用。 |
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 |
当用户在光标位于窗口非工作区期间双击 XBUTTON1 或 XBUTTON2 时调用。 |
CWnd::OnNcXButtonDown |
当用户在光标位于窗口非工作区期间按下鼠标的 XBUTTON1 或 XBUTTON2 时调用。 |
CWnd::OnNcXButtonUp |
当用户在光标位于窗口非工作区期间释放鼠标的 XBUTTON1 或 XBUTTON2 时调用。 |
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 |
当用户在光标位于窗口工作区期间双击 XBUTTON1 或 XBUTTON2 时调用。 |
CWnd::OnXButtonDown |
当用户在光标位于窗口工作区期间按下 XBUTTON1 或 XBUTTON2 时调用。 |
CWnd::OnXButtonUp |
当用户在光标位于窗口工作区期间释放 XBUTTON1 或 XBUTTON2 时调用。 |
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 通知消息通过消息映射自动路由到正确的 OnMessage CWnd
成员函数。 可重写 OnMessage 成员函数以在派生类中处理成员的特定消息。
通过 CWnd
类还可以为应用程序创建 Windows 子窗口。 从 CWnd
派生类,然后将成员变量添加到派生类,以存储特定于应用程序的数据。 可派生类中实现消息处理程序成员函数和消息映射,以指定在消息定向到窗口时所发生的情况。
可采用两个步骤创建子窗口。 首先,调用构造函数 CWnd
以构造 CWnd
对象,然后调用 Create
成员函数以创建子窗口,然后将它附加到 CWnd
对象。
当用户终止子窗口时,销毁 CWnd
对象,或调用 DestroyWindow
成员函数以移除窗口并销毁其数据结构。
在 Microsoft 基础类库中,从 CWnd
派生了更多类以提供特定窗口类型。 其中许多类(包括 CFrameWnd
、CMDIFrameWnd
、CMDIChildWnd
、CView
和 CDialog
)是为进一步派生而设计的。 派生自 CWnd
的控件类(如 CButton
)可以直接使用,也可以用于进一步派生类。
有关如何使用 CWnd
的详细信息,请参阅 Frame Windows
和 Window 对象。
CWnd
标头:afxwin.h
由框架调用以执行对象的默认操作。
virtual HRESULT accDoDefaultAction(VARIANT varChild);
varChild
指定是要调用对象还是对象的子元素之一的默认操作。 此参数可为 CHILDID_SELF(执行对象的默认操作)或子 ID(执行对象子元素之一的默认操作)。
如果成功,则返回 S_OK;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accDoDefaultAction 的“返回值”。
此函数是 MFC 的 Active Accessibility 支持的一部分。
在 CWnd
派生类中重写此函数可执行对象的默认操作。 有关详细信息,请参阅 Windows SDK 中的 IAccessible::accDoDefaultAction。
由框架调用以检索屏幕上给定点处的子元素或子对象。
virtual HRESULT accHitTest(
long xLeft,
long yTop,
VARIANT* pvarChild);
xLeft
要进行命中测试的点的 X 坐标(采用屏幕单位)。
yTop
要进行命中测试的点的 Y 坐标(采用屏幕单位)。
pvarChild
接收用于标识位于 xLeft
和 yTop
指定的点处的对象的信息。 请参阅 Windows SDK 中 IAccessible::accHitTest
中的 pvarID
。
如果成功,则返回 S_OK
;如果失败,则返回 COM 错误代码。 请参阅 Windows SDK 中 IAccessible::accHitTest
的“返回值”。
此函数是 MFC 的 Active Accessibility 支持的一部分。
如果你有非窗口用户界面元素(MFC 处理的无窗口 ActiveX 控件除外),请在 CWnd
派生类中重写此函数。
有关详细信息,请参阅 Windows SDK 中的 IAccessible::accHitTest
。
由框架调用以检索指定对象的当前屏幕位置。
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
。
由框架调用以移到容器内的另一个用户界面元素,如果可能还检索对象。
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
。
由框架调用以修改选定内容或移动指定对象的键盘焦点。
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
。
显示或隐藏窗口时生成特效。
BOOL AnimateWindow(
DWORD dwTime,
DWORD dwFlags);
dwTime
指定播放动画需要多长时间(以毫秒为单位)。 通常,播放一个动画需要 200 毫秒。
dwFlags
指定动画的类型。 有关可能值的完整列表,请参阅 AnimateWindow
。
如果函数成功,则为非零值;否则为
此成员函数模拟 AnimateWindow
函数的功能,如 Windows SDK 中所述。
排列所有最小化(图标)子窗口。
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);
}
将 Windows 窗口附加到 CWnd
对象。
BOOL Attach(HWND hWndNew);
hWndNew
指定 Windows 窗口的句柄。
如果成功,则不为 0;否则为 0。
此示例演示如何使用 Attach
和 Detach
映射到 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
}
调用此成员函数以使框架窗口具有模式。
virtual void BeginModalState();
准备 CWnd
以进行绘制,并在 PAINTSTRUCT
数据结构中填充有关绘制的信息。
CDC* BeginPaint(LPPAINTSTRUCT lpPaint);
lpPaint
指向要接收绘制信息的 PAINTSTRUCT
结构。
标识 CWnd
的设备上下文。 指针可能是暂时性的,不应存储在 EndPaint
范围之外。
绘制结构包含一个 RECT
数据结构,该结构包含完全包围更新区域的最小矩形,和一个用于指定背景是否已擦除的标志。
更新区域由 Invalidate
、InvalidateRect
或 InvalidateRgn
成员函数设置,并由系统在调整大小、移动、创建、滚动或执行任何其他影响工作区的操作后设置。 如果更新区域标记为擦除,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
}
将调用对象的、在类型库中标记的默认简单绑定属性(例如编辑控件)绑定到由数据源控件的 DataSource
、UserName
、Password
和 SQL
属性定义的基础光标。
void BindDefaultProperty(
DISPID dwDispID,
VARTYPE vtProp,
LPCTSTR szFieldName,
CWnd* pDSCWnd);
dwDispID
指定要绑定到数据源控件的数据绑定控件上的属性的 DISPID
。
vtProp
指定要绑定的属性的类型。 例如 VT_BSTR
、VT_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;
}
将数据绑定控件(例如网格控件)上的光标绑定属性绑定到数据源控件,并向 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
置于一堆重叠窗口的顶部。
void BringWindowToTop();
此外,BringWindowToTop
将激活弹出的、顶层和 MDI 子窗口。 BringWindowToTop
成员函数应用于显露被任何重叠窗口部分或完全遮盖的任意窗口。
此函数只调用 Win32 BringWindowToTop
函数。 调用 SetWindowPos
函数可更改窗口在 Z 顺序中的位置。 BringWindowToTop
函数不更改窗口样式,即可使其成为顶层窗口。 有关详细信息,请参阅HWND_TOP
和 HWND_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();
}
计算可包含指定客户端矩形的窗口矩形。
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);
}
如果当前显示了工具提示,调用此成员函数可从屏幕中删除工具提示。
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);
}
使窗口相对于其父级居中。
void CenterWindow(CWnd* pAlternateOwner = NULL);
pAlternateOwner
指向相对于窗口居中位置的备用窗口(父窗口除外)的指针。
通常从 CDialog::OnInitDialog
调用,以相对于应用程序主窗口将对话框居中。 默认情况下,该函数相对于父窗口将子窗口居中,相对于所有者将弹出窗口居中。 如果弹出窗口没有所有者,则相对于屏幕将它居中。 若要相对于非所有者或父级的特定窗口将某个窗口居中,可将 pAlternateOwner
参数设置为有效窗口。 若要强制相对于屏幕居中,请将 CWnd::GetDesktopWindow
返回的值作为 pAlternateOwner
传递。
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
return TRUE;
}
从剪贴板查看器链中删除 CWnd
,并将 hWndNext
指定的窗口设为链中 CWnd
上级的后代。
BOOL ChangeClipboardChain(HWND hWndNext);
hWndNext
标识剪贴板查看器链中 CWnd
之后的窗口。
如果成功,则不为 0;否则为 0。
选择按钮(在其旁边添加复选标记)或清除按钮(去除复选标记),或者更改三态按钮的状态。
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
}
选中组中的给定单选按钮(向其添加复选标记)并清除组中的所有其他单选按钮(去除复选标记)。
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
的子窗口(如果有)包含指定的点。
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);
}
将显示中的给定点或矩形的客户端坐标转换为屏幕坐标。
void ClientToScreen(LPPOINT lpPoint) const; void ClientToScreen(LPRECT lpRect) const;
lpPoint
指向包含要转换的客户端坐标的 POINT
结构或 CPoint
对象。
lpRect
指向包含要转换的客户端坐标的 RECT
结构或 CRect
对象。
ClientToScreen
成员函数使用 POINT
或 RECT
结构中的客户端坐标或者 lpPoint
或 lpRect
指向的 CPoint
或 CRect
对象来计算新屏幕坐标;然后它将结构中的坐标替换为新坐标。 新屏幕坐标相对于系统显示器的左上角。
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());
}
最小化窗口。
void CloseWindow();
此成员函数模拟 CloseWindow
函数的功能,如 Windows SDK 中所述。
RunModalLoop
调用此成员函数来确定何时应退出模态。
virtual BOOL ContinueModal();
如果要继续进行模式循环,则返回非零值;调用 EndModalLoop
时返回 0。
默认情况下,它在调用 EndModalLoop
之前返回非零值。
创建指定的子窗口并将其附加到 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);
}
为指定对象创建 Active Accessibility 代理服务器。
virtual HRESULT CreateAccessibleProxy(
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
wParam
标识 Active Accessibility 代理访问的对象。 可为以下值之一
值 | 含义 |
---|---|
OBJID_CLIENT |
引用窗口的工作区。 |
lParam
提供其他消息相关信息。
pResult
指向存储结果代码的 LRESULT
的指针。
为指定对象创建 Active Accessibility 代理服务器。
为系统插入点创建新形状并声明插入点的所有权。
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();
}
使用此成员函数可创建一个 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
中的数据解释为 IStorage
或 IStream
数据。 如果 pPersist
中的数据是存储,则 bStorage
应是 TRUE
。 如果 pPersist
中的数据是流,则 bStorage
应是 FALSE
。 默认值是 FALSE
。
bstrLicKey
可选的许可证密钥数据。 仅在创建需要运行时许可证密钥的控件时才需要此数据。 如果控件支持许可,则必须提供许可证密钥才能成功创建控件。 默认值为 NULL
。
clsid
控件的唯一类 ID。
如果成功,则不为 0;否则为 0。
CreateControl
是 CWnd::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
对象。
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);
}
为系统插入点创建灰色矩形并声明插入点的所有权。
void CreateGrayCaret(
int nWidth,
int nHeight);
nWidth
指定插入点的宽度(以逻辑单位表示)。 如果此参数为 0,则宽度设置为系统定义的窗口边框宽度。
nHeight
指定插入点的高度(以逻辑单位表示)。 如果此参数为 0,则高度设置为系统定义的窗口边框高度。
插入点形状可为线条或方块。
参数 nWidth
和 nHeight
指定插入点的宽度和高度(以逻辑单位表示);确切的宽度和高度(以像素为单位)取决于映射模式。
系统的窗口边框宽度或高度可以通过 GetSystemMetrics
Windows 函数使用 SM_CXBORDER
和 SM_CYBORDER
索引来检索。 使用窗口边框宽度或高度可确保插入点在高分辨率显示器上可见。
CreateGrayCaret
成员函数会自动销毁先前的插入点形状(如果有),而不管插入点由哪个窗口拥有。 创建的插入点最初是隐藏的。 若要显示插入点,必须调用 ShowCaret
成员函数。
系统插入点是共享资源。 CWnd
应该仅在其具有输入焦点或处于活动状态时才创建插入点。 它应在失去输入焦点或变为非活动状态之前销毁插入点。
// Create a 5x10 gray caret in the edit control.
void CMyDlg::OnCreateGrayCaret()
{
m_MyEdit.CreateGrayCaret(5, 10);
m_MyEdit.ShowCaret();
}
为系统插入点创建实色矩形并声明插入点的所有权。
void CreateSolidCaret(
int nWidth,
int nHeight);
nWidth
指定插入点的宽度(以逻辑单位表示)。 如果此参数为 0,则宽度设置为系统定义的窗口边框宽度。
nHeight
指定插入点的高度(以逻辑单位表示)。 如果此参数为 0,则高度设置为系统定义的窗口边框高度。
插入点形状可为线条或方块。
参数 nWidth
和 nHeight
指定插入点的宽度和高度(以逻辑单位表示);确切的宽度和高度(以像素为单位)取决于映射模式。
系统的窗口边框宽度或高度可以通过 GetSystemMetrics
Windows 函数使用 SM_CXBORDER
和 SM_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();
在调用 CreateEx
或 Create
成员函数之前不会创建和附加 Windows 窗口。
调用默认窗口过程。
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();
}
调用默认窗口过程,该过程为应用程序不处理的任何窗口消息提供默认处理。
virtual LRESULT DefWindowProc(
UINT message,
WPARAM wParam,
LPARAM lParam);
message
指定要处理的 Windows 消息。
wParam
指定其他消息相关信息。
lParam
指定其他消息相关信息。
取决于发送的消息。
此成员函数确保处理每条消息。 应使用与窗口过程接收的相同参数来调用它。
由 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
对象的 Windows 窗口。
virtual BOOL DestroyWindow();
如果已销毁窗口,则返回非零值;否则返回 0。
DestroyWindow
成员函数向窗口发送相应的消息以将其停用并删除输入焦点。 它还销毁窗口的菜单、刷新应用程序队列、销毁未完成的计时器、删除剪贴板所有权,并断开剪贴板查看器链(如果 CWnd
位于查看器链的顶层)。 它向窗口发送 WM_DESTROY
和 WM_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
对象分离 Windows 句柄并返回该句柄。
HWND Detach();
Windows 对象的 HWND
。
请参阅 CWnd::Attach
的示例。
使用文件或目录列表填充列表框。
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_POSTMSGS
LB_DIR
旗。 如果设置了LB_DIR
标志,则 Windows 会将DlgDirList
生成的消息放入应用程序的队列中;否则,这些消息将直接发送到对话框过程。DDL_DRIVES
驱动器。 如果设置了DDL_DRIVES
标志,则会自动设置DDL_EXCLUSIVE
标志。 因此,若要创建包含驱动器和文件的目录列表,必须调用DlgDirList
两次:使用设置的DDL_DRIVES
标志调用一次,再使用列表其余部分的标志调用一次。DDL_EXCLUSIVE
独占位。 如果设置了独占位,则仅列出指定类型的文件;否则列出常规文件和指定类型的文件。
如果该函数成功,则为非 0;否则为 0。
DlgDirList
将 LB_RESETCONTENT
和 LB_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);
使用文件或目录列表填充组合框的列表框。
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_POSTMSGS
CB_DIR
旗。 如果设置了CB_DIR
标志,则 Windows 会将DlgDirListComboBox
生成的消息放入应用程序的队列中;否则,这些消息将直接发送到对话框过程。DDL_DRIVES
驱动器。 如果设置了DDL_DRIVES
标志,则会自动设置DDL_EXCLUSIVE
标志。 因此,若要创建包含驱动器和文件的目录列表,必须调用DlgDirListComboBox
两次:使用设置的DDL_DRIVES
标志调用一次,再使用列表其余部分的标志调用一次。DDL_EXCLUSIVE
独占位。 如果设置了独占位,则仅列出指定类型的文件;否则列出常规文件和指定类型的文件。
指定函数的结果。 如果生成了列表(即使是空列表),则返回非零值。 返回值 0 表示输入字符串不包含有效的搜索路径。
DlgDirListComboBox
将 CB_RESETCONTENT
和 CB_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.
从列表框检索当前所选内容。
BOOL DlgDirSelect(
LPTSTR lpString,
int nIDListBox);
lpString
指向接收列表框中的当前选择内容的缓冲区。
nIDListBox
指定对话框中列表框的整数 ID。
如果成功,则不为 0;否则为 0。
它假设列表框已由 DlgDirList
成员函数填充并且选择的是驱动器号、文件或目录名称。
DlgDirSelect
成员函数将选择内容复制到 lpString
指定的缓冲区。 如果没有选择内容,则 lpString
不会更改。
DlgDirSelect
将 LB_GETCURSEL
和 LB_GETTEXT
消息发送到列表框。
它不允许从列表框返回多个文件名。 列表框不能是多选列表框。
从组合框的列表框检索当前所选内容。
BOOL DlgDirSelectComboBox(
LPTSTR lpString,
int nIDComboBox);
lpString
指向接收所选路径的缓冲区。
nIDComboBox
指定对话框中组合框的整数 ID。
如果成功,则不为 0;否则为 0。
它假设列表框已由 DlgDirListComboBox
成员函数填充并且选择的是驱动器号、文件或目录名称。
DlgDirSelectComboBox
成员函数将选择内容复制到指定的缓冲区。 如果没有选择内容,缓冲区的内容不会更改。
DlgDirSelectComboBox
将 CB_GETCURSEL
和 CB_GETLBTEXT
消息发送到组合框。
它不允许从组合框返回多个文件名。
由框架调用以交换和验证对话框数据。
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。
在应用程序的 CWinApp::InitInstance
函数中使用 CWnd
指针从窗口内部调用此成员函数,以指示窗口从 Windows 文件管理器或文件资源管理器接受放置的文件。
void DragAcceptFiles(BOOL bAccept = TRUE);
BAccept
用于指示是否接受拖动的文件的标志。
只有使用设置为 TRUE
的 bAccept
参数调用 DragAcceptFiles
的窗口才会将自身标识为能够处理 Windows 消息 WM_DROPFILES
。 例如,在 MDI 应用程序中,如果在 DragAcceptFiles
函数调用中使用 CMDIFrameWnd
窗口指针,则只有 CMDIFrameWnd
窗口会收到 WM_DROPFILES
消息。 此消息不会发送到所有已打开的 CMDIChildWnd
窗口。 要让 CMDIChildWnd
窗口接收此消息,必须使用 CMDIChildWnd
窗口指针调用 DragAcceptFiles
。
若要停止接收拖动的文件,请调用成员函数并将 bAccept
设置为 FALSE
。
捕获鼠标并跟踪其移动,直到用户释放左键、按 ESC 键或将鼠标移动到围绕指定点的拖动矩形外部。
BOOL DragDetect(POINT pt) const;
pt
鼠标的初始位置,以屏幕坐标表示。 该函数使用此点来确定拖动矩形的坐标。
如果用户在按住左键的同时将鼠标移到了拖动矩形之外,则返回值不为零。
如果用户在按住左键的同时未将鼠标移到了拖动矩形之外,则返回值为零。
此成员函数模拟 DragDetect
函数的功能,如 Windows SDK 中所述。
绘制透明框架矩形并对它进行动画处理,以指示图标的打开或是窗口的最小化或最大化。
BOOL DrawAnimatedRects(
int idAni,
CONST RECT* lprcFrom,
CONST RECT* lprcTo);
idAni
指定动画的类型。 如果指定 IDANI_CAPTION
,窗口标题将以动画形式从 lprcFrom
指定的位置移到 lprcTo
指定的位置。 效果类似于最小化或最大化窗口。
lprcFrom
指向 RECT
结构的指针,该结构指定图标或最小化窗口的位置和大小。
lprcTo
指向 RECT
结构的指针,该结构指定已还原窗口的位置和大小
如果函数成功,则为非零值;否则为
此成员函数模拟 DrawAnimatedRects
函数的功能,如 Windows SDK 中所述。
绘制窗口标题。
BOOL DrawCaption(
CDC* pDC,
LPCRECT lprc,
UINT uFlags);
pDC
一个指向设备上下文的指针。 该函数将窗口标题绘制到此设备上下文中。
lprc
指向 RECT
结构的指针,该结构指定窗口标题的边框。
uFlags
指定绘制选项。 有关完整的值列表,请参阅 DrawCaption
。
如果函数成功,则为非零值;否则为
此成员函数模拟 DrawCaption
函数的功能,如 Windows SDK 中所述。
重绘菜单栏。
void DrawMenuBar();
如果在 Windows 创建窗口后更改了菜单栏,可调用此函数来绘制更改后的菜单栏。
请参阅 CWnd::GetMenu
的示例。
启用用户定义的 Active Accessibility 函数。
void EnableActiveAccessibility();
MFC 的默认 Active Accessibility 支持对于标准窗口和控件(包括 ActiveX 控件)已足够;但是,如果 CWnd
派生类包含非窗口用户界面元素,则 MFC 无法识别它们。 在这种情况下,必须在类中重写相应的 Active Accessibility 成员函数,并且必须在类的构造函数中调用 EnableActiveAccessibility
。
启用或禁用动态布局管理器。 启用动态布局时,子窗口的位置和大小可以在用户调整窗口大小时动态调整。
void EnableDynamicLayout(BOOL bEnable = TRUE);
bEnable
TRUE
表示启用动态布局;FALSE
表示禁用动态布局。
如果想要启用动态布局,你不只需要调用此方法。 还必须提供指定动态布局信息,此信息指定窗口中的控件如何响应大小更改。 可以在资源编辑器中(或以编程方式)为每个控件指定此信息。 请参阅动态布局。
启用或禁用窗口 D2D 支持。 在初始化主窗口之前调用此方法。
void EnableD2DSupport(
BOOL bEnable = TRUE,
BOOL bUseDCRenderTarget = FALSE);
bEnable
指定是打开还是关闭 D2D 支持。
bUseDCRenderTarget
指定是否使用设备上下文 (DC) 呈现器目标 CDCRenderTarget
。 如果为 FALSE
,则使用 CHwndRenderTarget
。
启用或禁用滚动条的一个或两个箭头。
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,表示箭头已处于请求的状态或发生错误。
启用或禁用此窗口的滚动条。
void EnableScrollBarCtrl(
int nBar,
BOOL bEnable = TRUE);
nBar
滚动条标识符。
bEnable
指定是启用还是禁用滚动条。
如果窗口包含同级滚动条控件,则使用该滚动条;否则使用窗口自身的滚动条。
为给定的窗口启用工具提示。
BOOL EnableToolTips(BOOL bEnable = TRUE);
bEnable
指定是启用还是禁用工具提示控件。 TRUE
启用该控件;FALSE
禁用该控件。
如果启用了工具提示,则返回 TRUE
;否则返回 FALSE
。
重写 OnToolHitTest
以提供窗口的一个或多个 TOOLINFO
结构。
备注
某些窗口(例如 CToolBar
)提供 OnToolHitTest
的内置实现。
有关此结构的详细信息,请参阅 Windows SDK 中的 TOOLINFO
。
仅调用 EnableToolTips
并不足以显示子控件的工具提示,除非父窗口派生自 CFrameWnd
。 这是因为,CFrameWnd
为 TTN_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
}
启用或禁用跟踪工具提示。
BOOL EnableTrackingToolTips(BOOL bEnable = TRUE);
bEnable
指定是要启用还是禁用跟踪工具提示。 如果此参数为 TRUE
,则启用跟踪工具提示。 如果此参数为 FALSE
,则禁用跟踪工具提示。
指示调用 EnableWindow
成员函数之前的状态。 如果窗口先前已禁用,则返回值不为零。 如果窗口先前已启用或发生错误,则返回值为 0。
跟踪工具提示是可以在屏幕上动态定位的工具提示窗口。 通过快速更新位置,工具提示窗口可以呈现平滑移动或“轨迹”效果。如果需要工具提示文本在指针移动时跟踪指针位置,此功能很有用。
启用或禁用鼠标和键盘输入。
BOOL EnableWindow(BOOL bEnable = TRUE);
bEnable
指定是要启用还是禁用给定的窗口。 如果此参数为 TRUE
,则启用窗口。 如果此参数为 FALSE
,则禁用窗口。
指示调用 EnableWindow
成员函数之前的状态。 如果窗口先前已禁用,则返回值不为零。 如果窗口先前已启用或发生错误,则返回值为 0。
禁用输入时,将忽略鼠标单击和击键之类的输入。 启用输入时,窗口会处理所有输入。
如果已启用状态正在更改,则在此函数返回之前会发送 WM_ENABLE
消息。
如果已禁用输入,将隐式禁用所有子窗口,不过不会向它们发送 WM_ENABLE
消息。
必须先启用窗口才能激活它。 例如,如果应用程序正在显示一个无模式对话框并已禁用其主窗口,则必须在销毁对话框之前启用主窗口。 否则,另一个窗口将获得输入焦点并被激活。 如果禁用了子窗口,当 Windows 尝试确定哪个窗口应获取鼠标消息时,将忽略子窗口。
默认情况下,创建的窗口最初处于已启用状态。 应用程序可以在 Create
或 CreateEx
成员函数中指定 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;
}
终止对 RunModalLoop
的调用。
virtual void EndModalLoop(int nResult);
nResult
包含要返回给 RunModalLoop
调用方的值。
nResult
参数传播到 RunModalLoop
的返回值。
调用此成员函数以将框架窗口从有模式更改为无模式。
virtual void EndModalState();
标记给定窗口中的绘制结束部分。
void EndPaint(LPPAINTSTRUCT lpPaint);
lpPaint
指向 PAINTSTRUCT
结构,该结构包含 BeginPaint
成员函数检索的绘制信息。
每次调用 BeginPaint
成员函数都需要 EndPaint
成员函数,但仅在绘制完成后需要。
如果插入点已由 BeginPaint
成员函数隐藏,则 EndPaint
会将插入点还原到屏幕。
请参阅 CWnd::BeginPaint
的示例。
启动对话框资源。
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
对象列表以查找正确的资源句柄。
由框架调用以显示工具提示消息。
void FilterToolTipMessage(MSG* pMsg);
pMsg
指向工具提示消息的指针。
在大多数 MFC 应用程序中,此方法由框架从 PreTranslateMessage
和 EnableToolTips
调用,你不需要自行调用它。
但是,在某些应用程序(例如某些 ActiveX 控件)中,框架可能不会调用这些方法,你需要自行调用 FilterToolTipMessage
。 有关详细信息,请参阅用于创建工具提示的方法。
返回顶级 CWnd
,其窗口类由 lpszClassName
指定,其窗口名称或标题由 lpszWindowName
指定。
static CWnd* PASCAL FindWindow(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName);
lpszClassName
指向指定窗口类名(WNDCLASS
结构)的以 null 结尾的字符串。 如果 lpClassName
为 NULL
,则所有类名匹配。
lpszWindowName
指向指定窗口名称(窗口标题)的以 null 结尾的字符串。 如果 lpWindowName
为 NULL
,则所有窗口名称匹配。
标识具有指定类名和窗口名称的窗口。 如果未找到此类窗口,则返回值为 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;
}
检索其类名和窗口名称与指定的字符串匹配的窗口对象。
static CWnd* FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow);
hwndParent
要搜索其子窗口的父窗口的句柄。
hwndChildAfter
子窗口的句柄。 搜索从 Z 顺序中的下一个子窗口开始。 子窗口必须是 hwndParent
的直接子窗口,而不仅仅是后代窗口。
lpszClass
指向以 null 结尾的字符串的指针,该字符串指定由先前的 RegisterClass
或 RegisterClassEx
调用创建的类名或类原子。
lpszWindow
指向指定窗口名称(窗口标题)的以 null 结尾的字符串的指针。 如果此参数为 NULL
,则所有窗口名称匹配。
如果该函数成功,则返回值是指向具有指定类名和窗口名称的窗口对象的指针。 如果函数失败,则返回值为 NULL
。
此成员函数模拟 FindWindowEx
函数的功能,如 Windows SDK 中所述。
闪烁给定的窗口一次。
BOOL FlashWindow(BOOL bInvert);
bInvert
指定 CWnd
是要闪烁还是返回原始状态。 如果 bInvert
为 TRUE
,则 CWnd
从一种状态闪烁到另一种状态。 如果 bInvert
为 FALSE
,则窗口返回其原始状态(活动或非活动)。
如果窗口在调用 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);
}
闪烁给定的窗口。
BOOL FlashWindowEx(
DWORD dwFlags,
UINT uCount,
DWORD dwTimeout);
*dwFlags*
指定闪存状态。 有关完整的值列表,请参阅 FLASHWINFO
结构。
uCount
指定闪烁窗口的次数。
dwTimeout
指定闪烁窗口的速率(以毫秒为单位)。 如果 dwTimeout
为零,则函数将使用默认光标闪烁速率。
返回值指定在调用 FlashWindowEx
函数之前的窗口状态。 如果窗口标题在执行该调用之前绘制为活动状态,则返回值不为零。 否则返回值为零。
此方法模拟 FlashWindowEx
函数的功能,如 Windows SDK 中所述。
在提供了窗口的句柄时返回指向 CWnd
对象的指针。 如果 CWnd
对象未附加到该句柄,则会创建并附加一个临时 CWnd
对象。
static CWnd* PASCAL FromHandle(HWND hWnd);
hWnd
Windows 窗口的 HWND
。
在提供了窗口的句柄时返回指向 CWnd
对象的指针。 如果 CWnd
对象未附加到该句柄,则会创建并附加一个临时 CWnd
对象。
该指针可能是暂时性的,不应存储它以供稍后使用。
在提供了窗口的句柄时返回指向 CWnd
对象的指针。
static CWnd* PASCAL FromHandlePermanent(HWND hWnd);
hWnd
Windows 窗口的 HWND
。
一个指向 CWnd
对象的指针。
如果未将 CWnd
对象附加到句柄,则返回 NULL
。
与 FromHandle
不同,此函数不会创建暂时性对象。
由框架调用以检索指定子级的 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
。
由框架调用调用以检索属于该对象的子级的个数。
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
。
由框架调用以检索描述对象默认操作的字符串。
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
。
由框架调用以检索描述指定对象的可视外观的字符串。
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
。
由框架调用以检索具有键盘焦点的对象。
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
。
由框架调用以检索对象的 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
。
由框架调用以检索与指定对象关联的 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
。
由框架调用以检索指定对象的快捷键或访问键。
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
。
由框架调用以检索指定对象的名称。
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
。
由框架调用以检索对象父级的 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
。
由框架调用以检索描述指定对象的角色的信息。
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
。
由框架调用以检索该对象的选定子级。
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
。
由框架调用以检索指定对象的当前状态。
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
。
由框架调用以检索指定对象的值。
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
。
检索指向活动窗口的指针。
static CWnd* PASCAL GetActiveWindow();
返回活动窗口;如果在调用时没有任何窗口处于活动状态,则返回 NULL
。 该指针可能是暂时性的,不应存储它以供稍后使用。
活动窗口是具有当前输入焦点的窗口,或者是由 SetActiveWindow
成员函数显式设为活动状态的窗口。
检索指定窗口的上级先窗口对象。
CWnd* GetAncestor(UINT gaFlags) const;
gaFlags
指定要检索的上级。 有关可能值的完整列表,请参阅 GetAncestor
。
如果该函数成功,则返回值是指向上级窗口对象的指针。 如果函数失败,则返回值为 NULL
。
此成员函数模拟 GetAncestor
函数的功能,如 Windows SDK 中所述。
检索具有鼠标捕获的窗口。
static CWnd* PASCAL GetCapture();
标识具有鼠标捕获的窗口。 如果没有任何窗口具有鼠标捕获,则返回值为 NULL
。
该返回值可能是暂时性的,不应存储它以供稍后使用。
在任意给定时间,只有一个窗口具有鼠标捕获。 调用 SetCapture
成员函数时,窗口会接收鼠标捕获。 无论光标是否在其边界范围内,此窗口都会接收鼠标输入。
检索插入点当前位置的客户端坐标并将其作为 CPoint
返回。
static CPoint PASCAL GetCaretPos();
包含插入点位置坐标的 CPoint
对象。
插入点位置是以 CWnd
窗口的客户端坐标形式指定的。
检索指定组中当前选中的单选按钮的 ID。
int GetCheckedRadioButton(
int nIDFirstButton,
int nIDLastButton);
nIDFirstButton
指定组中第一个单选按钮的整数标识符。
nIDLastButton
指定组中最后一个单选按钮的整数标识符。
选中的单选按钮的 ID;如果未选中任何单选按钮,则为 0。
将 CWnd
工作区的客户端坐标复制到 lpRect
指向的结构中。
void GetClientRect(LPRECT lpRect) const;
lpRect
指向接收客户端坐标的 RECT
结构或 CRect
对象。 left
和 top
成员将为 0。 right
和 bottom
成员将包含窗口的宽度和高度。
客户端坐标指定工作区的左上角和右下角。 由于客户端坐标相对于 CWnd
工作区的左上角,因此左上角的坐标是 (0,0)。
请参阅 CWnd::IsIconic
的示例。
检索剪贴板的当前所有者。
static CWnd* PASCAL GetClipboardOwner();
如果该函数成功,则标识拥有剪贴板的窗口。 否则为 NULL
。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
即使剪贴板当前没有所有者,它也仍可以包含数据。
检索剪贴板查看器链中的第一个窗口。
static CWnd* PASCAL GetClipboardViewer();
如果成功,则标识当前负责显示剪贴板的窗口;否则为 NULL
(例如,如果没有查看器)。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
调用此成员函数可检索指向未知 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
返回指向此窗口当前正在处理的消息的指针。 仅在处于 OnMessage 消息处理程序成员函数中时才调用。
static const MSG* PASCAL GetCurrentMessage();
返回指向 MSG
结构的指针,该结构包含窗口当前正在处理的消息。 仅在处于 OnMessage 处理程序中时才调用。
请参阅 CMDIFrameWnd::MDICascade
的示例。
检索指向工作区的通用上下文、类上下文或专用设备上下文的指针,具体取决于为 CWnd
指定的类样式。
CDC* GetDC();
如果成功,则标识 CWnd
工作区的设备上下文;否则返回值为 NULL
。 该指针可能是暂时性的,不应存储它以供稍后使用。
对于通用设备上下文,GetDC
会在每次检索上下文时为其分配默认属性。 对于类和专用上下文,GetDC
将先前分配的属性保持不变。 设备上下文可以在后续的图形设备接口 (GDI) 函数中使用,以在工作区进行绘制。
除非设备上下文属于窗口类,否则必须调用 ReleaseDC
成员函数以在绘制后释放上下文。
如果在注册类时将 CS_CLASSDC
、CS_OWNDC
或 CS_PARENTDC
指定为 WNDCLASS
结构中的样式,则 CWnd
成员函数将返回属于 GetDC
类的设备上下文。
检索 CWnd
窗口的设备上下文的句柄。
CDC* GetDCEx(
CRgn* prgnClip,
DWORD flags);
prgnClip
标识可与客户端窗口的可见区域组合的剪切区域。
flags
可使用以下预设值之一:
DCX_CACHE
从缓存而不是OWNDC
或CLASSDC
窗口返回设备上下文。 重写CS_OWNDC
和CS_CLASSDC
。DCX_CLIPCHILDREN
排除CWnd
窗口下面的所有子窗口的可见区域。DCX_CLIPSIBLINGS
排除CWnd
窗口上面的所有同级窗口的可见区域。DCX_EXCLUDERGN
从返回的设备上下文的可见区域中排除prgnClip
标识的剪切区域。DCX_INTERSECTRGN
与返回的设备上下文的可见区域中由prgnClip
标识的剪切区域相交。DCX_LOCKWINDOWUPDATE
即使存在以其他方式排除此窗口的有效LockWindowUpdate
调用,也允许绘制。 此值用于在跟踪期间绘制。DCX_PARENTCLIP
使用父窗口的可见区域,并忽略父窗口的WS_CLIPCHILDREN
和WS_PARENTDC
样式位。 此值将设备上下文的原点设置为CWnd
窗口的左上角。DCX_WINDOW
返回对应于窗口矩形而不是客户端矩形的设备上下文。
如果该函数成功,则返回指定窗口的设备上下文;否则返回 NULL
。
设备上下文可以在后续的 GDI 函数中使用,以便在工作区中进行绘制。
此函数是 GetDC
函数的扩展,使应用程序能够更好地控制如何以及是否剪裁窗口的设备上下文。
除非设备上下文属于窗口类,否则必须调用 ReleaseDC
函数以在绘制后释放上下文。 由于在任意给定时间只有五个通用设备上下文可用,因此无法释放设备上下文可能会导致其他应用程序无法访问设备上下文。
若要获取缓存的设备上下文,应用程序必须指定 DCX_CACHE
。 如果未指定 DCX_CACHE 并且窗口不是 CS_OWNDC
或 CS_CLASSDC
,则此函数将返回 NULL
。
如果在注册类时在 WNDCLASS
结构中指定了 CS_CLASSDC
、CS_OWNDC
或 CS_PARENTDC
样式,则 GetDCEx
函数将返回具有特殊特征的设备上下文。
有关这些特征的详细信息,请参阅 Windows SDK 中 WNDCLASS
结构的介绍。
检索 CWnd
窗口的设备上下文 (DC) 呈现目标。
CDCRenderTarget* GetDCRenderTarget();
如果该函数成功,则返回指定窗口的设备上下文呈现目标;否则返回 NULL
。
调用此成员函数可查找给定 ID 指定的后代窗口。
CWnd* GetDescendantWindow(
int nID,
BOOL bOnlyPerm = FALSE) const;
nID
指定要检索的控件或子窗口的标识符。
bOnlyPerm
指定要返回的窗口是否可为暂时性的。 如果为 TRUE
,则只能返回永久性窗口;如果为 FALSE
,则该函数可以返回暂时性窗口。 有关暂时性窗口的详细信息,请参阅技术说明 3。
指向 CWnd
对象的指针;如果找不到子窗口,则为 NULL
。
此成员函数搜索整个子窗口树,而不仅仅是直接子窗口。
返回 Windows 桌面窗口。
static CWnd* PASCAL GetDesktopWindow();
标识 Windows 桌面窗口。 此指针可能是暂时性的,不应存储它以供稍后使用。
桌面窗口覆盖整个屏幕,是绘制所有图标和其他窗口的区域。
返回任何子窗口的窗口或控件 ID 值,而不仅仅是对话框中控件的 ID。
int GetDlgCtrlID() const;
如果该函数成功,则返回 CWnd
子窗口的数字标识符;否则返回 0。
由于顶级窗口没有 ID 值,如果 CWnd
是顶级窗口,则此函数的返回值无效。
请参阅 CWnd::OnCtlColor
的示例。
检索指向对话框或其他窗口中指定控件或子窗口的指针。
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);
检索 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
将收到非零值。 如果 lpTrans
为 NULL
,则 GetDlgItemInt
不会发出有关错误的警告。
它通过去除文本开头的任何多余空格并转换十进制数字,将给定对话框中指定控件的文本转换为整数值。 它在到达文本末尾或遇到任何非数字字符时会停止转换。
如果 bSigned
为 TRUE
,则 GetDlgItemInt
会检查文本开头的减号 (-) 并将文本转换为带符号的数字。 否则,它会创建一个无符号值。
它向控件发送 WM_GETTEXT
消息。
调用此成员函数可检索与对话框中控件关联的标题或文本。
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
指向的位置,并返回复制的字节数。
调用此成员函数可检索指向由数据源控件的 DataSource
、UserName
、Password
和 SQL 属性定义的基础光标的指针。
IUnknown* GetDSCCursor();
指向由数据源控件定义的光标的指针。 MFC 将负责对指针调用 AddRef
。
使用返回的指针设置复杂数据绑定控件(例如数据绑定网格控件)的 ICursor
属性。 在第一个绑定控件请求其光标之前,数据源控件不会变为活动状态。 这可以通过调用 GetDSCCursor
显式发生,也可以通过 MFC 绑定管理器隐式发生。 无论哪种情况,都可以通过对返回的指向 IUnknown
的指针依次调用 GetDSCCursor
和 Release
来强制数据源控件变为活动状态。 激活会导致数据源控件尝试连接到基础数据源。 返回的指针可在下面的上下文中使用:
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;
}
检索指向动态布局管理器对象的指针。
CMFCDynamicLayout* GetDynamicLayout();
指向动态布局管理器对象的指针;如果未启用动态布局,则为 NULL
。
窗口对象拥有并管理返回的指针的生存期,因此它只应该用于访问对象;不要删除指针或永久存储指针。
返回窗口的扩展样式。
DWORD GetExStyle() const;
窗口的扩展样式。 有关 MFC 中使用的扩展窗口样式的详细信息,请参阅扩展窗口样式。
检索指向当前具有输入焦点的 CWnd
的指针。
static CWnd* PASCAL GetFocus();
指向具有当前焦点的窗口的指针;如果没有焦点窗口,则为 NULL
。
该指针可能是暂时性的,不应存储它以供稍后使用。
将 WM_GETFONT
消息发送到窗口以检索当前字体。
CFont* GetFont() const;
指向附加到窗口当前字体的 CFont
对象的指针。
除非窗口处理 WM_GETFONT
消息,否则此方法不起作用。 许多从 CWnd
派生的 MFC 类都会处理此消息,因为它们附加到一个预定义的窗口类,该类包括 WM_GETFONT
消息的消息处理程序。 若要使用此方法,从 CWnd
派生的类必须为 WM_GETFONT
消息定义一个方法处理程序。
返回指向前台窗口(用户当前正在使用的窗口)的指针。
static CWnd* PASCAL GetForegroundWindow();
指向前台窗口的指针。 这可能是一个暂时性的 CWnd
对象。
前台窗口仅适用于顶级窗口(框架窗口或对话框)。
调用此成员函数可获取 bBigIcon
指示的大图标 (32x32) 的句柄或小图标 (16x16) 的句柄。
HICON GetIcon(BOOL bBigIcon) const;
bBigIcon
如果为 TRUE
,则指定一个 32 x 32 像素的图标;如果为 FALSE
,则指定一个 16 x 16 像素的图标。
图标的图柄。 如果不成功,则返回 NULL
。
确定最近处于活动状态的由 CWnd
拥有的弹出窗口。
CWnd* GetLastActivePopup() const;
标识最近处于活动状态的弹出窗口。 如果满足以下任何条件,则返回值是窗口本身:
该窗口本身最近处于活动状态。
该窗口不拥有任何弹出窗口。
该窗口不是顶级窗口,或者由另一窗口拥有。
该指针可能是暂时性的,不应存储它以供稍后使用。
请参阅 CWnd::FindWindow
的示例。
检索分层窗口的不透明度和透明度颜色键。
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 中所述。
检索指向此窗口的菜单的指针。
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.
}
}
检索有关指定的菜单栏的信息。
BOOL GetMenuBarInfo(
LONG idObject,
LONG idItem,
PMENUBARINFO pmbi) const;
idObject
指定菜单对象。 有关可能值的列表,请参阅 GetMenuBarInfo
。
idItem
指定要检索其信息的项。 如果此参数为零,则函数将检索有关菜单本身的信息。 如果此参数为 1,则函数将检索有关菜单中第一项的信息,依此类推。
pmbi
指向接收信息的 MENUBARINFO
结构的指针。
如果函数成功,则为非零值;否则为
此成员函数模拟 GetMenuBarInfo
函数的功能,如 Windows SDK 中所述。
在对话框的控件组中搜索上一个或下一个控件。
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
标识组中的第一个控件并且 bPrevious
为 TRUE
,则 GetNextDlgGroupItem
返回指向组中最后一个控件的指针。
备注
由于 MFC 支持无窗口 ActiveX 控件、标准 ActiveX 控件和窗口,因此仅通过 HWND
引用控件不再足够。 COleControlSiteOrWnd
对象包含用于将其标识为有窗口 ActiveX 控件、无窗口 ActiveX 控件或窗口的信息,如下所述:
控件或窗口类型 | 标识信息 |
---|---|
有窗口 ActiveX 控件 | 包含 HWND 并将 COleControlSite 对象与其关联。 COleControlSiteOrWnd 的 m_hWnd 成员设置为控件的 HWND ,m_pSite 成员指向控件的 COleControlSite 。 |
无窗口 ActiveX 控件 | 不包含 HWND 。 COleControlSiteOrWnd 的 m_pSite 成员指向控件的 COleControlSite ,m_hWnd 成员为 NULL 。 |
标准窗口 | 仅包含 HWND 。 COleControlSiteOrWnd 的 m_hWnd 成员设置为窗口的 HWND,m_pSite 成员为 NULL 。 |
检索指向使用 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(UINT nFlag = GW_HWNDNEXT) const;
nFlag
指定函数是要返回指向下一个窗口还是上一个窗口的指针。 此参数可为 GW_HWNDNEXT
,即返回窗口管理器列表中 CWnd
对象后面的窗口;也可为 GW_HWNDPREV
,即返回窗口管理器列表中的前一个窗口。
如果成员函数成功,则标识窗口管理器列表中的下一个(或上一个)窗口。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
窗口管理器列表包含所有顶级窗口、其关联的子窗口以及任何子窗口的子窗口的条目。
如果 CWnd
是顶级窗口,则函数将搜索下一个(或上一个)顶级窗口;如果 CWnd
是子窗口,则函数将搜索下一个(或上一个)子窗口。
检索指定 ActiveX 控件的自定义站点。
COleControlSite* GetOleControlSite(UINT idControl) const;
idControl
ActiveX 控件的 ID。
检索当前打开了剪贴板的窗口的句柄。
static CWnd* PASCAL GetOpenClipboardWindow();
如果函数成功,则返回当前打开了剪贴板的窗口的句柄;否则返回 NULL
。
检索指向窗口所有者的指针。
CWnd* GetOwner() const;
一个指向 CWnd
对象的指针。
如果窗口没有所有者,则默认会返回指向父窗口对象的指针。 请注意,所有者和被拥有者之间的关系在父子级别方面存在多种重要差别。 例如,具有父级的窗口局限于其父窗口的工作区。 被拥有窗口可以在桌面上的任何位置绘制。
此函数的所有权概念不同于 GetWindow
的所有权概念。
调用此函数可获取指向子窗口的父窗口(如果有)的指针。
CWnd* GetParent() const;
请参阅 Windows SDK 中 GetParent
的“返回值”部分。
GetParent
函数返回指向直接父级(如果存在)的指针。 相反,GetParentOwner
函数返回指向最直接父窗口或非子窗口(没有 WS_CHILD
样式)的所有者窗口的指针。 如果子窗口包含子窗口,则 GetParent
和 GetParentOwner
将返回不同的结果。
调用此成员函数可检索父框架窗口。
CFrameWnd* GetParentFrame() const;
如果成功,则返回指向框架窗口的指针;否则返回 NULL
。
成员函数向上搜索父链,直到找到 CFrameWnd
(或派生类)对象。
调用此成员函数可获取指向子窗口的父窗口或所有者窗口的指针。
CWnd* GetParentOwner() const;
一个指向 CWnd
对象的指针。 如果 CWnd
对象未附加到该句柄,则会创建并附加一个临时 CWnd
对象。 该指针可能是暂时性的,不应存储它以供稍后使用。
GetParentOwner
返回指向最直接父窗口或非子窗口(没有 WS_CHILD
样式)的所有者窗口的指针。 可以使用 SetOwner
设置当前所有者窗口。 默认情况下,窗口的父级是它的所有者。
相反,GetParent
函数返回指向直接父级的指针,无论该父级是否为子窗口。 如果子窗口包含子窗口,则 GetParent
和 GetParentOwner
将返回不同的结果。
调用此成员函数可获取 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 控件编程一文。
获取与此窗口相关联的呈现目标。
CHwndRenderTarget* GetRenderTarget();
指向呈现目标的指针,或 NULL
。
返回 m_hWnd
;如果 this
指针是 NULL
,则返回 NULL
。
HWND GetSafeHwnd() const;
返回窗口的窗口句柄。 如果NULL
CWnd
窗口未附加到窗口,或者该窗口与指针一起使用NULL
CWnd
,则返回。
请参阅 CWnd::SubclassWindow
的示例。
调用此成员函数可检索应该用于对话框或其他模式窗口的所有者窗口。
static CWnd* GetSafeOwner(
CWnd* pParent = NULL,
HWND* pWndTop = NULL);
pParent
指向父 CWnd
窗口的指针。 可为 NULL
。
pWndTop
指向当前位于顶层的窗口的指针。 可为 NULL
。
指向给定窗口的安全所有者的指针。
安全所有者是 pParent
的第一个非子级父窗口。 如果 pParent
为 NULL
,则线程的主窗口(通过 AfxGetMainWnd
检索)用于查找所有者。
备注
框架本身使用此函数来确定未指定所有者的对话框和属性表的正确所有者窗口。
调用此成员函数可获取指向指定的同级滚动条或拆分窗口的指针。
virtual CScrollBar* GetScrollBarCtrl(int nBar) const;
nBar
指定滚动条的类型。 该参数可采用以下值之一:
SB_HORZ
检索水平滚动条的位置。SB_VERT
检索垂直滚动条的位置。
返回同级滚动条控件;如果没有此类控件,则返回 NULL
。
无法对在创建窗口期间设置 WS_HSCROLL
或 WS_VSCROLL
位时创建的滚动条运行此成员函数。 此函数的 CWnd
实现只返回 NULL
。 派生类(例如 CView
)实现所述的功能。
检索有关指定滚动条的信息。
BOOL GetScrollBarInfo(
LONG idObject,
PSCROLLBARINFO psbi) const;
idObject
指定菜单对象。 有关可能值的列表,请参阅 GetScrollBarInfo
。
psbi
指向接收信息的 SCROLLBARINFO
结构的指针。
如果函数成功,则为非零值;否则为
此成员函数模拟 GetScrollBarInfo
函数的功能,如 Windows SDK 中所述。
调用此成员函数可检索 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_PAGE
、SIF_POS
、SIF_TRACKPOS
和 SIF_RANGE
的组合。 有关 nMask
值的详细信息,请参阅 SCROLLINFO
。
如果消息检索了任何值,则返回值为 TRUE
。 否则为 FALSE
。
GetScrollInfo
允许应用程序使用 32 位滚动位置。
SCROLLINFO
结构包含有关滚动条的信息,包括最小和最大滚动位置、页面大小以及滚动框 (Thumb) 的位置。 若要详细了解如何更改结构默认值,请参阅 Windows SDK 中的 SCROLLINFO
结构主题。
指示滚动条位置的 MFC Windows 消息处理程序 CWnd::OnHScroll 和 CWnd::OnVScroll 仅提供 16 位位置数据。 GetScrollInfo
和 SetScrollInfo
提供 32 位滚动条位置数据。 因此,应用程序可以在处理 CWnd::OnHScroll
或 CWnd::OnVScroll
以获取 32 位滚动条位置数据时调用 GetScrollInfo
。
调用此成员函数可检索滚动条的最大滚动位置。
int GetScrollLimit(int nBar);
nBar
指定滚动条的类型。 该参数可采用以下值之一:
SB_HORZ
检索水平滚动条的滚动限制。SB_VERT
检索垂直滚动条的滚动限制。
如果成功,则指定滚动条的最大位置;否则指定 0。
检索滚动条的滚动框的当前位置。
int GetScrollPos(int nBar) const;
nBar
指定要检查的滚动条。 该参数可采用以下值之一:
SB_HORZ
检索水平滚动条的位置。SB_VERT
检索垂直滚动条的位置。
如果成功,则指定滚动框在滚动条中的当前位置;否则指定 0。
当前位置是一个相对值,取决于当前滚动范围。 例如,如果滚动范围为 50 到 100,并且滚动框在滚动条的中间,则当前位置为 75。
将给定滚动条的当前最小和最大滚动条位置复制到 lpMinPos
和 lpMaxPos
指定的位置。
void GetScrollRange(
int nBar,
LPINT lpMinPos,
LPINT lpMaxPos) const;
nBar
指定要检查的滚动条。 该参数可采用以下值之一:
SB_HORZ
检索水平滚动条的位置。SB_VERT
检索垂直滚动条的位置。
lpMinPos
指向要接收最小位置的整数变量。
lpMaxPos
指向要接收最大位置的整数变量。
如果 CWnd
没有滚动条,则 GetScrollRange
成员函数会将 0 复制到 lpMinPos
和 lpMaxPos
。
标准滚动条的默认范围为 0 到 100。 滚动条控件的默认范围为空(两个值均为 0)。
返回当前窗口样式。
DWORD GetStyle() const;
窗口的样式。 有关 MFC 中使用的窗口样式的详细信息,请参阅窗口样式。
允许应用程序访问控件菜单以进行复制和修改。
CMenu* GetSystemMenu(BOOL bRevert) const;
bRevert
指定要执行的操作。 如果 bRevert
为 FALSE
,则 GetSystemMenu
返回当前使用的控件菜单的副本的句柄。 此副本最初与控件菜单相同,但可以修改。 如果 bRevert
为 TRUE
,则 GetSystemMenu
会将控件菜单重置为默认状态。 将销毁可能已修改的先前控件菜单(如果有)。 在这种情况下,返回值是未定义的。
如果 bRevert
为 FALSE
,则标识控件菜单的副本。 如果 bRevert
为 TRUE
,则返回值是未定义的。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
任何不使用 GetSystemMenu
来创建自身控件菜单副本的窗口都会收到标准控件菜单。
可将 GetSystemMenu
成员函数返回的指针与 CMenu::AppendMenu
、CMenu::InsertMenu
或 CMenu::ModifyMenu
函数结合使用以更改控件菜单。
控件菜单最初包含使用各种 ID 值(例如 SC_CLOSE
、SC_MOVE
和 SC_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
检索有关指定标题栏的信息。
BOOL GetTitleBarInfo(PTITLEBARINFO pti) const;
pti
指向接收信息的 TITLEBARINFO
结构的指针。
此成员函数模拟 GetTitleBarInfo
函数的功能,如 Windows SDK 中所述。
调用此成员函数可检索窗口的顶级框架窗口(如果有)。
CFrameWnd* GetTopLevelFrame() const;
标识窗口的顶级框架窗口。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
如果 CWnd
没有附加的窗口,或者其顶级父级不是 CFrameWnd
派生对象,则此函数将返回 NULL
。
调用此成员函数可检索顶级窗口。
CWnd* GetTopLevelOwner() const;
标识顶级窗口。 返回的指针可能是暂时性的,不应存储它以供稍后使用。
顶级窗口是属于桌面子级的窗口。 如果 CWnd
没有附加的窗口,则此函数将返回 NULL
。
调用此成员函数可检索窗口的顶级父级。
CWnd* GetTopLevelParent() const;
标识窗口的顶级父级窗口。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
GetTopLevelParent
类似于 GetTopLevelFrame
和 GetTopLevelOwner
;但是,它会忽略设置为当前所有者窗口的值。
搜索属于 CWnd
的顶级子窗口。
CWnd* GetTopWindow() const;
标识子窗口的 CWnd
链接列表中的顶级子窗口。 如果不存在子窗口,则值为 NULL
。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
如果 CWnd
没有子级,则此函数将返回 NULL
。
检索完全包围更新区域的最小矩形的坐标。
BOOL GetUpdateRect(
LPRECT lpRect,
BOOL bErase = FALSE);
lpRect
指向接收包围更新区域的更新范围的客户端坐标的 CRect
对象或 RECT
结构。
将此参数设置为 NULL
可确定 CWnd
中是否存在更新区域。 如果 lpRect
为 NULL
,则 GetUpdateRect
成员函数将在更新区域存在时返回非零值;如果不存在更新区域,则返回 0。 这提供了一种方式来确定是否从无效区域生成了 WM_PAINT
消息。 不要在 Windows 3.0 和更低版本中将此参数设置为 NULL
。
bErase
指定是否要擦除更新区域中的背景。
指定更新区域的状态。 如果更新区域不为空,则该值不为零;否则为 0。
如果 lpRect
参数设置为 NULL
,当存在更新区域时,返回值不为零;否则为 0。
如果 CWnd
是使用 CS_OWNDC
样式创建的,并且映射模式不是 MM_TEXT
,则 GetUpdateRect
成员函数将以逻辑坐标形式指定矩形。 否则,GetUpdateRect
以客户端坐标形式指定矩形。 如果没有更新区域,GetUpdateRect
会将矩形设置为空(将所有坐标设置为 0)。
bErase
参数指定 GetUpdateRect
是否应擦除更新区域的背景。 如果 bErase
为 TRUE
并且更新区域不为空,则擦除背景。 若要擦除背景,GetUpdateRect
会发送 WM_ERASEBKGND
消息。
BeginPaint
成员函数检索的更新矩形与 GetUpdateRect
成员函数检索的更新矩形相同。
BeginPaint
成员函数自动验证更新区域,因此在调用 BeginPaint
后立即对 GetUpdateRect
进行任何调用都会检索一个空的更新区域。
将更新区域检索到 pRgn
标识的区域中。
int GetUpdateRgn(
CRgn* pRgn,
BOOL bErase = FALSE);
pRgn
标识更新区域。
bErase
指定是否擦除背景并绘制子窗口的非工作区。 如果值为 FALSE
,则不绘制。
指定一个短整数标志,用于指示生成的区域的类型。 值可以采用以下任何一项:
SIMPLEREGION
该区域没有重叠的边框。COMPLEXREGION
该区域有重叠的边框。NULLREGION
该区域为空。ERROR
未创建任何区域。
此区域的坐标相对于左上角(客户端坐标)。
BeginPaint
成员函数自动验证更新区域,因此在调用 BeginPaint
后立即对 GetUpdateRgn
进行任何调用都会检索一个空的更新区域。
返回指向请求的窗口的指针;如果不存在此窗口,则返回 NULL
。
CWnd* GetWindow(UINT nCmd) const;
*nCmd*
指定 CWnd
和返回的窗口之间的关系。 可以采取以下值之一:
GW_CHILD
标识CWnd
的第一个子窗口。GW_HWNDFIRST
如果CWnd
是子窗口,则返回第一个同级窗口。 否则,返回列表中的第一个顶级窗口。GW_HWNDLAST
如果CWnd
是子窗口,则返回最后一个同级窗口。 否则,返回列表中的最后一个顶级窗口。GW_HWNDNEXT
返回窗口管理器列表中的下一个窗口。GW_HWNDPREV
返回窗口管理器列表中的上一个窗口。GW_OWNER
标识CWnd
所有者。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
调用此成员函数可检索与窗口关联的帮助上下文标识符(如果有)。
DWORD GetWindowContextHelpId() const;
帮助上下文标识符。 如果窗口没有帮助上下文,则返回 0。
调用此成员函数可检索关联的子窗口数量。
long GetWindowedChildCount();
与 CWnd
对象关联的子窗口数量。
检索整个窗口的显示上下文,包括标题栏、菜单和滚动条。
CDC* GetWindowDC();
如果该函数成功,则标识给定窗口的显示上下文;否则返回 NULL
。
返回的指针可能是暂时性的,不应存储它以供稍后使用。 每次成功调用 GetWindowDC
后都应调用 ReleaseDC
一次。
窗口显示上下文允许在 CWnd
中的任何位置进行绘制,因为上下文的原点是 CWnd
的左上角,而不是工作区。
每次检索上下文时,都会将默认属性分配到显示上下文。 以前的属性会丢失。
GetWindowDC
用于 CWnd
非工作区域内的特殊绘制效果。 不建议在任何窗口的非工作区中进行绘制。
GetSystemMetrics
Windows 函数可用于检索非工作区各个部分(例如标题栏、菜单和滚动条)的尺寸。
绘制完成后,必须调用 ReleaseDC
成员函数来释放显示上下文。 由于可同时打开的设备上下文数量有限制,无法释放显示上下文会严重影响应用程序请求的绘制。
检索有关窗口的信息。
BOOL GetWindowInfo(PWINDOWINFO pwi) const;
pwi
指向 WINDOWINFO
结构的指针。
此成员函数模拟 GetWindowInfo
函数的功能,如 Windows SDK 中所述。
检索关联的无窗口子窗口数量。
long GetWindowlessChildCount();
与 CWnd
对象关联的无窗口子窗口数量。
检索窗口的显示状态以及正常(已还原)、最小化和最大化位置。
BOOL GetWindowPlacement(WINDOWPLACEMENT* lpwndpl) const;
lpwndpl
指向接收显示状态和位置信息的 WINDOWPLACEMENT
结构。
如果该函数成功,则为非 0;否则为 0。
此函数检索的 WINDOWPLACEMENT
结构的 flags
成员始终为 0。 如果 CWnd
已最大化,则 WINDOWPLACEMENT
的 showCmd
成员为 SW_SHOWMAXIMIZED
。 如果窗口已最小化,则该成员为 SW_SHOWMINIMIZED
。 否则为 SW_SHOWNORMAL
。
将 CWnd
对象的边框尺寸复制到 lpRect
指向的结构。
void GetWindowRect(LPRECT lpRect) const;
lpRect
指向接收屏幕左上角和右下角坐标的 CRect
对象或 RECT
结构。
尺寸以相对于显示屏左上角的屏幕坐标指定。 包括标题栏、边框和滚动条(如果存在)的尺寸。
调用此成员函数可获取窗口的窗口区域。
int GetWindowRgn(HRGN hRgn)const;
hRgn
窗口区域的句柄。
返回值指定函数获取的区域的类型。 可以为下列值之一:
NULLREGION
该区域为空。SIMPLEREGION
该区域是单个矩形。COMPLEXREGION
该区域是多个矩形。ERROR
发生错误;该区域不受影响。
窗口区域确定了操作系统允许在窗口中的哪个区域绘制。 操作系统不会显示位于窗口区域外部的窗口的任何部分。
窗口的窗口区域坐标相对于窗口的左上角,而不是窗口的工作区。
若要设置窗口的窗口区域,请调用 CWnd::SetWindowRgn
。
将 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
对象标题栏标题的长度。
int GetWindowTextLength() const;
指定文本长度(以字符为单位),不包括任何 null 结尾的字符。 如果不存在此类文本,则值为 0。
如果 CWnd
是控件,则 GetWindowTextLength
成员函数返回控件中文本而不是标题栏的长度。
此成员函数导致将 WM_GETTEXTLENGTH
消息发送到 CWnd
对象。
请参阅 CWnd::SetWindowText
的示例。
通过从显示屏幕中移除来隐藏插入符号。
void HideCaret();
尽管插入点不再可见,但可以使用 ShowCaret
成员函数再次显示它。 隐藏插入点不会销毁其当前形状。
隐藏是累积性操作。 如果 HideCaret
已连续调用五次,则必须调用 ShowCaret
成员函数五次才能显示插入点。
突出显示顶级(菜单栏)菜单项或取消其突出显示。
BOOL HiliteMenuItem(
CMenu* pMenu,
UINT nIDHiliteItem,
UINT nHilite);
pMenu
标识包含要突出显示的项的顶级菜单。
nIDHiliteItem
根据 nHilite
参数的值指定要突出显示的菜单项。
nHilite
指定是要突出显示菜单项还是取消突出显示。 它可以是 MF_HILITE
或 MF_UNHILITE
与 MF_BYCOMMAND
或 MF_BYPOSITION
的组合。 可以使用按位 OR
运算符来组合值。 这些值将具有以下含义:
MF_BYCOMMAND
将nIDHiliteItem
解释为菜单项 ID(默认解释)。MF_BYPOSITION
将nIDHiliteItem
解释为菜单项的从零开始的偏移量。MF_HILITE
突出显示项。 如果未指定此值,则取消项的突出显示。MF_UNHILITE
取消项的突出显示。
指定是否已突出显示菜单项。 如果已突出显示项,则返回非零值;否则返回 0。
MF_HILITE
和 MF_UNHILITE
标志只能与此成员函数结合使用;它们不能与 CMenu::ModifyMenu
成员函数结合使用。
调用此成员函数可调用 HTMLHelp 应用程序。
virtual void HtmlHelp(
DWORD_PTR dwData,
UINT nCmd = 0x000F);
dwData
指定其他数据。 使用的值取决于 nCmd
参数的值。
nCmd
指定请求的帮助的类型。 有关可能值的列表及其如何影响 dwData
参数,请参阅 Windows SDK 的“HTML 帮助 API 参考”中所述的 uCommand
参数。
有关详细信息,请参阅CWinApp::HtmlHelp
。
由框架调用以初始化窗口的动态布局。
void InitDynamicLayout();
请勿直接调用此方法。
使 CWnd
的整个工作区失效。
void Invalidate(BOOL bErase = TRUE);
bErase
指定是否要擦除更新区域中的背景。
当下一条 WM_PAINT
消息出现时,工作区将标记为可绘制。 还可以在 WM_PAINT
消息出现之前通过 ValidateRect
或 ValidateRgn
成员函数验证区域。
bErase
参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bErase
为 TRUE
,则在调用 BeginPaint
成员函数时擦除背景;如果 bErase
为 FALSE
,则背景将保持不变。 对于更新区域的任何部分,如果 bErase
为 TRUE
,则会擦除整个区域(而不仅仅是给定部分)中的背景。
每当 CWnd
更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT
消息。
请参阅 CWnd::UpdateWindow
的示例。
通过将给定矩形添加到 CWnd
更新区域,使给定矩形中的工作区失效。
void InvalidateRect(
LPCRECT lpRect,
BOOL bErase = TRUE);
lpRect
指向包含要添加到更新区域的矩形(以客户端坐标表示)的 CRect
对象或 RECT
结构。 如果 lpRect
为 NULL
,则将整个工作区添加到该区域。
bErase
指定是否要擦除更新区域中的背景。
在发送下一条 WM_PAINT
消息时,会将失效矩形连同更新区域中的所有其他区域一起标记为可绘制。 失效区域在更新区域中累积到在下一次发生 WM_PAINT
调用时处理该区域,或者该区域被 ValidateRect
或 ValidateRgn
成员函数验证为止。
bErase
参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bErase
为 TRUE
,则在调用 BeginPaint
成员函数时擦除背景;如果 bErase
为 FALSE
,则背景将保持不变。 对于更新区域的任何部分,如果 bErase
为 TRUE
,则会擦除整个区域(而不仅仅是给定部分)中的背景。
每当 CWnd
更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT
消息。
通过将给定区域中的工作区添加到 CWnd
的当前更新区域来使其失效。
void InvalidateRgn(
CRgn* pRgn,
BOOL bErase = TRUE);
pRgn
指向 CRgn
对象的指针,该对象标识要添加到更新区域的区域。 假设该区域具有客户端坐标。 如果此参数为 NULL
,则将整个工作区添加到更新区域。
bErase
指定是否要擦除更新区域中的背景。
在接下来发送 WM_PAINT
消息时,会将失效区域以及更新区域中的所有其他区域标记为可绘制。 失效区域在更新区域中累积到在下一次发送 WM_PAINT
消息时处理该区域,或者该区域被 ValidateRect
或 ValidateRgn
成员函数验证为止。
bErase
参数指定在处理更新区域时是否要擦除更新区域中的背景。 如果 bErase
为 TRUE
,则在调用 BeginPaint
成员函数时擦除背景;如果 bErase
为 FALSE
,则背景将保持不变。 对于更新区域的任何部分,如果 bErase
为 TRUE
,则会擦除整个区域(而不仅仅是给定部分)中的背景。
每当 CWnd
更新区域不为空并且该窗口的应用程序队列中没有其他消息时,Windows 就会发送一条 WM_PAINT
消息。
给定区域必须事先已由 region 函数之一创建。
调用此成员函数可在 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 控件编程一文。
指示 pWnd
指定的窗口是 CWnd
的子窗口还是其他直接后代。
BOOL IsChild(const CWnd* pWnd) const;
pWnd
标识要测试的窗口。
指定函数的结果。 如果 pWnd
标识的窗口是 CWnd
的子窗口,则值不为零;否则为 0。
如果 CWnd
对象位于从原始弹出窗口到子窗口的父窗口链中,则子窗口是 CWnd
的直接后代。
确定是否启用 D2D 支持。
BOOL IsD2DSupportEnabled();
如果已启用该功能,则返回 TRUE
;否则返回 FALSE
。
调用此成员函数可确定给定的消息是否用于无模式对话框;如果是,则此函数将处理消息。
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
处理的消息传递给 TranslateMessage
或 DispatchMessage
Windows 函数,因为该消息已处理过。
确定按钮控件的旁边是否有复选标记。
UINT IsDlgButtonChecked(int nIDButton) const;
nIDButton
指定按钮控件的整数标识符。
如果检查给定的控件,则返回非零值;如果不检查,则返回 0。 只能选中单选按钮和复选框。 对于三态按钮,如果按钮不确定,则返回值可为 2。 此成员函数为按钮返回 0。
如果按钮是三状态控件,则成员函数确定它为灰显、已选中还是两者都不是。
确定是否在此窗口上启用动态布局。 如果启用动态布局,则子窗口的位置和大小可以在用户调整父窗口大小时进行更改。
BOOL IsDynamicLayoutEnabled() const;
如果启用了动态布局,则返回 TRUE
;否则返回 FALSE
。
指定 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
是否具有触摸支持。
BOOL IsTouchWindow() const;
如果 CWnd
支持触摸,则返回 TRUE
;否则返回 FALSE
。
指定是否为鼠标和键盘输入启用 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;
}
确定给定窗口的可见性状态。
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
是否已最大化。
BOOL IsZoomed() const;
如果 CWnd
已最大化,则返回非零值;否则返回 0。
终止先前在调用 SetTimer
后由 nIDEvent
标识的计时器事件。
BOOL KillTimer(UINT_PTR nIDEvent);
nIDEvent
传递给 SetTimer
的计时器事件的值。
指定函数的结果。 如果事件已终止,则值不为零。 如果 KillTimer
成员函数找不到指定的计时器事件,则值为 0。
不会从消息队列中删除与计时器关联的挂起 WM_TIMER
消息。
请参阅 CWnd::SetTimer
的示例。
由框架调用,以从资源文件加载动态布局信息。
BOOL LoadDynamicLayoutResource(LPCTSTR lpszResourceName);
lpszResourceName
包含此窗口所需的动态布局信息的资源名称。
如果函数运行成功,则为非零。 如果发生故障,则为 0。
请勿直接调用此方法。
在给定的窗口中禁用绘制。
BOOL LockWindowUpdate();
如果函数运行成功,则为非零。 如果发生故障或 LockWindowUpdate
函数已用于锁定另一窗口,则返回值为 0。
无法移动已锁定的窗口。 一次只能锁定一个窗口。 若要解锁使用 LockWindowUpdate
锁定的窗口,请调用 UnlockWindowUpdate
。
如果包含锁定窗口(或任何锁定的子窗口)的应用程序调用 GetDC
、GetDCEx
或 BeginPaint
Windows 函数,则被调用函数将返回可见区域为空的设备上下文。 这种情况会一直发生到应用程序通过调用 UnlockWindowUpdate
成员函数解锁窗口为止。
当窗口更新处于锁定状态时,系统会在与锁定窗口关联的设备上下文中跟踪任何绘制操作的边框。 重新启用绘制后,此边框会在锁定的窗口及其子窗口中失效,以强制最终的 WM_PAINT
消息更新屏幕。 如果在锁定窗口更新时未发生任何绘制,则不会使任何区域失效。
LockWindowUpdate
成员函数不会隐藏给定的窗口,也不会清除 WS_VISIBLE
样式位。
附加到此 CWnd
的 Windows 窗口的句柄。
HWND m_hWnd;
m_hWnd
数据成员是 HWND
类型的公共变量。
将一组点从 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
结构数。
创建并显示一个窗口,其中包含应用程序提供的消息和标题,以及消息框样式列表中所述的预定义图标和按钮组合。
int MessageBox(
LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK);
lpszText
指向 CString
对象或以 null 结尾的字符串,其中包含要显示的消息。
lpszCaption
指向用于消息框标题的 CString
对象或以 null 结尾的字符串。 如果 lpszCaption
为 NULL
,则使用默认标题“错误”。
nType
指定消息框的内容和行为。
此方法利用 Windows SDK 中定义的 MessageBox
函数。 此方法返回调用此函数后的结果。
请使用全局函数 AfxMessageBox
而不是此成员函数在应用程序中实现消息框。
下面显示了可在消息框中使用的各种系统图标:
图标 | 宏 |
---|---|
MB_ICONHAND 、MB_ICONSTOP 和 MB_ICONERROR |
|
MB_ICONQUESTION | |
MB_ICONEXCLAMATION 和 MB_ICONWARNING | |
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);
}
调用此成员函数可修改窗口的样式。
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);
}
调用此成员函数可修改窗口的扩展样式。
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;
}
更改位置和尺寸。
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
对象,x
和 y
参数相对于屏幕的左上角。 对于子 CWnd
对象,它们相对于父窗口工作区的左上角。
MoveWindow
函数发送 WM_GETMINMAXINFO
消息。 处理此消息使 CWnd
有机会修改最大和最小可能窗口的默认值。 如果 MoveWindow
成员函数的参数超过这些值,可将这些值替换为 WM_GETMINMAXINFO
处理程序中的最小值或最大值。
请参阅 CWnd::ClientToScreen
的示例。
向系统发出信号,指出发生了预定义事件。 如果任何客户端应用程序为该事件注册了挂钩函数,系统将调用客户端的挂钩函数。
void NotifyWinEvent(
DWORD event,
LONG idObjectType,
LONG idObject);
event
指定发生的事件。 此值必须是事件常量之一。
idObjectType
标识生成了事件的对象类型。 此值是预定义的对象标识符之一,或自定义的对象 ID 值。
idObject
标识事件是由对象还是对象的子元素生成的。 如果此值为 CHILDID_SELF
,则事件是由对象本身生成的。 否则,此值是生成了事件的元素的子 ID。
此成员函数模拟 NotifyWinEvent
函数的功能,如 Windows SDK 中所述。
在激活或停用 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架对任务的正在激活的所有顶级窗口,以及任务的正在停用的所有顶级窗口调用此成员函数。
afx_msg void OnActivateApp(
BOOL bActive,
DWORD dwThreadID);
bActive
指定是正在激活还是停用 CWnd
。 TRUE
表示正在激活 CWnd
。 FALSE
表示正在停用 CWnd
。
dwThreadID
指定线程 ID 的值。 如果 bActive
为 TRUE
,则 dwThreadID
标识拥有正在停用的 CWnd
的线程。 如果 bActive
为 FALSE
,则 dwThreadID
标识拥有正在激活的 CWnd
的线程。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数以从包含 OLE 控件的窗口中获取环境属性值。
virtual BOOL OnAmbientProperty(
COleControlSite* pSite,
DISPID dispid,
VARIANT* pvar);
pSite
指向请求了环境属性的控件站点的指针。
dispid
请求的环境属性的调度 ID。
pvar
指向调用方分配的 VARIANT
结构的指针,将通过该结构返回环境属性的值。
如果支持该环境属性,则返回 TRUE
;否则返回 FALSE
。
重写此函数可更改由 OLE 控件容器返回到其控件的默认环境属性值。 任何未由重写函数处理的环境属性请求应转发到基类实现。
当用户生成应用程序命令事件时,框架将调用此成员函数。 当用户单击应用程序命令按钮或键入应用程序命令键时,会发生此类事件。
afx_msg void OnAppCommand(
CWnd* pWnd,
UINT nCmd,
UINT nDevice,
UINT nKey);
pWnd
[in] 指向 CWnd
对象的指针,该对象表示用户单击命令按钮或按下命令键时所在的窗口。 此窗口可以是接收消息的窗口的子窗口。
nCmd
[in] 指示应用程序命令。 有关可能值的列表,请参阅 WM_APPCOMMAND
的 lParam
参数的 cmd
部分下的命令。
nDevice
[in] 生成了输入事件的输入设备。 有关可能值的列表,请参阅 WM_APPCOMMAND
的 lParam
参数的 uDevice
部分下的设备。
nKey
[in] 指示任何按下的虚拟键,例如 CTRL 键或鼠标左键。 有关可能值的列表,请参阅 WM_APPCOMMAND
的 lParam
参数的 dwKeys
部分下的键。 有关详细信息,请参阅关于鼠标输入中的“消息参数”子标题。
此方法接收 Windows SDK 中所述的 WM_APPCOMMAND
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当剪贴板包含 CF_OWNERDISPLAY
格式的数据句柄时(即剪贴板所有者将显示剪贴板内容时),框架会调用此成员函数。
afx_msg void OnAskCbFormatName(
UINT nMaxCount,
LPTSTR lpszString);
nMaxCount
指定要复制的最大字节数。
lpszString
指向要将格式名称副本存储到的缓冲区。
剪贴板所有者应为其格式提供名称。
重写此成员函数并将 CF_OWNERDISPLAY
格式的名称复制到指定的缓冲区,不超过指定的最大字节数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来告知 CWnd
取消任何内部模式。
afx_msg void OnCancelMode();
如果 CWnd
对象具有焦点,则在显示对话框或消息框时调用其 OnCancelMode
成员函数。 这使 CWnd
有机会取消鼠标捕获等模式。
默认实现通过调用 ReleaseCapture
Windows 函数做出响应。 在派生类中重写此成员函数以处理其他模式。
框架调用此成员函数来通知正在丢失鼠标捕获的窗口。
afx_msg void OnCaptureChanged(CWnd* pWnd);
pWnd
指向获取鼠标捕获的窗口的指针
即使窗口本身调用 ReleaseCapture
,它也会收到此消息。 应用程序不应尝试设置鼠标捕获来响应此消息。 收到此消息时,窗口应根据需要重绘自身,以反映新的鼠标捕获状态。
有关 ReleaseCapture
Windows 函数的信息,请参阅 Windows SDK。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架针对剪贴板查看器链中的每个窗口调用此成员函数,以通知它正在从链中删除某个窗口。
afx_msg void OnChangeCbChain(
HWND hWndRemove,
HWND hWndAfter);
hWndRemove
指定要从剪贴板查看器链中删除的窗口句柄。
hWndAfter
指定要从剪贴板查看器链中删除的窗口后面的窗口句柄。
每个接收 OnChangeCbChain
调用的 CWnd
对象应使用 SendMessage
Windows 函数将 WM_CHANGECBCHAIN
消息发送到剪贴板查看器链中的下一个窗口(SetClipboardViewer
返回的句柄)。 如果 hWndRemove
是链中的下一个窗口,则 hWndAfter
指定的窗口将成为下一个窗口,剪贴板消息将传递给该窗口。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在应更改用户界面 (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 中所述。
将击键转换为非系统字符时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当具有 LBS_WANTKEYBOARDINPUT
样式的列表框向其所有者发送 WM_CHARTOITEM
消息以响应 WM_CHAR
消息时调用。
afx_msg int OnCharToItem(
UINT nChar,
CListBox* pListBox,
UINT nIndex);
nChar
指定用户按下的键的值。
pListBox
指定指向列表框的指针。 它可能是暂时性指针。
nIndex
指定当前插入点位置。
框架调用此成员函数来指定应用程序为响应调用而执行的操作。 返回值 -2 表示应用程序处理了选择项的所有方面并且不需要列表框的进一步操作。 返回值 -1 表示列表框应执行默认操作以响应击键。 0 或更大的返回值指定列表框中项的从零开始的索引,并指示列表框应对给定项的击键执行默认操作。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果 CWnd
对象是多文档接口 (MDI) 子窗口,则当用户单击窗口的标题栏或者当激活、移动窗口或调整其大小时,框架会调用 OnChildActivate
。
afx_msg void OnChildActivate();
此窗口的父窗口在收到适用于此窗口的通知消息时会调用此成员函数由。
virtual BOOL OnChildNotify(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
message
发送到父窗口的 Windows 消息编号。
wParam
与消息关联的 wparam。
lParam
与消息关联的 lparam。
pLResult
指向要从父级的窗口过程返回的值的指针。 如果不需要返回值,则此指针将是 NULL
。
如果此窗口负责处理发送到其父级的消息,则返回非零值;否则返回 0。
切勿直接调用此成员函数。
此成员函数的默认实现返回 0,即父级应处理消息。
重写此成员函数可扩展控件响应通知消息的方式。
当剪贴板的内容已更改时,框架会调用此成员函数。
afx_msg void OnClipboardUpdate();
框架调用此成员函数来发出要终止 CWnd
或应用程序的信号。
afx_msg void OnClose();
默认实现调用 DestroyWindow
。
当非工作区的呈现策略已更改时,框架会调用此成员。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户从菜单中选择项、子控件发送通知消息或转换加速键击时,框架将调用此成员函数。
virtual BOOL OnCommand(
WPARAM wParam,
LPARAM lParam);
wParam
wParam
的低位字标识菜单项、控件或加速键的命令 ID。 如果消息来自控件,则 wParam
的高位字指定通知消息。 如果消息来自加速键,则高位字为 1。 如果消息来自菜单,则高位字为 0。
lParam
如果消息来自控件,则标识发送消息的控件。 否则,lParam
为 0。
如果应用程序处理此消息,则它会返回非零值;否则返回 0。
OnCommand
处理控件通知和 ON_COMMAND
条目的消息映射,并调用相应的成员函数。
在派生类中重写此成员函数以处理 WM_COMMAND
消息。 除非调用基类 OnCommand
,否则重写不会处理消息映射。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当 Windows 检测到在 30 到 60 秒的间隔内,有超过 12.5% 的系统时间花费在内存压缩上时,框架将针对所有顶级窗口调用此成员函数。
afx_msg void OnCompacting(UINT nCpuTime);
nCpuTime
指定 Windows 当前花费在内存压缩上的 CPU 时间与花费在执行其他操作上的 CPU 时间之比。 例如,8000h 表示有 50% 的 CPU 时间花费在内存压缩上。
这指示系统内存不足。
当 CWnd
对象收到此调用时,它应释放尽可能多的内存,同时考虑应用程序的当前活动级别,以及 Windows 中运行的应用程序总数。 应用程序可以调用 Windows 函数来确定有多少个应用程序正在运行。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来指定新项在已排序的所有者绘制子组合框或列表框中的相对位置。
afx_msg int OnCompareItem(
int nIDCtl,
LPCOMPAREITEMSTRUCT lpCompareItemStruct);
nIDCtl
发送了 WM_COMPAREITEM
消息的控件的标识符。
lpCompareItemStruct
包含指向 COMPAREITEMSTRUCT
数据结构的长指针,该结构包含组合框或列表框中两个项的标识符以及应用程序为这两个项提供的数据。
指示两个项的相对位置。 可以是以下任一值:
值 | 含义 |
---|---|
-1 | 项 1 排在项 2 之前。 |
0 | 项 1 和项 2 顺序相同。 |
1 | 项 1 排在项 2 之后。 |
如果使用 CBS_SORT
或 LBS_SORT
样式创建了组合框或列表框,则每当应用程序添加新项时,Windows 就会向组合框或列表框所有者发送 WM_COMPAREITEM
消息。
组合框或列表框中的两个项在 lpCompareItemStruct
指向的 COMPAREITEMSTRUCT
结构中重新排列。 OnCompareItem
应返回一个值,指示哪个项应出现在另一个项之前。 通常,Windows 会多次发出此调用,直到确定了新项的确切位置。
如果 COMPAREITEMSTRUCT
结构的 hwndItem
成员属于 CListBox
或 CComboBox
对象,则调用相应类的 CompareItem
虚拟函数。 在派生的 CListBox
或 CComboBox
类中重写 CComboBox::CompareItem
或 CListBox::CompareItem
以进行项比较。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当启用或禁用桌面窗口管理器 (DWM) 组合时,框架将针对所有顶级窗口调用此成员函数。
afx_msg void OnCompositionChanged();
此方法接收 Windows SDK 中所述的 WM_DWMCOMPOSITIONCHANGED
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户在窗口中单击鼠标右键(右键单击)时由框架调用。
afx_msg void OnContextMenu(
CWnd* pWnd,
CPoint pos);
pWnd
用户单击鼠标右键时所在的窗口的句柄。 此窗口可以是接收消息的窗口的子窗口。 有关处理此消息的详细信息,请参阅“注解”部分。
pos
单击鼠标时光标的位置,以屏幕坐标表示。
可以通过使用 TrackPopupMenu
显示上下文菜单来处理此消息。
如果不显示上下文菜单,则应将此消息传递给 DefWindowProc
函数。 如果你的窗口是子窗口,DefWindowProc
会将消息发送到父级。 否则,如果指定的位置在窗口的标题中,则 DefWindowProc
将显示默认上下文菜单。
框架调用此成员函数将数据从一个应用程序复制到另一个应用程序。
afx_msg BOOL OnCopyData(
CWnd* pWnd,
COPYDATASTRUCT* pCopyDataStruct);
pWnd
指向正在发送数据的 CWnd
对象的指针。
pCopyDataStruct
指向包含正在发送的数据的 COPYDATASTRUCT
结构的指针。
如果接收方应用程序成功接受数据,则返回 TRUE
。 否则返回 FALSE
。
传递的数据不能包含指向接收数据的应用程序无法访问的对象的指针,或对这种对象的引用。
复制数据时,数据不能由发送进程的另一个线程更改。
接收方应用程序应将数据视为只读。 参数 pCopyDataStruct
指向的结构仅在数据传输期间有效;但是,接收方应用程序不应释放与该结构关联的内存。
如果接收方应用程序需要在该函数返回后访问数据,则它必须将收到的数据复制到本地缓冲区。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当应用程序通过调用 Create
或 CreateEx
成员函数请求创建 Windows 窗口时,框架会调用此成员函数。
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
lpCreateStruct
指向包含有关正在创建的 CWnd
对象的信息的 CREATESTRUCT
结构。
OnCreate
必须返回 0 才能继续创建 CWnd
对象。 如果应用程序返回 -1,则会销毁窗口。
CWnd
对象在创建窗口之后、窗口可见之前接收此调用。 在 Create
或 CreateEx
成员函数返回之前调用 OnCreate
。
重写此成员函数可执行派生类的任何所需初始化。
CREATESTRUCT
结构包含用于创建窗口的参数的副本。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
即将绘制子控件时,框架会调用此成员函数。
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_EDIT
和 CTLCOLOR_MSGBOX
消息代码中设置画笔句柄,并调用 CDC::SetBkColor
函数来响应 CTLCOLOR_EDIT
代码。
不会对下拉组合框的列表框调用 OnCtlColor
,因为下拉列表框实际上是组合框的子级,而不是窗口的子级。 若要更改下拉列表框的颜色,请在 nCtlColor
参数中创建一个 CComboBox
,并在其中包含一个用于检查 CTLCOLOR_LISTBOX
的 OnCtlColor
重写。 在此处理程序中,必须使用 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;
}
调用 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来告知所有者绘制列表框或组合框的所有者该列表框或组合框已销毁,或者项已由 CComboBox::DeleteString
、CListBox::DeleteString
、CComboBox::ResetContent
或 CListBox::ResetContent
删除。
afx_msg void OnDeleteItem(
int nIDCtl,
LPDELETEITEMSTRUCT lpDeleteItemStruct);
nIDCtl
发送了 WM_DELETEITEM
消息的控件的标识符。
lpDeleteItemStruct
指定指向 DELETEITEMSTRUCT
数据结构的长指针,该结构包含有关已删除的列表框项的信息。
如果 DELETEITEMSTRUCT
结构的 hwndItem
成员属于组合框或列表框,则调用相应类的 DeleteItem
虚拟函数。 重写相应控件类的 DeleteItem
成员函数可删除项特定的数据。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来告知 CWnd
对象它正被销毁。
afx_msg void OnDestroy();
从屏幕中删除 CWnd
对象后调用 OnDestroy
。
OnDestroy
首先对正在销毁的 CWnd
调用,然后对已销毁的 CWnd
子窗口调用。 可以假设在 OnDestroy
运行时所有子窗口仍然存在。
如果正在销毁的 CWnd
对象是剪贴板查看器链的一部分(通过调用 SetClipboardViewer
成员函数来设置),则 CWnd
必须在从 OnDestroy
函数返回之前,通过调用 ChangeClipboardChain
成员函数将自身从剪贴板查看器链中删除。
通过调用 EmptyClipboard
Windows 函数清空剪贴板时,框架将对剪贴板所有者调用此成员函数。
afx_msg void OnDestroyClipboard();
框架调用此成员函数来向应用程序或设备驱动程序通知设备或计算机的硬件配置发生了更改。
afx_msg BOOL OnDeviceChange(
UINT nEventType,
DWORD_PTR dwData);
nEventType
一种事件类型。 有关可用值的说明,请参阅“注解”部分
dwData
包含事件特定数据的结构的地址。 其含义取决于给定的事件。
对于提供软件可控制功能(例如弹出和锁定)的设备,操作系统通常会发送 DBT_DEVICEREMOVEPENDING
消息,让应用程序和设备驱动程序正常结束其设备使用。
如果操作系统强行删除设备,它可能不会在执行此操作之前发送 DBT_DEVICEQUERYREMOVE
消息。
nEvent
参数可使用以下值之一:
DBT_DEVICEARRIVAL
设备已插入并且现在可用。DBT_DEVICEQUERYREMOVE
已请求设备删除权限。 任何应用程序都可以拒绝此请求并取消删除。DBT_DEVICEQUERYREMOVEFAILED
已取消设备删除请求。DBT_DEVICEREMOVEPENDING
即将删除设备。 不可拒绝。DBT_DEVICEREMOVECOMPLETE
已删除设备。DBT_DEVICETYPESPECIFIC
设备特定的事件。DBT_CONFIGCHANGED
当前配置已更改。DBT_DEVNODES_CHANGED
设备节点已更改。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户更改设备模式设置时,框架将针对所有顶级 CWnd
对象调用此成员函数。
afx_msg void OnDevModeChange(LPTSTR lpDeviceName);
lpDeviceName
指向在 Windows 初始化文件 WIN.INI
中指定的设备名称。
处理 WM_DEVMODECHANGE
消息的应用程序可以重新初始化其设备模式设置。 使用 Windows ExtDeviceMode
函数保存和还原设备设置的应用程序通常不处理此函数。
当用户从控制面板更改默认打印机时不会调用此函数。 在这种情况下,将调用 OnWinIniChange
函数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当剪贴板的内容更改时,框架将针对剪贴板查看器链中的每个窗口调用此成员函数。
afx_msg void OnDrawClipboard();
只有已通过调用 SetClipboardViewer
成员函数加入剪贴板查看器链的应用程序才需要响应此调用。
接收 OnDrawClipboard
调用的每个窗口都应调用 SendMessage
Windows 函数,以将 WM_DRAWCLIPBOARD
消息传递给剪贴板查看器链中的下一个窗口。 下一个窗口的句柄由 SetClipboardViewer
成员函数返回;可以修改该句柄以响应 OnChangeCbChain
成员函数调用。
由框架在需要获取要在 Windows 7 选项卡缩略图上或客户端上(进行应用程序速览)显示的位图时进行调用。
virtual void OnDrawIconicThumbnailOrLivePreview(
CDC& dc,
CRect rect,
CSize szRequiredThumbnailSize,
BOOL bIsThumbnail,
BOOL& bAlphaChannelSet);
dc
指定设备上下文。
rect
指定要呈现的区域的边框。
szRequiredThumbnailSize
指定目标缩略图的大小。 如果 bIsThumbnail
为 FALSE
,则应忽略。
bIsThumbnail
指定是否为图标缩略图或实时预览(速览)调用此方法。
bAlphaChannelSet
[out] 如果你的实现初始化在 dc
中选择的位图的 Alpha 通道,请将其设置为 TRUE
。
在派生类中重写此方法并在指定的设备上下文上绘制以自定义缩略图和速览。 如果 bThumbnail
为 TRUE
,则可忽略 szRequiredThumbnailSize
。 在这种情况下,应该知道绘制的是全大小位图(即覆盖整个工作区的位图)。 设备上下文 (dc
) 随附选定的 32 位位图。 默认实现将 WM_PRINT
连同 PRF_CLIENT
、PRF_CHILDREN
和 PRF_NONCLIENT
标志一起发送到此窗口。
当控件或菜单的视觉方面发生更改时,框架将对所有者绘制按钮控件、组合框控件、列表框控件或菜单的所有者调用此成员函数。
afx_msg void OnDrawItem(
int nIDCtl,
LPDRAWITEMSTRUCT lpDrawItemStruct);
nIDCtl
包含发送了 WM_DRAWITEM
消息的控件的标识符。 如果菜单发送了消息,则 nIDCtl
包含 0。
lpDrawItemStruct
指定指向 DRAWITEMSTRUCT
数据结构的长指针,该结构包含有关要绘制的项和所需绘制类型的信息。
DRAWITEMSTRUCT
结构的 itemAction
成员定义要执行的绘制操作。 此成员中的数据允许控件所有者确定所需的绘制操作。
在处理此消息后返回之前,应用程序应确保 DRAWITEMSTRUCT
结构的 hDC
成员所标识的设备上下文已还原到默认状态。
如果 hwndItem
成员属于 CButton
、CMenu
、CListBox
或 CComboBox 对象,则调用相应类的 DrawItem
虚拟函数。 重写相应控件类的 DrawItem
成员函数可绘制项。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户在一个已将自身注册为所放置文件的接收方的窗口上释放鼠标左键时,框架会调用此成员函数。
afx_msg void OnDropFiles(HDROP hDropInfo);
hDropInfo
指向描述放置的文件的内部数据结构的指针。 DragFinish
、DragQueryFile
和 DragQueryPoint
Windows 函数使用此句柄来检索有关放置的文件的信息。
通常,派生类将设计为支持放置的文件,并且在窗口构造期间会注册自身。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当应用程序更改 CWnd
对象的已启用状态时,框架会调用此成员函数。
afx_msg void OnEnable(BOOL bEnable);
bEnable
指定 CWnd
对象是已启用还是已禁用。 如果已启用 CWnd
,则此参数为 TRUE
;如果已禁用 CWnd
,则为 FALSE
。
在 EnableWindow
成员函数返回之前、窗口已启用状态(WS_DISABLED
样式位)更改之后调用 OnEnable
。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在 CWnd
对象从 OnQueryEndSession
成员函数调用返回非零值后,框架会调用此成员函数。
afx_msg void OnEndSession(BOOL bEnding);
bEnding
指定是否正在结束会话。 如果正在结束会话,则为 TRUE
;否则为 FALSE
。
OnEndSession
调用向 CWnd
对象告知是否正在实际结束会话。
如果 bEnding
为 TRUE
,则 Windows 可以在所有应用程序处理此调用并返回后随时终止。 因此,让应用程序在 OnEndSession
内部执行终止所需的所有任务。
当会话正在结束时,你无需调用 DestroyWindow
成员函数或 PostQuitMessage
Windows 函数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数以向应用程序的主窗口过程告知模式对话框或菜单正在进入空闲状态。
afx_msg void OnEnterIdle(
UINT nWhy,
CWnd* pWho);
nWhy
指定消息是因显示对话框还是菜单而生成的。 此参数可能是以下值之一:
MSGF_DIALOGBOX
由于正在显示对话框,系统处于空闲状态。MSGF_MENU
由于正在显示菜单,系统处于空闲状态。
pWho
指定指向对话框(如果 nWhy
为 MSGF_DIALOGBOX
)或包含显示的菜单的窗口(如果 nWhy
为 MSGF_MENU
)的指针。 此指针可能是暂时性的,不应存储它以供稍后使用。
在处理一条或多条先前消息后,当其队列中没有消息处于等待状态时,模式对话框或菜单将进入空闲状态。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
进入菜单模式循环后,框架会调用此成员函数。
afx_msg void OnEnterMenuLoop(BOOL bIsTrackPopupMenu);
bIsTrackPopupMenu
指定相关的菜单是否为弹出菜单。 如果该函数成功,则使用非零值;否则使用 0。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在受影响的窗口进入移动或大小调整模式循环后,框架会调用此成员函数一次。
afx_msg void OnEnterSizeMove();
此方法接收 Windows SDK 中所述的 WM_ENTERSIZEMOVE
通知。
当用户单击窗口的标题栏或大小调整边框,或者当窗口将 WM_SYSCOMMAND
消息传递给 CWnd::DefWindowProc
函数并且该消息的 wParam 参数指定 SC_MOVE
或 SC_SIZE
时,窗口将进入移动或大小调整模式循环。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
退出菜单模式循环后,框架会调用此成员函数。
afx_msg void OnExitMenuLoop(BOOL bIsTrackPopupMenu);
bIsTrackPopupMenu
指定相关的菜单是否为弹出菜单。 如果该函数成功,则使用非零值;否则使用 0。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在受影响的窗口退出移动或大小调整模式循环后,框架会调用此成员函数一次。
afx_msg void OnExitSizeMove();
此方法接收 Windows SDK 中所述的 WM_EXITSIZEMOVE
通知。
当用户单击窗口的标题栏或大小调整边框,或者当窗口将 WM_SYSCOMMAND
消息传递给 CWnd::DefWindowProc
函数并且该消息的 wParam
参数指定 SC_MOVE
或 SC_SIZE
时,窗口将进入移动或大小调整模式循环。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在应用程序更改字体资源池后,系统中的所有顶级窗口都会收到来自框架的 OnFontChange
调用。
afx_msg void OnFontChange();
在系统中添加或删除字体(例如,通过 AddFontResource
或 RemoveFontResource
Windows 函数)的应用程序应将 WM_FONTCHANGE
消息发送到所有顶级窗口。
若要发送此消息,请结合设置为 HWND_BROADCAST
的 hWnd
参数使用 SendMessage
Windows 函数。
针对控件进行调用,以便控件可以自己处理箭头键和 TAB 键输入。
afx_msg UINT OnGetDlgCode();
以下一个或多个值,指示应用程序处理的输入类型:
DLGC_BUTTON
按钮(泛型)。DLGC_DEFPUSHBUTTON
默认按钮。DLGC_HASSETSEL
EM_SETSEL
消息。DLGC_UNDEFPUSHBUTTON
不进行默认按钮处理。 (应用程序可将此标志与DLGC_BUTTON
结合使用,以指示它处理按钮输入但依赖系统进行默认按钮处理。)DLGC_RADIOBUTTON
单选按钮。DLGC_STATIC
静态控件。DLGC_WANTALLKEYS
所有键盘输入。DLGC_WANTARROWS
箭头键。DLGC_WANTCHARS
WM_CHAR
消息。DLGC_WANTMESSAGE
所有键盘输入。 应用程序将此消息传递给控件。DLGC_WANTTAB
TAB 键。
通常,Windows 处理 CWnd
控件的所有箭头键和 TAB 键输入。 通过重写 OnGetDlgCode
,CWnd
控件可以选择使用特定类型的输入来处理自身。
预定义控件类的默认 OnGetDlgCode
函数返回适用于每个类的代码。
每当 Windows 需要知道最大化位置或尺寸或者最小或最大跟踪大小时,框架都会调用此成员函数。
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
lpMMI
指向 MINMAXINFO
结构,该结构包含有关窗口的最大化大小和位置及其最小和最大跟踪大小的信息。 有关此结构的详细信息,请参阅 MINMAXINFO
结构。
最大化大小是当窗口的边框完全展开时的大小。 窗口的最大跟踪大小是使用边框来调整窗口大小所能达到的最大窗口大小。 窗口的最小跟踪大小是使用边框来调整窗口大小所能达到的最小窗口大小。
Windows 填充一个点数组,为各种位置和尺寸指定默认值。 应用程序可能会更改 OnGetMinMaxInfo
中的这些值。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
处理应用程序中的 F1 帮助(使用当前上下文)。
afx_msg void OnHelp();
有关详细信息,请参阅CWinApp::OnHelp
。
处理 ID_HELP_FINDER
和 ID_DEFAULT_HELP
命令。
afx_msg void OnHelpFinder();
有关详细信息,请参阅CWinApp::OnHelpFinder
。
处理 ID_HELP_INDEX
命令,并提供默认帮助主题。
afx_msg void OnHelpIndex();
有关详细信息,请参阅CWinApp::OnHelpIndex
。
当用户按 F1 键时,由框架调用。
afx_msg BOOL OnHelpInfo(HELPINFO* lpHelpInfo);
lpHelpInfo
指向 HELPINFO
结构的指针,该结构包含有关请求了其帮助的菜单项、控件、对话框或窗口的信息。
如果窗口具有键盘焦点或者菜单在窗口中处于活动状态,则返回 TRUE
。 如果没有任何窗口具有键盘焦点,则返回 FALSE
。
如果按 F1 时某个菜单处于活动状态,则将 WM_HELP
发送到与该菜单关联的窗口;否则将 WM_HELP
发送到具有键盘焦点的窗口。 如果没有任何窗口具有键盘焦点,则将 WM_HELP
发送到当前处于活动状态的窗口。
处理 ID_HELP_USING
命令。
afx_msg void OnHelpUsing();
有关详细信息,请参阅CWinApp::OnHelpUsing
。
当用户按下系统范围的热键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户单击窗口的水平滚动条时,框架会调用此成员函数。
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_THUMBPOSITION
或 SB_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);
}
当剪贴板数据采用 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
对象调用此成员函数。
afx_msg void OnIconEraseBkgnd(CDC* pDC);
pDC
指定图标的设备上下文对象。 可能是暂时性的,不应存储它以供稍后使用。
仅当为窗口默认实现定义了类图标时,CWnd
才接收此调用;否则调用 OnEraseBkgnd
。
DefWindowProc
成员函数使用父窗口的背景画笔来填充图标背景。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当菜单即将变为活动状态时,框架会调用此成员函数。
afx_msg void OnInitMenu(CMenu* pMenu);
pMenu
指定要初始化的菜单。 可能是暂时性的,不应存储它以供稍后使用。
当用户单击菜单栏上的项或按下菜单键时,将调用 OnInitMenu
。 重写此成员函数可在显示菜单之前对其进行修改。
OnInitMenu
仅在首次访问菜单时(例如,当用户单击菜单栏上的项时)调用一次。 此方法不提供有关菜单项的信息。 当用户移到菜单中的项时(例如,通过在多个菜单项上移动鼠标),不会再次调用该函数。 在用户退出菜单(例如,通过单击应用程序工作区)并随后单击菜单栏上的某个项后,将再次调用该函数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当弹出菜单即将变为活动状态时,框架会调用此成员函数。
afx_msg void OnInitMenuPopup(
CMenu* pPopupMenu,
UINT nIndex,
BOOL bSysMenu);
pPopupMenu
指定弹出菜单的菜单对象。 可能是暂时性的,不应存储它以供稍后使用。
nIndex
指定主菜单中的弹出菜单的索引。
bSysMenu
如果弹出菜单是控件菜单,则为 TRUE
;否则为 FALSE
。
这样,应用程序就可以在显示弹出菜单之前对其进行修改,而无需更改整个菜单。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在系统中添加或删除 I/O 设备时,框架会调用此成员函数。
afx_msg void OnInputDeviceChange(unsigned short uFlag);
uFlag
[in] 此标志可包含以下值:
GIDC_ARRIVAL
- 已将新设备添加到系统。GIDC_REMOVAL
- 已从系统中删除设备。
此方法接收 Windows SDK 中所述的 WM_INPUT_DEVICE_CHANGE
通知。 这是一条常规输入设备消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
更改应用程序的输入语言后,框架将对受影响的最顶部窗口调用此成员。
afx_msg void OnInputLangChange(
UINT nCharSet,
UINT nLocaleId);
nCharSet
[in] 新区域设置的字符集。 有关详细信息,请参阅 LOGFONT
结构的 lfCharSet
参数。
nLocaleId
[in] 输入区域设置标识符。 有关详细信息,请参阅语言标识符常量和字符串。
此方法接收 Windows SDK 中所述的 WM_INPUTLANGCHANGE
通知消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户选择新的输入语言时,框架将针对具有焦点的窗口调用此成员。
afx_msg void OnInputLangChangeRequest(
UINT nFlags,
UINT nLocaleId);
nFlags
[in] 标志的按位 (OR) 组合,指示从已安装的区域设置列表中的上一个或下一个区域设置中选择了新区域设置,或者新输入区域设置的键盘布局可与系统字符集配合使用。 可能的值为 INPUTLANGCHANGE_BACKWARD
、INPUTLANGCHANGE_FORWARD
和 INPUTLANGCHANGE_SYSCHARSET
。
nLocaleId
[in] 输入区域设置标识符。 有关详细信息,请参阅语言标识符常量和字符串。
此方法接收 Windows SDK 中所述的 WM_INPUTLANGCHANGEREQUEST
通知消息。 当用户使用键盘控制面板应用程序中指定的热键或系统任务栏上的指示器选择新的输入语言时,将发布此消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
按下非系统键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
释放非系统键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架在失去输入焦点之前的那一刻调用此成员函数。
afx_msg void OnKillFocus(CWnd* pNewWnd);
pNewWnd
指定一个指向接收输入焦点的窗口的指针(可能是 NULL
,也可能是暂时性的)。
如果 CWnd
对象正在显示插入点,则此时应销毁插入点。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户双击鼠标左键时,框架会调用此成员函数。
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_DBLCLKS
WNDCLASS
窗口才会接收OnLButtonDblClk
呼叫。 这是 Microsoft 基础类窗口的默认设置。 当用户在系统的双击时间限制内按下、释放然后再次按下鼠标左键时,Windows 将调用 OnLButtonDblClk
。 双击鼠标左键实际上会生成四个事件:WM_LBUTTONDOWN
、WM_LBUTTONUP
消息、WM_LBUTTONDBLCLK
调用,以及释放按钮时生成的另一个 WM_LBUTTONUP
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户按下鼠标左键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户释放鼠标左键时,框架会调用此成员函数。
afx_msg void OnLButtonUp(
UINT nFlags,
CPoint point);
nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:
MK_CONTROL
如果按下了 CTRL 键,则设置此值。MK_MBUTTON
如果按下了鼠标中键,则设置此值。MK_RBUTTON
如果按下了鼠标右键,则设置此值。MK_SHIFT
如果按下了 SHIFT 键,则设置此值。
point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户双击鼠标中键时,框架会调用此成员函数。
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_DBLCLKS
WNDCLASS
窗口才会接收OnMButtonDblClk
呼叫。 这是所有 Microsoft 基础类窗口的默认设置。 当用户在系统的双击时间限制内按下、释放然后再次按下鼠标中键时,Windows 将生成 OnMButtonDblClk
调用。 双击鼠标中键实际上会生成四个事件:WM_MBUTTONDOWN
和 WM_MBUTTONUP
消息、WM_MBUTTONDBLCLK
调用以及另一个 WM_MBUTTONUP
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户按下鼠标中键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户释放鼠标中键时,框架会调用此成员函数。
afx_msg void OnMButtonUp(
UINT nFlags,
CPoint point);
nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:
MK_CONTROL
如果按下了 CTRL 键,则设置此值。MK_LBUTTON
如果按下了鼠标左键,则设置此值。MK_RBUTTON
如果按下了鼠标右键,则设置此值。MK_SHIFT
如果按下了 SHIFT 键,则设置此值。
point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架针对正在停用的子窗口和正在激活的子窗口调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
创建控件时,框架将针对所有者绘制按钮、组合框、列表框或菜单项的所有者调用此成员函数。
afx_msg void OnMeasureItem(
int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
nIDCtl
控件的 ID。
lpMeasureItemStruct
指向包含所有者绘制控件尺寸的 MEASUREITEMSTRUCT
数据结构。
重写此成员函数,填充 lpMeasureItemStruct
指向的 MEASUREITEMSTRUCT
数据结构并返回;这会向 Windows 告知控件的尺寸,并使 Windows 能够正确处理用户与控件的交互。
如果使用 LBS_OWNERDRAWVARIABLE
或 CBS_OWNERDRAWVARIABLE
样式创建了列表框或组合框,则框架将针对控件中每个项的所有者调用此函数;否则调用此函数一次。
在发送 WM_INITDIALOG
消息之前,Windows 将针对使用 OWNERDRAWFIXED
样式创建的组合框和列表框的所有者发起 OnMeasureItem
调用。 因此,当所有者收到此调用时,Windows 尚未确定控件中使用的字体的高度和宽度;需要这些值的函数调用和计算应在应用程序或库的 main 函数中发生。
如果要测量的项是 CMenu
、CListBox
或 CComboBox
对象,则会调用相应类的 MeasureItem
虚拟函数。 重写相应控件类的 MeasureItem
成员函数可计算和设置每个项的大小。
仅当控件的类是在运行时创建的,或者该控件是使用 LBS_OWNERDRAWVARIABLE
或 CBS_OWNERDRAWVARIABLE
样式创建的时,才会调用 OnMeasureItem
。 如果该控件是由对话框编辑器创建的,则不会调用 OnMeasureItem
。 这是因为,WM_MEASUREITEM
消息会在控件创建过程中提前发送。 如果使用 DDX_Control
、SubclassDlgItem
或 SubclassWindow
进行子类化,则子类化通常发生在创建过程之后。 因此,无法在控件的 OnChildNotify
函数(这是 MFC 用来实现 ON_WM_MEASUREITEM_REFLECT
的机制)中处理 WM_MEASUREITEM
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户按下不与当前菜单中任何预定义助记键匹配的菜单助记键字符时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户开始拖动菜单项时,框架将针对当前拖放菜单调用此成员函数。
afx_msg UINT OnMenuDrag(
UINT nPos,
CMenu* pMenu);
nPos
[in] 拖动操作开始时菜单项的索引位置。
pMenu
[in] 指向包含菜单项的 CMenu
对象的指针。
返回值 | 含义 |
---|---|
MND_CONTINUE |
菜单应保持活动状态。 如果鼠标已释放,则应忽略它。 |
MND_ENDMENU |
应结束菜单。 |
此方法接收 Windows SDK 中所述的 WM_MENUDRAG
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当鼠标光标进入菜单项或从项的中间移到项的顶部或底部时,框架将针对当前拖放菜单调用此成员函数。
afx_msg UINT OnMenuGetObject(MENUGETOBJECTINFO* pMenuGetObjectInfo);
pMenu
[in] 指向 MENUGETOBJECTINFO
结构的指针,该结构包含有关鼠标光标所在的拖放菜单的信息。
返回值 | 含义 |
---|---|
MNGO_NOERROR |
支持拖放操作的接口指针在 MENUGETOBJECTINFO 结构的 pvObj 成员中返回。 目前仅支持 IDropTarget 接口。 |
MNGO_NOINTERFACE |
不支持拖放接口。 |
此方法接收 Windows SDK 中所述的 WM_MENUGETOBJECT
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于菜单项上的情况下,当用户释放鼠标右键时,框架会调用此成员函数。
afx_msg void OnMenuRButtonUp(
UINT nPos,
CMenu* pMenu);
nPos
[in] 释放鼠标右键时菜单项的索引位置。
pMenu
[in] 指向包含菜单项的 CMenu
对象的指针。
此方法接收 Windows SDK 中所述的 WM_MENURBUTTONUP
通知。 WM_MENURBUTTONUP
消息使应用程序能够为消息中指定的菜单项提供区分上下文的菜单。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果 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_SYSMENU
或 MF_POPUP
,则表示未使用它。
如果 nFlags
包含 0xFFFF 且 hSysMenu
包含 0,则表示由于用户按下了 ESC 键或已在菜单外部单击,Windows 已关闭菜单。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当光标位于非活动窗口中并且用户按下鼠标按钮时,框架会调用此成员函数。
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);
}
当光标悬停在窗口的工作区上并在先前的 TrackMouseEvent
调用中指定的持续时间内保持此状态时,框架会调用此成员函数。
afx_msg void OnMouseHover(
UINT nFlags,
CPoint point);
nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL
标志指示按下了 CTRL 键。
point
[in] 一个 CPoint
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当鼠标的水平滚轮倾斜或旋转时,框架会调用此成员。
afx_msg void OnMouseHWheel(
UINT nFlags,
short zDelta,
CPoint pt);
nFlags
[in] 标志的按位组合 (OR),指示按下了哪些修改键。 例如,MK_CONTROL
标志指示按下了 CTRL 键。 有关标志列表,请参阅关于鼠标输入中的“消息参数”子标题。
zDelta
[in] 表示滚轮的旋转距离,以 WHEEL_DELTA
(120) 的倍数或除数表示。 正值表示滚轮向右旋转;负值表示滚轮向左旋转。
pt
[in] 一个 CPoint
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 Windows SDK 中所述的 WM_MOUSEHWHEEL
通知消息。 当鼠标的水平滚轮倾斜或旋转时,此消息将发送到具有焦点的窗口。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当光标离开在先前 TrackMouseEvent
调用中指定的窗口工作区时,框架会调用此成员函数。
afx_msg void OnMouseLeave();
此方法接收 Windows SDK 中所述的 WM_MOUSELEAVE
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当鼠标光标移动时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户旋转鼠标滚轮并遇到滚轮的下一个齿格时,框架会调用此成员函数。
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
对象后,框架会调用此成员函数。
afx_msg void OnMove(
int x,
int y);
x
指定工作区左上角的新 x 坐标位置。 此新位置以重叠窗口和弹出窗口的屏幕坐标以及子窗口的父客户端坐标形式给出。
y
指定工作区左上角的新 y 坐标位置。 此新位置以重叠窗口和弹出窗口的屏幕坐标以及子窗口的父客户端坐标形式给出。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户移动 CWnd
对象时,框架会调用此成员函数。
afx_msg void OnMoving(
UINT nSide,
LPRECT lpRect);
nSide
要移动的窗口边缘。
lpRect
将包含项坐标的 CRect
或 RECT
结构的地址。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
需要更改非工作区以指示活动或非活动状态时,框架会调用此成员函数。
afx_msg BOOL OnNcActivate(BOOL bActive);
bActive
指定何时需要更改标题栏或图标以指示活动或非活动状态。 如果要绘制活动标题栏或图标,则 bActive
参数为 TRUE
。 如果要绘制非活动的标题栏或图标,此参数为 FALSE
。
如果 Windows 应继续进行默认处理,则返回非零值;如果要阻止停用标题栏或图标,则返回 0。
如果 bActive
为 TRUE
,则默认实现将以活动颜色绘制标题栏和标题栏文本;如果 bActive
为 FALSE
,则以非活动颜色绘制。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
需要计算工作区的大小和位置时,框架会调用此成员函数。
afx_msg void OnNcCalcSize(
BOOL bCalcValidRects,
NCCALCSIZE_PARAMS* lpncsp);
bCalcValidRects
指定应用程序是否应指定工作区的哪个部分包含有效信息。 Windows 会将有效信息复制到新工作区中的指定区域。 如果此参数为 TRUE,则应用程序应指定工作区的哪个部分有效。
lpncsp
指向 NCCALCSIZE_PARAMS
数据结构,其中包含可供应用程序用来计算 CWnd
矩形(包括工作区、边框、标题栏、滚动条等)的新大小和位置的信息。
通过处理此消息,应用程序可以在窗口大小或位置发生更改时控制窗口工作区的内容。
无论 bCalcValidRects
的值如何,由 NCCALCSIZE_PARAMS
结构的 rgrc
结构成员指定的数组中的第一个矩形都包含窗口的坐标。 对于子窗口,坐标相对于父窗口的工作区。 对于顶级窗口,坐标是屏幕坐标。 应用程序应修改 rgrc[0]
矩形以反映工作区的大小和位置。
仅当 bCalcValidRects
为 TRUE
时,rgrc[1]
和 rgrc[2]
矩形才有效。 在这种情况下,rgrc[1]
矩形包含窗口在移动或调整大小之前的坐标。 rgrc[2]
矩形包含移动窗口之前窗口工作区的坐标。 所有坐标相对于父窗口或屏幕。
默认实现根据窗口特征(滚动条、菜单等是否存在)计算工作区的大小,并将结果放在 lpncsp
中。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
首次创建 CWnd
对象时,框架会在发送 WM_CREATE
消息之前调用此成员函数。
afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct);
lpCreateStruct
指向 CWnd
的 CREATESTRUCT
数据结构。
如果创建了非工作区,则返回非零值。 如果发生错误,则返回值为 0;在这种情况下,Create
函数将返回 failure
。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
销毁非工作区时由框架调用,它是在销毁 Windows 窗口时调用的最后一个成员函数。
afx_msg void OnNcDestroy();
默认实现执行一些清理工作,然后调用虚拟成员函数 PostNcDestroy
。
如果你想要执行自己的清理(例如 delete this
操作),请重写 PostNcDestroy
。 如果重写 OnNcDestroy
,则必须在基类中调用 OnNcDestroy
以确保释放在内部分配给窗口的任何内存。
每次移动鼠标时,框架都会针对包含光标的 CWnd
对象(或使用 SetCapture
成员函数捕获鼠标输入的 CWnd
对象)调用此成员函数。
afx_msg LRESULT OnNcHitTest(CPoint point);
point
包含光标的 x 和 y 坐标。 这些坐标始终是屏幕坐标。
鼠标命中测试枚举值之一。 有关值列表,请参阅 WM_NCHITTEST
。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于 CWnd
的非工作区中的情况下,当用户双击鼠标左键时,框架会调用此成员函数。
afx_msg void OnNcLButtonDblClk(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST
。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
在适当情况下会发送 WM_SYSCOMMAND
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于 CWnd
对象的非工作区中的情况下,当用户按下鼠标左键时,框架会调用此成员函数。
afx_msg void OnNcLButtonDown(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST
。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
在适当情况下会发送 WM_SYSCOMMAND
。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递给函数的参数反映了框架在收到消息时收到的参数。如果调用此函数的基类实现,该实现将使用最初随消息一起传递的参数,而不是提供给函数的参数。
在光标位于非工作区中的情况下,当用户释放鼠标左键时,框架会调用此成员函数。
afx_msg void OnNcLButtonUp(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。 有关值列表,请参阅 WM_NCHITTEST
。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
在适当情况下会发送 WM_SYSCOMMAND
。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于的非工作区中的情况下,当用户双击鼠标中键时,框架会调用此成员函数。
afx_msg void OnNcMButtonDblClk(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于非工作区中的情况下,当用户按下鼠标中键时,框架会调用此成员函数。
afx_msg void OnNcMButtonDown(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于非工作区中的情况下,当用户释放鼠标中键时,框架会调用此成员函数。
afx_msg void OnNcMButtonUp(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当光标悬停在窗口的非工作区上并在先前的 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当光标离开在先前 TrackMouseEvent
调用中指定的窗口非工作区时,框架会调用此成员函数。
afx_msg void OnNcMouseLeave();
此方法接收 Windows SDK 中所述的 WM_NCMOUSELEAVE
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当光标在非工作区中移动时,框架会调用此成员函数。
afx_msg void OnNcMouseMove(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
在适当情况下会发送 WM_SYSCOMMAND
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
需要绘制非工作区时,框架会调用此成员函数。
afx_msg void OnNcPaint();
默认实现绘制窗口框架。
应用程序可以重写此调用并绘制其自身的自定义窗口框架。 剪切区域始终是矩形,即使框架的形状已更改。
在光标位于 CWnd
的非工作区中的情况下,当用户双击鼠标右键时,框架会调用此成员函数。
afx_msg void OnNcRButtonDblClk(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于非工作区中的情况下,当用户按下鼠标右键时,框架会调用此成员函数。
afx_msg void OnNcRButtonDown(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于非工作区中的情况下,当用户释放鼠标右键时,框架会调用此成员函数。
afx_msg void OnNcRButtonUp(
UINT nHitTest,
CPoint point);
nHitTest
指定命中测试代码。 命中测试是一项确定光标位置的测试。
point
指定包含光标位置的 x 和 y 屏幕坐标的 CPoint
对象。 这些坐标始终相对于屏幕的左上角。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当非工作区的呈现策略已更改时,框架会调用此成员。
afx_msg void OnNcRenderingChanged(BOOL bIsRendering);
bIsRendering
[in] 如果为窗口的非工作区启用了桌面窗口管理器 (DWM) 呈现,则此参数为 TRUE
;如果禁用了呈现,则为 FALSE
。
此方法接收 Windows SDK 中所述的 WM_DWMNCRENDERINGCHANGED
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于窗口的非工作区中的情况下,当用户双击 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 Windows SDK 中所述的 WM_XBUTTONDBLCLK
通知。 此消息将发布到包含光标的窗口。 如果窗口捕获了鼠标,则不发布此消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于窗口的非工作区中的情况下,当用户按下鼠标的 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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
对象,指定光标相对于屏幕左上角的 x
和 y
坐标。
此方法接收 Windows SDK 中所述的 WM_NCXBUTTONDOWN
通知。 此消息将发布到包含光标的窗口。 如果窗口捕获了鼠标,则不发布此消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于窗口的非工作区中的情况下,当用户释放鼠标的 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
使用左右箭头键在菜单栏与系统菜单之间切换时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来向控件的父窗口告知该控件中发生了事件,或者该控件需要某种信息。
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_NOTIFY
和 WM_NOTIFY
消息。 另请参阅控件主题和 TN062 Windows 控件的消息反射中介绍的相关主题。
框架调用此成员函数来确定当前窗口接受的是 WM_NOTIFY
通知消息中的 ANSI 还是 Unicode 结构。
afx_msg UINT OnNotifyFormat(
CWnd* pWnd,
UINT nCommand);
pWnd
[in] 指向 CWnd
对象的指针,该对象表示发送 WM_NOTIFY
消息的窗口。 如果 nCommand
参数为 NF_QUERY
,则此参数是指向控件的指针;如果 nCommand
为 NF_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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当 Windows 或应用程序请求重绘应用程序窗口的一部分时,框架会调用此成员函数。
afx_msg void OnPaint();
在调用 UpdateWindow
或 RedrawWindow
成员函数时发送 WM_PAINT
消息。
由于在设置了 RDW_INTERNALPAINT
标志的情况下调用了 RedrawWindow
成员函数,窗口可能会收到内部绘制消息。 在这种情况下,窗口可能不包含更新区域。 应用程序应调用 GetUpdateRect
成员函数来确定窗口是否包含更新区域。 如果 GetUpdateRect
返回 0,则应用程序不应调用 BeginPaint
和 EndPaint
成员函数。
应用程序需负责通过在其内部数据结构中查找每个 WM_PAINT
消息来检查任何必要的内部重绘或更新,因为 WM_PAINT
消息可能是由无效区域以及在设置了 RDW_INTERNALPAINT
标志的情况下调用 RedrawWindow
成员函数而导致的。
Windows 仅发送内部 WM_PAINT
消息一次。 在 UpdateWindow
成员函数将内部 WM_PAINT
消息发送到某个窗口后,在该窗口失效或者在设置了 RDW_INTERNALPAINT
标志的情况下再次调用 RedrawWindow
成员函数之前,不会发送或发布更多的 WM_PAINT
消息。
有关在文档/视图应用程序中呈现图像的信息,请参阅 CView::OnDraw
。
有关如何使用 WM_Paint
的详细信息,请参阅 Windows SDK 中的以下主题:
当剪贴板所有者已将数据以 OnPaintClipboard
格式放置在剪贴板上,并且剪贴板查看器的工作区需要重新绘制时,剪贴板查看器将调用剪贴板所有者的 CF_OWNERDISPLAY
成员函数。
afx_msg void OnPaintClipboard(
CWnd* pClipAppWnd,
HGLOBAL hPaintStruct);
pClipAppWnd
指定指向剪贴板应用程序窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。
hPaintStruct
标识一个 PAINTSTRUCT
数据结构,该结构定义要绘制的工作区部分。
若要确定是需要重新绘制整个工作区还是只重新绘制某一部分,剪贴板所有者必须将 PAINTSTRUCT
结构的 rcpaint
成员中指定的绘图区域尺寸与最新 OnSizeClipboard
成员函数调用中指定的尺寸进行比较。
OnPaintClipboard
应使用 GlobalLock
Windows 函数来锁定包含 PAINTSTRUCT
数据结构的内存,并在退出之前使用 GlobalUnlock
函数解锁该内存。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在具有输入焦点的窗口实现其逻辑调色板后,框架将对所有顶级窗口调用此成员函数,从而更改系统调色板。
afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
pFocusWnd
指定指向导致系统调色板发生更改的窗口的指针。 该指针可能是暂时性指针,不应存储它。
此调用允许没有输入焦点的窗口使用调色板来实现其逻辑调色板并更新其工作区。
针对所有顶级窗口和重叠窗口(包括更改了系统调色板并导致发送 WM_PALETTECHANGED
消息的窗口)调用 OnPaletteChanged
成员函数。 如果任何子窗口使用调色板,则必须将此消息传递给它。
为避免出现无限循环,除非窗口确定 pFocusWnd
不包含指向自身的指针,否则它不应实现其调色板。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来向应用程序告知某个应用程序即将实现其逻辑调色板。
afx_msg void OnPaletteIsChanging(CWnd* pRealizeWnd);
pRealizeWnd
指定即将实现其逻辑调色板的窗口。
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当创建或销毁父级的子窗口时,或者在光标位于子窗口上的情况下当用户单击鼠标按钮时,框架会调用父级的 OnParentNotify
成员函数。
afx_msg void OnParentNotify(
UINT message,
LPARAM lParam);
message
指定要向父级通知的事件和子窗口的标识符。 该事件是 message
的低位字。 如果事件是 WM_CREATE
或 WM_DESTROY
,则 message
的高位字是子窗口的标识符;否则,高位字是未定义的。 事件(message
的低位字)可为以下任一值:
WM_CREATE
正在创建子窗口。WM_DESTROY
正在销毁子窗口。WM_LBUTTONDOWN
用户已将鼠标光标放在子窗口上并单击了鼠标左键。WM_MBUTTONDOWN
用户已将鼠标光标放在子窗口上并单击了鼠标中键。WM_RBUTTONDOWN
用户已将鼠标光标放在子窗口上并单击了鼠标右键。
lParam
如果 message
的事件(低位字)是 WM_CREATE
或 WM_DESTROY
,则 lParam
指定子窗口的窗口句柄;否则 lParam
包含光标的 x 和 y 坐标。 x 坐标在低位字中,y 坐标在高位字中。
创建子窗口时,系统会在创建窗口的 Create
成员函数返回之前的那一刻调用 OnParentNotify
。 销毁子窗口时,系统会在进行任何处理以销毁窗口之前调用 OnParentNotify
。
针对子窗口的所有上级窗口(包括顶级窗口)调用 OnParentNotify
。
除具有 WS_EX_NOPARENTNOTIFY
样式的子窗口之外的其他所有子窗口会将此消息发送到其父窗口。 默认情况下,对话框中的子窗口具有 WS_EX_NOPARENTNOTIFY
样式,除非通过调用 CreateEx
成员函数创建没有此样式的子窗口。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
发生电源管理事件时,框架会调用此成员函数。
afx_msg UINT OnPowerBroadcast(
UINT nPowerEvent,
UINT nEventData);
nPowerEvent
[in] 电源管理事件。
nEventData
[in] 事件特定的数据。
如果事件是请求,则返回 TRUE
以允许请求,或返回 BROADCAST_QUERY_DENY
以拒绝请求。
此方法接收 WM_POWERBROADCAST
消息,如 Windows SDK 中所述。
nPowerEvent
参数指定事件,例如电池电量低、电源状态已更改、已请求或拒绝操作暂停权限、发生事件后正在自动恢复操作、系统正在暂停操作或暂停后正在恢复操作。 通常不使用 nEventData
参数。 有关详细信息,请参阅 WM_POWERBROADCAST
消息的 wParam
和 lParam
参数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架通过一个最小化的(图标)、未为其类定义图标的窗口调用此成员函数。
afx_msg HCURSOR OnQueryDragIcon();
一个双字值,其低位字中包含光标或图标句柄。 该光标或图标必须与显示驱动程序的分辨率兼容。 如果应用程序返回 NULL
,则系统将显示默认光标。 默认返回值为 NULL
。
当用户拖动最小化的窗口时,系统会发出此调用以获取要显示的光标。 如果应用程序返回图标或光标的句柄,则系统会将其转换为黑白色。 如果应用程序返回句柄,则该句柄必须标识与显示驱动程序分辨率兼容的单色光标或图标。 应用程序可以调用 CWinApp::LoadCursor
或 CWinApp::LoadIcon
成员函数来从其可执行文件中的资源加载光标或图标并获取此句柄。
当用户选择结束 Windows 会话或应用程序调用 ExitWindows
Windows 函数时,框架会调用此成员函数。
afx_msg BOOL OnQueryEndSession();
如果可以方便地关闭应用程序,则返回非零值;否则返回 0。
如果任何应用程序返回 0,则不结束 Windows 会话。 在一个应用程序返回 0 后,Windows 就会立即停止调用 OnQueryEndSession
,并为已返回非零值的任何应用程序发送参数值为 FALSE
的 WM_ENDSESSION
消息。
当 CWnd
对象即将接收输入焦点时,框架会调用此成员函数,从而使 CWnd
在接收焦点时有机会实现其逻辑调色板。
afx_msg BOOL OnQueryNewPalette();
如果 CWnd
实现其逻辑调色板,则返回非零值;否则返回 0。
当 CWnd
对象已最小化并且用户请求将 CWnd
还原到其预先最小化的大小和位置时,框架会调用此成员函数。
afx_msg BOOL OnQueryOpen();
如果图标可以打开,则返回非零值;如果阻止图标打开,则返回 0。
在 OnQueryOpen
中,CWnd
不应执行任何会导致激活或焦点发生更改的操作(例如,创建对话框)。
调用以检索窗口的用户界面 (UI) 状态。
afx_msg UINT OnQueryUIState();
如果焦点指示器和键盘加速键可见,则返回值为 NULL
。 否则,返回值可为以下一个或多个值:
UISF_HIDEFOCUS
焦点指示器已隐藏。UISF_HIDEACCEL
键盘加速键已隐藏。UISF_ACTIVE
Windows XP:应该以用于活动控件的样式绘制控件。
此成员函数模拟 WM_QUERYUISTATE
消息的功能,如 Windows SDK 中所述。
当前窗口获取原始输入时,框架会调用此成员函数。
afx_msg void OnRawInput(
UINT nInputCode,
HRAWINPUT hRawInput);
nInputCode
[in] 输入代码,指示输入是否在应用程序位于前台时发生。 在任一情况下,应用程序都必须调用 CWnd::DefWindowProc
,以便系统可以执行清理。 此参数可能是以下值之一:
RIM_INPUT
- 输入在应用程序位于前台时发生。RIM_INPUTSINK
- 输入在应用程序不位于前台时发生。
hRawInput
[in] 包含来自设备的原始输入的 RAWINPUT
结构的句柄。
此方法接收 Windows SDK 中所述的 WM_INPUT
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户双击鼠标右键时,框架会调用此成员函数。
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_RBUTTONDOWN
和 WM_RBUTTONUP
消息、OnRButtonDblClk
调用,以及释放按钮时生成的另一个 WM_RBUTTONUP 消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户按下鼠标右键时,框架会调用此成员函数。
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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户释放鼠标右键时,框架会调用此成员函数。
afx_msg void OnRButtonUp(
UINT nFlags,
CPoint point);
nFlags
指示各种虚拟键是否已按下。 此参数可使用以下值的任意组合:
MK_CONTROL
如果按下了 CTRL 键,则设置此值。MK_LBUTTON
如果按下了鼠标左键,则设置此值。MK_MBUTTON
如果按下了鼠标中键,则设置此值。MK_SHIFT
如果按下了 SHIFT 键,则设置此值。
point
指定光标的 x 和 y 坐标。 这些坐标始终相对于窗口的左上角。
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户旋转鼠标滚轮并遇到滚轮的下一个齿格时,框架会调用此成员函数。
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
。
销毁所有者应用程序时,框架将调用剪贴板所有者的 OnRenderAllFormats
成员函数。
afx_msg void OnRenderAllFormats();
剪贴板所有者应以它能够生成的所有格式呈现数据,并通过调用 SetClipboardData
Windows 函数将每种格式的数据句柄传递给剪贴板。 这可以确保剪贴板包含有效数据,即使呈现数据的应用程序已销毁。 应用程序应在调用 SetClipboardData
Windows 函数之前调用 OpenClipboard
成员函数,随后再调用 CloseClipboard
Windows 函数。
需要呈现采用延迟呈现方式的特定格式时,框架将调用剪贴板所有者的 OnRenderFormat
成员函数。
afx_msg void OnRenderFormat(UINT nFormat);
nFormat
指定剪贴板格式。
接收方应以该格式呈现数据,并通过调用 SetClipboardData
Windows 函数将其传递给剪贴板。
不要从 OnRenderFormat
内部调用 OpenClipboard
成员函数或 CloseClipboard
Windows 函数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来向应用程序通知会话状态发生更改。
afx_msg void OnSessionChange(
UINT nSessionState,
UINT nId);
nSessionState
[in] 状态代码描述会话状态更改。
nId
[in] 会话标识符。
此方法接收 Windows SDK 中所述的 WM_WTSSESSION_CHANGE
通知。
nSessionState
参数指定已从控制台或远程终端连接或断开连接会话、用户已登录或注销、会话已锁定或解锁,或者会话已更改为远程控制状态。 有关详细信息,请参阅 WM_WTSSESSION_CHANGE
消息的 wParam
参数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果未捕获鼠标输入并且鼠标导致光标在 CWnd
对象内移动,则框架会调用此成员函数。
afx_msg BOOL OnSetCursor(
CWnd* pWnd,
UINT nHitTest,
UINT message);
pWnd
指定指向包含光标的窗口的指针。 该指针可能是暂时性的,不应存储它以供稍后使用。
nHitTest
指定命中测试区域代码。 命中测试确定光标的位置。
message
指定鼠标消息编号。
非零值表示停止进一步的处理,0 值表示继续。
默认实现在处理之前调用父窗口的 OnSetCursor
。 如果父窗口返回 TRUE
,则停止进一步的处理。 调用父窗口可让父窗口控制子窗口中的光标设置。
如果光标不在工作区中,则默认实现会将光标设置为箭头;如果光标在工作区中,则将光标设置为已注册类光标。
如果 nHitTest
为 HTERROR
并且 message
是按下鼠标按钮消息,则调用 MessageBeep
成员函数。
当 CWnd
进入菜单模式时,message 参数为 0。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架在获取输入焦点后调用此成员函数。
afx_msg void OnSetFocus(CWnd* pOldWnd);
pOldWnd
包含失去输入焦点的 CWnd
对象(可为 NULL
)。 该指针可能是暂时性的,不应存储它以供稍后使用。
若要显示插入点,CWnd
此时应调用相应的插入点函数。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当 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 中,处理程序将由 OnSettingChange
和 uFlags
调用,并且始终为零。
当 CWnd
对象即将隐藏或显示时,框架会调用此成员函数。
afx_msg void OnShowWindow(
BOOL bShow,
UINT nStatus);
bShow
指定是否正在显示窗口。 如果正在显示窗口,则此参数为 TRUE
;如果正在隐藏窗口,则为 FALSE
。
nStatus
指定正在显示的窗口的状态。 如果因调用 ShowWindow
成员函数而发送了消息,则此参数为 0;否则 nStatus
是下列其中一项:
SW_PARENTCLOSING
父窗口正在关闭(变成图标)或弹出窗口正在隐藏。SW_PARENTOPENING
父窗口正在打开(显示)或弹出窗口正在显示。
当调用 ShowWindow
成员函数、最大化或还原重叠窗口,或者重叠窗口或弹出窗口已关闭(变成图标)或打开(显示在屏幕上)时,将隐藏或显示窗口。 关闭某个重叠窗口时,与该窗口关联的所有弹出窗口都将隐藏。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架在窗口的大小更改后调用此成员函数。
afx_msg void OnSize(
UINT nType,
int cx,
int cy);
nType
指定请求的大小调整类型。 此参数可能是以下值之一:
SIZE_MAXIMIZED
窗口已最大化。SIZE_MINIMIZED
窗口已最小化。SIZE_RESTORED
窗口已调整大小,但SIZE_MINIMIZED
和SIZE_MAXIMIZED
均不适用。SIZE_MAXHIDE
当其他某个窗口最大化时,消息将发送到所有弹出窗口。SIZE_MAXSHOW
当其他某个窗口还原到原来的大小时,消息将发送到所有弹出窗口。
cx
指定工作区的新宽度。
cy
指定工作区的新高度。
如果从 OnSize
针对子窗口调用 SetScrollPos
或 MoveWindow
成员函数,则 SetScrollPos
或 MoveWindow
的 bRedraw
参数应为非零值,以重绘 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);
}
}
当剪贴板包含具有 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
框架调用此成员函数来指示用户正在调整矩形的大小。
afx_msg void OnSizing(
UINT nSide,
LPRECT lpRect);
nSide
要移动的窗口边缘。
lpRect
将包含项坐标的 CRect
或 RECT
结构的地址。
通过处理此消息,应用程序可以监视拖动矩形的大小和位置,并根据需要更改其大小或位置。
备注
框架调用此成员函数来支持你的应用程序处理 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();
}
每当在打印管理器队列中添加或删除作业时,框架都会从打印管理器调用此成员函数。
afx_msg void OnSpoolerStatus(
UINT nStatus,
UINT nJobs);
nStatus
指定 SP_JOBSTATUS
标志。
nJobs
指定打印管理器队列中剩余的作业数。
此调用仅供参考。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在 SetWindowLong
函数更改一个或多个窗口样式后,框架会调用此成员函数。
afx_msg void OnStyleChanged(
int nStyleType,
LPSTYLESTRUCT lpStyleStruct);
nStyleType
指定已更改窗口的扩展样式还是非扩展样式。 此参数可为以下值的组合:
GWL_EXSTYLE
已更改窗口的扩展样式。GWL_STYLE
已更改窗口的非扩展样式。
lpStyleStruct
指向包含窗口新样式的 STYLESTRUCT
结构。 应用程序可以检查样式,但无法更改样式。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当 SetWindowLong
函数即将更改一种或多种窗口样式时,框架会调用此成员函数。
afx_msg void OnStyleChanging(
int nStyleType,
LPSTYLESTRUCT lpStyleStruct);
nStyleType
指定已更改窗口的扩展样式还是非扩展样式。 此参数可为以下值的组合:
GWL_EXSTYLE
已更改窗口的扩展样式。GWL_STYLE
已更改窗口的非扩展样式。
lpStyleStruct
指向包含窗口新样式的 STYLESTRUCT
结构。 应用程序可以检查和更改样式。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果 CWnd
具有输入焦点并且 WM_SYSKEYUP
和 WM_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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当系统颜色设置发生更改时,框架将对所有顶级窗口调用此成员函数。
afx_msg void OnSysColorChange();
对于受系统颜色更改影响的任何窗口,Windows 将调用 OnSysColorChange
。
其画笔使用现有系统颜色的应用程序应删除这些画笔,并使用新的系统颜色重新创建画笔。
当用户从控件菜单中选择一个命令,或者当用户选择“最大化”或“最小化”按钮时,框架会调用此成员函数。
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
值相组合以获取正确的结果。
可以使用 GetSystemMenu
、AppendMenu
、InsertMenu
和 ModifyMenu
成员函数修改控件菜单中的菜单项。 修改控件菜单的应用程序必须处理 WM_SYSCOMMAND
消息,任何未由应用程序处理的 WM_SYSCOMMAND
消息必须传递给 OnSysCommand
。 应用程序添加的任何命令值必须由应用程序处理,而不能传递给 OnSysCommand
。
通过将 WM_SYSCOMMAND
消息传递给 OnSysCommand
,应用程序可以随时执行任何系统命令。
为了从控件菜单中选择项而定义的加速键(快捷键)击键将转换为 OnSysCommand
调用;所有其他加速键击键将转换为 WM_COMMAND
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果在调用 OnSysKeyUp
或 OnSysKeyDown
成员函数时 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
对象具有输入焦点,则当用户按住 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
对象具有焦点,则当用户释放在按住 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户单击可创作型按钮时,框架会调用此成员函数。
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
命令来启动训练卡。
框架在系统时间更改后调用此成员函数。
afx_msg void OnTimeChange();
让任何更改系统时间的应用程序将此消息发送到所有顶级窗口。 若要将 WM_TIMECHANGE
消息发送到所有顶级窗口,应用程序可以使用 SendMessage
Windows 函数并将其 hwnd
参数设置为 HWND_BROADCAST
。
框架在用于安装计时器的 SetTimer
成员函数中指定的每个间隔之后调用此成员函数。
afx_msg void OnTimer(UINT_PTR nIDEvent);
nIDEvent
指定计时器的标识符。
当应用程序的消息队列中没有其他消息时,DispatchMessage
Windows 函数将发送 WM_TIMER
消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
请参见 CWnd::SetTimer
中的示例。
框架调用此成员函数来确定某个点是否在指定的工具的边框内。
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_NOTBUTTON
和 TTF_CENTERTIP
。
重写 OnToolHitTest
可提供非默认提供的信息。
有关结构的详细信息,请参阅 Windows SDK 中的 TOOLINFO
。
处理来自 Windows 触摸屏的单个输入。
virtual BOOL OnTouchInput(
CPoint pt,
int nInputNumber,
int nInputsCount,
PTOUCHINPUT pInput);
pt
在屏幕上触摸的点(以客户端坐标表示)。
nInputNumber
触摸输入数量。
nInputsCount
触摸输入总数。
pInput
指向 TOUCHINPUT
结构的指针。
如果应用程序处理 Windows 触摸输入,则返回 TRUE
;否则返回 FALSE
。
处理通过 Windows 触摸提供的输入。
virtual BOOL OnTouchInputs(
UINT nInputsCount,
PTOUCHINPUT pInputs);
nInputsCount
Windows 触摸输入总数。
pInputs
TOUCHINPUT
的数组。
如果应用程序处理 Windows 触摸输入,则返回 TRUE
;否则返回 FALSE
。
按下某个键时,框架会调用此成员函数。 即,当前窗口具有键盘焦点,并且 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
销毁下拉菜单或子菜单后,框架会调用此成员函数。
afx_msg void OnUnInitMenuPopup(
CMenu* pPopupMenu,
UINT nFlags);
pMenu
[in] 指向表示菜单或子菜单的 CMenu
对象的指针。
nFlags
[in] 已销毁的菜单。 目前它只能是窗口菜单 MF_SYSMENU
。
此方法接收 Windows SDK 中所述的 WM_UNINITMENUPOPUP
通知。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
调用以更改指定窗口及其所有子窗口的用户界面 (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 中所述。
在用户登录或注销后,框架将针对所有窗口调用此成员。
afx_msg void OnUserChanged();
此方法接收 Windows SDK 中所述的 WM_USERCHANGED
通知消息。 当用户登录或注销时,操作系统会更新用户特定的设置。 系统在更新设置后立即发送此消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
如果 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当用户单击窗口的垂直滚动条时,框架会调用此成员函数。
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_THUMBPOSITION
或 SB_THUMBTRACK
,则包含当前滚动框位置;否则不使用。 根据初始滚动范围,nPos
可能为负,并且应在必要时强制转换为 int
。
pScrollBar
如果滚动消息来自滚动条控件,则包含指向该控件的指针。 如果用户单击了窗口的滚动条,则此参数为 NULL
。 该指针可能是暂时性的,不应存储它以供稍后使用。
在拖动滚动框时,提供某些反馈的应用程序通常使用 OnVScroll
。
如果 OnVScroll
滚动 CWnd
对象的内容,则它还必须使用 SetScrollPos
成员函数来重置滚动框的位置。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当剪贴板数据采用 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当前窗口已最大化时,框架会调用此成员,该窗口由桌面窗口管理器 (DWM) 编写。
afx_msg void OnWindowMaximizedChanged(BOOL bIsMaximized);
bIsMaximized
[in] 如果当前窗口已最大化,则参数值为 TRUE
,否则为 FALSE
。
此方法接收 Windows SDK 中所述的 WM_DWMWINDOWMAXIMIZEDCHANGE
通知消息。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当由于调用 SetWindowPos
成员函数或另一个窗口管理函数而更改了大小、位置或 Z 顺序时,框架会调用此成员函数。
afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);
lpwndpos
指向包含有关窗口新大小和位置的信息的 WINDOWPOS
数据结构。
默认实现将 WM_SIZE
和 WM_MOVE
消息发送到窗口。 如果应用程序处理 OnWindowPosChanged
调用但不调用其基类,则不发送这些消息。 在调用 OnWindowPosChanged
(但不调用其基类)期间执行任何移动或大小更改处理会更有效。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
当由于调用 SetWindowPos
成员函数或另一个窗口管理函数而即将更改大小、位置或 Z 顺序时,框架会调用此成员函数。
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
lpwndpos
指向包含有关窗口新大小和位置的信息的 WINDOWPOS
数据结构。
应用程序可以通过在 WINDOWPOS
结构的 flags
成员中设置或清除相应的位来防止更改窗口。
对于具有 WS_OVERLAPPED
或 WS_THICKFRAME
样式的窗口,默认实现会向该窗口发送 WM_GETMINMAXINFO
消息。 这是为了验证窗口的新大小和位置并强制使用 CS_BYTEALIGNCLIENT
和 CS_BYTEALIGN
客户端样式。 应用程序可以通过不调用此功能的基类来重写此功能。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
对 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
设置为 NULL
的 OnWinIniChange
调用,则该应用程序应检查 WIN.INI 中影响到它的所有节。
备注
框架调用此成员函数来支持你的应用程序处理 Windows 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
此成员函数由 WindowProc
调用,或者在消息反射期间调用。
virtual BOOL OnWndMsg(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
message
指定要发送的消息。
wParam
指定其他消息相关信息。
lParam
指定其他消息相关信息。
pResult
WindowProc
的返回值。 取决于消息;可为 NULL
。
如果消息已处理,则为 TRUE;否则为 FALSE。
OnWndMsg
确定消息类型,并调用相应的框架函数(例如,对 WM_COMMAND
调用 OnCommand
)或者在消息映射中查找相应的消息。
有关消息反射的详细信息,请参阅处理反射的消息。
在光标位于窗口的工作区中的情况下,当用户双击 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于窗口的工作区中的情况下,当用户按下 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
在光标位于窗口的工作区中的情况下,当用户释放 XBUTTON1
或 XBUTTON2
时,框架会调用此成员函数。
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
对象,指定光标相对于工作区左上角的 x
和 y
坐标。
此方法接收 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 消息。 传递到函数的参数反映了收到消息时框架所接收的参数。 如果调用此函数的基类实现,该实现将使用最初随消息传递的参数,而不是你提供给该函数的参数。
打开剪贴板。
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() const;
比较两个 CWnd
对象以确定它们的 m_hWnd
是否不同。
BOOL operator!=(const CWnd& wnd) const;
wnd
对 CWnd
对象的引用。
如果相等,则返回非零值;否则返回 0。
比较两个 CWnd
对象以确定它们的 m_hWnd
是否相同。
BOOL operator==(const CWnd& wnd) const;
wnd
对 CWnd
对象的引用。
如果相等,则返回非零值;否则返回 0。
在控件容器上绘制无窗口控件。
BOOL PaintWindowlessControls(CDC* pDC);
pDC
要在其上绘制无窗口控件的设备上下文。
如果存在控件容器并且已成功绘制无窗口控件,则返回 TRUE
,否则返回 FALSE
。
将消息放入窗口的消息队列中,然后返回且不等待相应的窗口处理消息。
BOOL PostMessage(
UINT message,
WPARAM wParam = 0,
LPARAM lParam = 0);
message
指定要发布的消息。
wParam
指定附加消息信息。 此参数的内容取决于发布的消息。
lParam
指定附加消息信息。 此参数的内容取决于发布的消息。
如果消息已发布,则返回非零值;否则返回 0。
通过调用 GetMessage
或 PeekMessage
Windows 函数来检索消息队列中的消息。
Windows PostMessage
函数可用于访问另一个应用程序。
请参阅 AfxGetMainWnd
的示例。
在销毁窗口后由默认的 OnNcDestroy
成员函数调用。
virtual void PostNcDestroy();
派生类可以使用此函数进行自定义清理,例如删除 this
指针。
在创建附加到此 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);
}
框架调用此成员函数以允许子类化窗口之前进行其他必要的子类化。
virtual void PreSubclassWindow();
重写此成员函数可以动态子类化控件。 它是一个高级可重写函数。
由类 CWinApp
用于在将窗口消息调度到 TranslateMessage
和 DispatchMessage
Windows 函数之前对其进行转换。
virtual BOOL PreTranslateMessage(MSG* pMsg);
pMsg
指向包含要处理的消息的 MSG
结构。
如果消息已转换且不应调度,则返回非零值;如果消息未转换且应调度,则返回 0。
调用此成员函数可以在指定的设备上下文中绘制当前窗口,这种情况在打印机设备上下文中最常见。
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
消息。
调用此成员函数可在指定的设备上下文(通常是打印机设备上下文)中绘制任何窗口。
void PrintClient(
CDC* pDC,
DWORD dwFlags) const;
pDC
一个指向设备上下文的指针。
dwFlags
指定绘制选项。 此参数可为下列一个或多个标志:
PRF_CHECKVISIBLE
仅当窗口可见时才绘制窗口。PRF_CHILDREN
绘制所有可见的子窗口。PRF_CLIENT
绘制窗口的工作区。PRF_ERASEBKGND
在绘制窗口之前擦除背景。PRF_NONCLIENT
绘制窗口的非工作区。PRF_OWNED
绘制所有拥有的窗口。
将可视窗口复制到指定设备上下文(通常是打印机设备上下文)。
BOOL PrintWindow(
CDC* pDC,
UINT nFlags) const;
pDC
指向要打印到的设备上下文的指针。
nFlags
指定绘制选项。 有关可能值的列表,请参阅 PrintWindow
。
如果函数成功,则为非零值;否则为
此成员函数模拟 PrintWindow
函数的功能,如 Windows SDK 中所述。
更新给定窗口工作区中的指定矩形或区域。
BOOL RedrawWindow(
LPCRECT lpRectUpdate = NULL,
CRgn* prgnUpdate = NULL,
UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
lpRectUpdate
指向包含更新矩形坐标的 RECT
结构。 如果 prgnUpdate
包含有效的区域句柄,则忽略此参数。
prgnUpdate
标识更新区域。 如果 prgnUpdate
和 lpRectUpdate
均为 NULL
,则将整个工作区添加到更新区域。
flags
以下标志用于使窗口失效:
RDW_ERASE
在重绘窗口时使窗口接收WM_ERASEBKGND
消息。 还必须指定RDW_INVALIDATE
标志;否则 RDW_ERASE 不起作用。RDW_FRAME
导致与更新区域相交的窗口的任何非工作区部分接收WM_NCPAINT
消息。 还必须指定RDW_INVALIDATE
标志;否则RDW_FRAME
不起作用。RDW_INTERNALPAINT
导致将WM_PAINT
消息发布到窗口,无论该窗口是否包含无效区域。RDW_INVALIDATE
使lpRectUpdate
或prgnUpdate
失效(只有其中的一个可以不为NULL
)。 如果两者均为NULL
,则整个窗口失效。
以下标志用于使窗口有效:
RDW_NOERASE
抑制任何挂起的WM_ERASEBKGND
消息。RDW_NOFRAME
抑制任何挂起的WM_NCPAINT
消息。 此标志必须与RDW_VALIDATE
结合使用,通常与RDW_NOCHILDREN
结合使用。 请慎用此选项,因为它可能导致无法正确绘制窗口的某些部分。RDW_NOINTERNALPAINT
抑制任何挂起的内部WM_PAINT
消息。 此标志不影响来自无效区域的WM_PAINT
消息。RDW_VALIDATE
使lpRectUpdate
或prgnUpdate
有效(只有其中的一个可以不为NULL
)。 如果两者均为NULL
,则整个窗口有效。 此标志不影响内部WM_PAINT
消息。
以下标志控制何时发生重绘。 除非指定这些位之一,否则 RedrawWindow
函数不会执行绘制。
RDW_ERASENOW
导致受影响的窗口(由RDW_ALLCHILDREN
和RDW_NOCHILDREN
标志指定)在函数返回之前根据需要接收WM_NCPAINT
和WM_ERASEBKGND
消息。 推迟WM_PAINT
消息。RDW_UPDATENOW
导致受影响的窗口(由RDW_ALLCHILDREN
和RDW_NOCHILDREN
标志指定)在函数返回之前根据需要接收WM_NCPAINT
、WM_ERASEBKGND
和WM_PAINT
消息。
默认情况下,受 RedrawWindow
函数影响的窗口取决于指定的窗口是否具有 WS_CLIPCHILDREN
样式。 WS_CLIPCHILDREN
窗口的子窗口不受影响。 但是,不是 WS_CLIPCHILDREN
窗口的窗口在遇到 WS_CLIPCHILDREN
窗口之前将以递归方式生效或失效。 以下标志控制受 RedrawWindow
函数影响的窗口:
RDW_ALLCHILDREN
在重绘操作中包括子窗口(如果有)。RDW_NOCHILDREN
从重绘操作中排除子窗口(如果有)。
如果成功重绘了窗口,则返回非零值;否则返回 0。
当使用 RedrawWindow
成员函数来使桌面窗口的一部分失效时,该窗口不会接收 WM_PAINT
消息。 若要重绘桌面,应用程序应使用 CWnd::ValidateRgn
、CWnd::InvalidateRgn
、CWnd::UpdateWindow
或 RedrawWindow
此消息函数由框架从 OnChildNotify
调用。
BOOL ReflectChildNotify(
UINT message,
WPARAM wParam,
LPARAM lParam,
LRESULT* pResult);
message
指定要反射的消息。
wParam
指定其他消息相关信息。
lParam
指定其他消息相关信息。
pResult
子窗口生成的结果,由父窗口返回。 可以为 NULL
。
如果反射了消息,则返回 TRUE
;否则返回 FALSE
。
它是一个帮助器函数,用于将 message
反射到其源。
反射的消息直接发送到 CWnd::OnWndMsg
或 CCmdTarget::OnCmdMsg
。
有关消息反射的详细信息,请参阅处理反射的消息。
框架调用此成员函数以将最后一条消息反射到子窗口。
static BOOL PASCAL ReflectLastMsg(
HWND hWndChild,
LRESULT* pResult = NULL);
hWndChild
子窗口的句柄。
pResult
子窗口生成的结果,由父窗口返回。 可以为 NULL
。
如果已处理消息,则返回非零值;否则返回 0。
如果 hWndChild
标识的窗口是 OLE 控件或者是永久映射中的窗口,则此成员函数将调用 SendChildNotifyLastMsg
。
有关消息反射的详细信息,请参阅处理反射的消息。
释放设备上下文以供其他应用程序使用。
int ReleaseDC(CDC* pDC);
pDC
标识要释放的设备上下文。
如果成功,则不为 0;否则为 0。
ReleaseDC
成员函数的影响取决于设备上下文类型。
对于每个 ReleaseDC
成员函数调用以及每个 GetWindowDC
成员函数调用,应用程序必须调用 GetDC
成员函数。
调用此函数以在窗口的工作区中重新定位控件条以及调整其大小。
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::reposExtra
将lpRectParam
的值添加到nIDLast
的工作区并执行布局。
lpRectParam
指向 RECT
结构;其用法取决于 nFlag
的值。
lpRectClient
指向包含可用工作区的 RECT
结构。 如果为 NULL
,则将使用窗口的工作区。
bStretch
指示是否应将条拉伸到框架大小。
nIDFirst
和 nIDLast
参数定义要在工作区中重新定位的控件条 ID 范围。 nIDLeftOver
参数指定子窗口(通常是视图)的 ID,将重新定位该子窗口并调整其大小以填充未由控件条填充的工作区其余部分。
调用此成员函数可检索、转换或调度消息,直到 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
。
将显示中的给定点或矩形的屏幕坐标转换为客户端坐标。
void ScreenToClient(LPPOINT lpPoint) const; void ScreenToClient(LPRECT lpRect) const;
lpPoint
指向包含要转换的屏幕坐标的 CPoint
对象或 POINT
结构。
lpRect
指向包含要转换的屏幕坐标的 CRect
对象或 RECT
结构。
ScreenToClient
成员函数将 lpPoint
或 lpRect
中指定的屏幕坐标替换为客户端坐标。 新坐标相对于 CWnd
工作区的左上角。
请参阅 CListCtrl::GetItemRect
的示例。
滚动当前 CWnd
对象的工作区内容。
void ScrollWindow(
int xAmount,
int yAmount,
LPCRECT lpRect = NULL,
LPCRECT lpClipRect = NULL);
xAmount
指定水平滚动的量(以设备单位表示)。 此参数必须是负值才能向左滚动。
yAmount
指定垂直滚动的量(以设备单位表示)。 此参数必须是负值才能向上滚动。
lpRect
指向指定要滚动的工作区部分的 CRect
对象或 RECT
结构。 如果 lpRect
为 NULL
,则滚动整个工作区。 如果光标矩形与滚动矩形相交,则重新定位插入点。
lpClipRect
指向指定要滚动的裁剪矩形的 CRect
对象或 RECT
结构。 仅滚动此矩形内的位。 即使矩形外部的位在 lpRect
矩形中,它们也不受影响。 如果 lpClipRect
为 NULL
,则不对滚动矩形执行任何剪裁。
如果插入点位于正在滚动的 CWnd
中,则 ScrollWindow
会自动隐藏插入点以防止将其擦除,然后在滚动完成后还原插入点。 插入点位置会相应地调整。
ScrollWindow
成员函数未覆盖的区域不会重绘,而是合并到当前 CWnd
对象的更新区域中。 应用程序最终将收到一条 WM_PAINT
消息,通知它该区域需要重绘。 若要在完成滚动的同时重绘未覆盖的区域,请在调用 ScrollWindow
后立即调用 UpdateWindow
成员函数。
如果 lpRect
为 NULL
,则窗口中任何子窗口的位置将偏移由 xAmount
和 yAmount
指定的量,并且 CWnd
中的任何无效(未绘制)区域也会偏移。 当 lpRect
为 NULL
时,ScrollWindow
速度更快。
如果 lpRect
不是 NULL
,则子窗口的位置不会更改,CWnd
中的无效区域不会偏移。 为防止在 lpRect
不是 NULL
时出现更新问题,请在调用 ScrollWindow
之前调用 UpdateWindow
成员函数以重绘 CWnd
。
滚动窗口工作区的内容。
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
按照dx
和dy
中指定的像素数滚动与lpRectScroll
指向的矩形相交的所有子窗口。 Windows 向与lpRectScroll
相交的所有子窗口发送WM_MOVE
消息,即使这些窗口未移动。 当滚动子窗口并且光标矩形与滚动矩形相交时,将重新定位插入点。
如果该函数成功,则返回值为 SIMPLEREGION
(矩形失效区域)、COMPLEXREGION
(非矩形失效区域;重叠矩形)或 NULLREGION
(无失效区域);否则返回值为 ERROR
。
此函数类似于 ScrollWindow
函数,但具有一些附加功能。
如果未指定 SW_INVALIDATE
和 SW_ERASE
,则 ScrollWindowEx
成员函数不会使滚离的区域失效。 如果设置了其中的任一标志,ScrollWindowEx
将使此区域失效。 在应用程序调用 UpdateWindow
成员函数、调用 RedrawWindow
成员函数(指定 RDW_UPDATENOW
或 RDW_ERASENOW
)或从应用程序队列中检索 WM_PAINT
消息之前,该区域不会更新。
如果窗口具有 WS_CLIPCHILDREN
样式,则 prgnUpdate
和 lpRectUpdate
指定的返回区域表示滚动窗口的必须更新的总区域范围,包括子窗口中需要更新的任何区域范围。
如果指定了 SW_SCROLLCHILDREN
标志,在滚动子窗口的一部分后,Windows 无法正确更新屏幕。 已滚动子窗口的位于源矩形之外的部分不会擦除,并且不会在其新目标中正确重绘。 使用 DeferWindowPos
Windows 函数移动不完全位于 lpRectScroll
矩形内的子窗口。 如果设置了 SW_SCROLLCHILDREN
标志并且插入点矩形与滚动矩形相交,则重新定位光标。
假设所有输入和输出坐标(对应于 lpRectScroll
、lpRectClip
、lpRectUpdate
和 prgnUpdate
)以客户端坐标表示,无论窗口是否具有 CS_OWNDC
或 CS_CLASSDC
类样式。 如有必要,请使用 LPtoDP
和 DPtoLP
Windows 函数在逻辑坐标之间进行转换。
框架调用此成员函数以从父窗口向子窗口提供通知消息,使子窗口能够处理任务。
BOOL SendChildNotifyLastMsg(LRESULT* pResult = NULL);
pResult
子窗口生成的结果,由父窗口返回。
如果子窗口已处理发送到其父级的消息,则返回非零值;否则返回 0。
如果当前消息是反射的消息,则 SendChildNotifyLastMsg
会将其发送到源。
有关消息反射的详细信息,请参阅处理反射的消息。
向控件发送消息。
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));
}
将指定的消息发送到此窗口。
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();
}
}
调用此成员函数可将指定的 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。
如果 bDeep
为 FALSE
,则消息只发送到窗口的直接子级;否则消息将发送到所有后代窗口。
如果 bDeep
和 bOnlyPerm
为 TRUE
,则在暂时性窗口下继续搜索。 在这种情况下,只有在搜索过程中遇到的永久性窗口才会接收消息。 如果 bDeep
为 FALSE
,则消息只发送到窗口的直接子级。
// 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)
将指定的消息发送到窗口。
BOOL SendNotifyMessage(
UINT message,
WPARAM wParam,
LPARAM lParam);
message
指定要发送的消息。
wParam
指定其他消息相关信息。
lParam
指定其他消息相关信息。
如果该函数成功,则为非 0;否则为 0。
如果窗口是由调用线程创建的,则 SendNotifyMessage
将针对该窗口调用窗口过程,并且在窗口过程处理完消息之前不会返回。 如果窗口是由其他线程创建的,则 SendNotifyMessage
会将消息传递给窗口过程并立即返回;它不会等待窗口过程完成消息处理。
使 CWnd
成为活动窗口。
CWnd* SetActiveWindow();
先前处于活动状态的窗口。
返回的指针可能是暂时性的,不应存储它以供稍后使用。
应慎用 SetActiveWindow
成员函数,因为它允许应用程序任意接管活动窗口和输入焦点。 正常情况下,Windows 会负责处理所有激活。
使所有后续鼠标输入发送到当前 CWnd
对象,而不管光标位置如何。
CWnd* SetCapture();
指向先前接收所有鼠标输入的窗口对象的指针。 如果没有此类窗口,则返回值为 NULL
。 返回的指针可能是暂时性的,不应存储它以供稍后使用。
当 CWnd
不再需要所有鼠标输入时,应用程序应调用 ReleaseCapture
函数,以便其他窗口可以接收鼠标输入。
捕获鼠标输入时,不会向活动窗口发送 WM_NCHITTEST
或 WM_SETCURSOR
消息。
设置插入点的位置。
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);
}
将此窗口添加到每当剪贴板内容发生更改时向其发出通知(通过 WM_DRAWCLIPBOARD
消息)的窗口链中。
HWND SetClipboardViewer();
如果成功,则返回剪贴板查看器链中下一个窗口的句柄。 应用程序应保存此句柄(可将其存储为成员变量),并在响应剪贴板查看器链消息时使用它。
作为剪贴板查看器链一部分的窗口必须响应 WM_DRAWCLIPBOARD
、WM_CHANGECBCHAIN
和 WM_DESTROY
消息,并将消息传递给链中的下一个窗口。
此成员函数向窗口发送 WM_DRAWCLIPBOARD
消息。 由于尚未返回剪贴板查看器链中下一个窗口的句柄,因此应用程序不应传递它在 WM_DRAWCLIPBOARD
调用期间收到的 SetClipboardViewer
消息。
若要从剪贴板查看器链中删除自身,应用程序必须调用 ChangeClipboardChain
成员函数。
将窗口的窗口 ID 或控件 ID 设置为新值。
int SetDlgCtrlID(int nID);
nID
为控件标识符设置的新值。
如果成功,则返回窗口的前一个标识符;否则返回 0。
该窗口可为任一子窗口,而不仅仅是对话框中的控件。 该窗口不能是顶级窗口。
将对话框中给定控件的文本设置为指定的整数值的字符串表示形式。
void SetDlgItemInt(
int nID,
UINT nValue,
BOOL bSigned = TRUE);
nID
指定要更改的控件的整数 ID。
nValue
指定用于生成项文本的整数值。
bSigned
指定整数值是有符号还是无符号。 如果此参数为 TRUE
,则 nValue
有符号。 如果此参数为 TRUE
且 nValue
小于 0,则在字符串中第一个数字之前添加一个负号。 如果此参数为 FALSE
,则 nValue
无符号。
SetDlgItemInt
向给定的控件发送 WM_SETTEXT
消息。
请参阅 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);
将创建窗口的线程置于前台,并激活窗口。
BOOL SetForegroundWindow();
如果该函数成功,则为非 0;否则为 0。
键盘输入将定向到窗口,并为用户更改各种视觉提示。 前台窗口是用户当前正在使用的窗口。 前台窗口仅适用于顶级窗口(框架窗口或对话框)。
请参阅 CWnd::FindWindow
的示例。
声明输入焦点。
CWnd* SetFocus();
指向先前具有输入焦点的窗口对象的指针。 如果没有此类窗口,则返回值为 NULL
。 返回的指针可能是暂时性的,请不要存储它。
输入焦点将所有后续键盘输入定向到此窗口。 以前具有输入焦点的任何窗口都会失去它。
SetFocus
成员函数向失去输入焦点的窗口发送 WM_KILLFOCUS
消息,向接收输入焦点的窗口发送 WM_SETFOCUS
消息。 它还会激活窗口或其父级。
如果当前窗口处于活动状态但没有焦点(即没有任何窗口具有焦点),则按下任何键都会生成消息 WM_SYSCHAR
、WM_SYSKEYDOWN
或 WM_SYSKEYUP
。
将 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
消息定义一个方法处理程序。
调用此成员函数可将句柄设置为由 hIcon
标识的特定图标。
HICON SetIcon(
HICON hIcon,
BOOL bBigIcon);
hIcon
上一个图标的句柄。
bBigIcon
如果为 TRUE
,则指定一个 32 x 32 像素的图标;如果为 FALSE
,则指定一个 16 x 16 像素的图标。
图标的图柄。
注册窗口类时,它会选择一个图标。
请参阅 CWnd::GetSystemMenu
的示例。
设置分层窗口的不透明度和透明度颜色键。
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 中所述。
将当前菜单设置为指定的菜单。
BOOL SetMenu(CMenu* pMenu);
pMenu
标识新菜单。 如果此参数为 NULL
,则删除当前菜单。
如果菜单已更改,则返回非零值;否则返回 0。
导致重绘窗口以反映菜单更改。
SetMenu
不会销毁先前的菜单。 应用程序应调用 CMenu::DestroyMenu
成员函数来完成此任务。
请参阅 CMenu::LoadMenu
的示例。
将当前窗口的所有者设置为指定的窗口对象。
void SetOwner(CWnd* pOwnerWnd);
pOwnerWnd
标识窗口对象的新所有者。 如果此参数为 NULL
,则窗口对象没有所有者。
然后,此所有者可以从当前窗口对象接收命令消息。 默认情况下,当前窗口的父级是其所有者。
在与窗口层次结构不相关的窗口对象之间建立连接通常很有用。 例如,CToolBar
将通知发送到其所有者而不是其父级。 这样,工具栏就能变成一个窗口(例如 OLE 容器应用程序窗口)的子级,同时可将通知发送到另一个窗口(例如就地框架窗口)。 此外,在进行就地编辑期间停用或激活服务器窗口时,框架窗口拥有的任何窗口都将隐藏或显示。 这种所有权是通过 SetOwner
调用显式设置的。
此函数的所有权概念不同于 GetWindow
的所有权概念。
更改子窗口的父窗口。
CWnd* SetParent(CWnd* pWndNewParent);
pWndNewParent
标识新的父窗口。
如果成功,则返回指向上一个父窗口对象的指针。 返回的指针可能是暂时性的,不应存储它以供稍后使用。
如果子窗口可见,Windows 将执行相应的重绘。
调用此成员函数可设置 dwDispID
指定的 OLE 控件属性。
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
dwDispID
标识要设置的属性。
vtProp
指定要设置的属性的类型。 有关可能的值,请参阅 COleDispatchDriver::InvokeHelper
的“注解”部分。
...
由 vtProp
指定的类型的单个参数。
备注
只能对表示 OLE 控件的 CWnd
对象调用此函数。
有关将此成员函数用于 OLE 控件容器的详细信息,请参阅 ActiveX 控件容器:对 ActiveX 控件容器中的 ActiveX 控件编程一文。
应用程序调用 SetRedraw
以允许重绘更改或防止重绘更改。
void SetRedraw(BOOL bRedraw = TRUE);
bRedraw
指定重绘标志的状态。 如果此参数为 TRUE
,则设置重绘标志;如果 FALSE
,则清除该标志。
此成员函数设置或清除重绘标志。 在清除重绘标志时,每次更改后不会更新内容,并且在设置重绘标志之前不会重绘内容。 例如,需要将多个项添加到列表框的应用程序可以清除重绘标志,添加项,然后设置重绘标志。 最后,应用程序可以调用 Invalidate
或 InvalidateRect
成员函数来导致重绘列表框。
// 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();
调用此成员函数可设置 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
指定是否应重绘滚动条以反映新位置。 如果 bRedraw
为 TRUE
,则重绘滚动条。 如果为 FALSE
,则不重绘滚动条。 默认情况下,滚动条会重新绘制。
如果成功,则返回值为 TRUE
。 否则为 FALSE
。
SCROLLINFO
结构包含有关滚动条的信息,包括最小和最大滚动位置、页面大小以及滚动框 (Thumb) 的位置。 若要详细了解如何更改结构默认值,请参阅 Windows SDK 中的 SCROLLINFO
结构主题。
指示滚动条位置的 MFC Windows 消息处理程序 CWnd::OnHScroll
和 CWnd::OnVScroll
仅提供 16 位位置数据。 GetScrollInfo
和 SetScrollInfo
提供 32 位滚动条位置数据。 因此,应用程序可以在处理 CWnd::OnHScroll
或 CWnd::OnVScroll
以获取 32 位滚动条位置数据时调用 GetScrollInfo
。
备注
CWnd::GetScrollInfo
使应用程序能够使用 32 位滚动条位置。
设置滚动框的当前位置,并根据请求重绘滚动条以反映滚动框的新位置。
int SetScrollPos(
int nBar,
int nPos,
BOOL bRedraw = TRUE);
nBar
指定要设置的滚动条。 此参数可为下列任一项:
SB_HORZ
设置滚动框在窗口水平滚动条中的位置。SB_VERT
设置滚动框在窗口垂直滚动条中的位置。
nPos
指定滚动框的新位置。 它必须在滚动范围内。
bRedraw
指定是否应重绘滚动条以反映新的滚动框位置。 如果此参数为 TRUE
,则重绘滚动条;如果为 FALSE
,则不会重绘滚动条。
滚动框的先前位置。
如果后续调用另一个函数会重绘滚动条,则将 bRedraw
设置为 FALSE
很有用。
设置给定滚动条的最小和最大位置值。
void SetScrollRange(
int nBar,
int nMinPos,
int nMaxPos,
BOOL bRedraw = TRUE);
nBar
指定要设置的滚动条。 此参数可以是以下值之一:
SB_HORZ
设置窗口水平滚动条的范围。SB_VERT
设置窗口垂直滚动条的范围。
nMinPos
指定最小滚动位置。
nMaxPos
指定最大滚动位置。
bRedraw
指定是否应重新绘制滚动条以反映更改。 如果 bRedraw
为 TRUE
,则重绘滚动条;如果为 FALSE
,则不重绘滚动条。
它还可用于隐藏或显示标准滚动条。
在处理滚动条通知消息时,应用程序不应调用此函数来隐藏滚动条。
如果在调用 SetScrollPos
成员函数之后立即调用 SetScrollRange
,则 SetScrollPos
成员函数中的 bRedraw
参数应为 0,以防止滚动条绘制两次。
标准滚动条的默认范围为 0 到 100。 滚动条控件的默认范围为空(nMinPos
和 nMaxPos
值均为 0)。 nMinPos
和 nMaxPos
指定的值之差不得大于 INT_MAX
。
安装系统计时器。
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::SetTimer
、CWnd::OnTimer
和 CWnd::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);
}
调用此成员函数可将帮助上下文标识符与指定的窗口相关联。
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);
设置窗口的显示状态以及正常(已还原)、最小化和最大化位置。
BOOL SetWindowPlacement(const WINDOWPLACEMENT* lpwndpl);
lpwndpl
指向指定新显示状态和位置的 WINDOWPLACEMENT
结构。
如果该函数成功,则为非 0;否则为 0。
更改子窗口、弹出窗口和顶级窗口的大小、位置和 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
保留当前位置(忽略x
和y
参数)。SWP_NOOWNERZORDER
不更改所有者窗口在 Z 顺序中的位置。SWP_NOREDRAW
不重绘更改。 如果设置了此标志,则不执行任何形式的重绘。 这适用于工作区、非工作区(包括标题和滚动条),以及由于移动窗口而显示的任何父窗口部分。 如果设置了此标志,应用程序必须显式使该窗口和父窗口的任何部分失效,或重绘必须重绘的部分。SWP_NOREPOSITION
与SWP_NOOWNERZORDER
相同。SWP_NOSENDCHANGING
防止窗口接收WM_WINDOWPOSCHANGING
消息。SWP_NOSIZE
保留当前大小(忽略cx
和cy
参数)。SWP_NOZORDER
保留当前顺序(忽略pWndInsertAfter
)。SWP_SHOWWINDOW
显示窗口。
如果该函数成功,则返回非零值;否则返回 0。
窗口在屏幕上按照 Z 顺序排列;Z 顺序顶部的窗口显示在该顺序中所有其他窗口的顶部。
子窗口的所有坐标都是客户端坐标(相对于父窗口工作区的左上角)。
通过将 pWndInsertAfter
参数设置为 &wndTopMost
并确保不设置 SWP_NOZORDER
标志,或者通过设置窗口的 Z 顺序来使其位于任何现有最顶部窗口之上,可将窗口移到 Z 顺序的顶部。 当非最顶部窗口成为最顶部窗口时,它拥有的窗口也将成为最顶部窗口。 它的所有者不会更改。
如果将最顶部窗口重新定位到 Z 顺序的底部 (&wndBottom
) 或定位在任何非最顶部窗口之后,则该窗口不再位于最顶部。 当最顶部窗口变为非最顶部窗口时,其全部所有者及其拥有的窗口也将变为非最顶部窗口。
如果 SWP_NOACTIVATE
和 SWP_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);
}
调用此成员函数可设置窗口的区域。
int SetWindowRgn(
HRGN hRgn,
BOOL bRedraw);
hRgn
区域的句柄。
bRedraw
如果为 TRUE
,则操作系统将在设置区域后重绘窗口;否则不重绘。 如果窗口可见,通常会将 bRedraw
设置为 TRUE
。 如果设置为 TRUE
,则系统会将 WM_WINDOWPOSCHANGING
和 WM_WINDOWPOSCHANGED
消息发送到窗口。
如果该函数成功,则返回值为非零值。 如果函数失败,则返回值为零。
窗口的窗口区域坐标相对于窗口的左上角,而不是窗口的工作区。
成功调用 SetWindowRgn
后,操作系统将拥有区域句柄 hRgn
指定的区域。 操作系统不创建该区域的副本,因此请不要使用此区域句柄发出任何其他函数调用,也不要关闭此区域句柄。
将窗口的标题设置为指定的文本。
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);
在屏幕上的当前插入点位置显示插入点。
void ShowCaret();
显示之后,插入符号开始自动闪烁。
仅当插入点具有当前形状且未连续两次或更多次隐藏时,ShowCaret
成员函数才显示插入点。 如果插入点不由此窗口拥有,则不显示插入点。
插入点隐藏次数是累积性的。 如果已连续调用 HideCaret
成员函数五次,则必须调用 ShowCaret
五次才能显示插入点。
插入点是共享资源。 仅当窗口具有输入焦点或处于活动状态时,它才应显示插入点。
请参阅 CWnd::CreateCaret
的示例。
显示或隐藏此窗口拥有的所有弹出窗口。
void ShowOwnedPopups(BOOL bShow = TRUE);
bShow
指定是要显示还是隐藏弹出窗口。 如果此参数为 TRUE
,则显示所有已隐藏的弹出窗口。 如果此参数为 FALSE
,则隐藏所有可见的弹出窗口。
请参阅 CWnd::SetWindowPos
的示例。
显示或隐藏滚动条。
void ShowScrollBar(
UINT nBar,
BOOL bShow = TRUE);
nBar
指定滚动条是控件,还是窗口的非工作区的一部分。 如果它是非工作区的一部分,则 nBar
还会指示滚动条是水平定位、垂直定位还是同时采用这两种定位方式。 必须是下列其中一项:
SB_BOTH
指定窗口的水平和垂直滚动条。SB_HORZ
指定窗口是水平滚动条。SB_VERT
指定窗口是垂直滚动条。
bShow
指定 Windows 是显示还是隐藏滚动条。 如果此参数为 TRUE
,则显示滚动条;否则隐藏滚动条。
在处理滚动条通知消息时,应用程序不应调用 ShowScrollBar
来隐藏滚动条。
设置窗口的可见性状态。
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
对象。
BOOL SubclassDlgItem(
UINT nID,
CWnd* pParent);
nID
控件的 ID。
pParent
控件的父级(通常是对话框)。
如果该函数成功,则为非 0;否则为 0。
动态子类化某个控件时,窗口消息将通过 CWnd
的消息映射路由并首先调用 CWnd
的类中的消息处理程序。 传递给基类的消息将传递给控件中的默认消息处理程序。
此成员函数将 Windows 控件附加到 CWnd
对象并替换控件的 WndProc
和 AfxWndProc
函数。 该函数将旧的 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
对象。
BOOL SubclassWindow(HWND hWnd);
hWnd
窗口的句柄。
如果该函数成功,则为非 0;否则为 0。
动态子类化某个窗口时,窗口消息将通过 CWnd
的消息映射路由并首先调用 CWnd
的类中的消息处理程序。 传递给基类的消息将传递给窗口中的默认消息处理程序。
此成员函数将 Windows 控件附加到 CWnd
对象并替换窗口的 WndProc
和 AfxWndProc
函数。 该函数将指向旧 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::LockWindowUpdate
锁定的窗口。
void UnlockWindowUpdate();
每次只能使用 LockWindowUpdate
锁定一个窗口。 有关锁定窗口的详细信息,请参阅 CWnd::LockWindowUpdate
或 Win32 函数 LockWindowUpdate
。
调用此成员函数可将 WndProc
设置回其原始值,并将由 HWND 标识的窗口从 CWnd
对象分离。
HWND UnsubclassWindow();
未子类化的窗口的句柄。
请参阅 CWnd::SubclassWindow
的示例。
调用此成员函数可初始化对话框中的数据,或者检索和验证对话框数据。
BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
bSaveAndValidate
指示是正在初始化对话框 (FALSE
) 还是正在检索数据 (TRUE
) 的标志。
如果操作成功,则返回非零值;否则返回 0。 如果 bSaveAndValidate
为 TRUE
,则非零返回值表示数据已成功验证。
在 CDialog::OnInitDialog
的默认实现中创建模式对话框时,框架会在将 bSaveAndValidate
设置为 FALSE
的情况下自动调用 UpdateData
。 该调用发生在对话框可见之前。 CDialog::OnOK
的默认实现在将 bSaveAndValidate
设置为 TRUE
的情况下调用此成员函数以检索数据,如果成功,则关闭对话框。 (如果在对话框中单击“取消”按钮,则对话框将关闭且不检索数据。)
调用此成员函数可更新使用 ON_UPDATE_COMMAND_UI
回调机制的对话框或窗口中对话框按钮和其他控件的状态。
void UpdateDialogControls(
CCmdTarget* pTarget,
BOOL bDisableIfNoHndler);
pTarget
指向应用程序的主框架窗口,用于路由更新消息。
bDisableIfNoHndler
指示是否应将没有更新处理程序的控件自动显示为已禁用的标志。
如果子控件没有处理程序且 bDisableIfNoHndler
为 TRUE
,则将禁用该子控件。
在进行应用程序空闲处理过程中,框架将对对话框栏或工具栏中的控件调用此成员函数。
更新分层窗口的位置、大小、形状、内容和透明度。
BOOL UpdateLayeredWindow(
CDC* pDCDst,
POINT* pptDst,
SIZE* psize,
CDC* pDCSrc,
POINT* pptSrc,
COLORREF crKey,
BLENDFUNCTION* pblend,
DWORD dwFlags);
pDCDst
指向屏幕设备上下文的指针。 它用于在更新窗口内容时进行调色板颜色匹配。 如果 pDCDst
为 NULL
,将使用默认调色板。
如果 pDCSrc
为 NULL
,则 pDCDst
必须为 NULL
。
pptDst
指向 POINT
结构的指针,该结构指定分层窗口的新屏幕位置。 如果当前位置不会更改,则 pptDst
可为 NULL
。
psize
指向 SIZE
结构的指针,该结构指定分层窗口的新大小。 如果窗口大小不会更改,则 psize
可为 NULL
。
如果 pDCSrc
为 NULL
,则 psize
必须为 NULL
。
pDCSrc
指向定义分层窗口的表面的 DC 的指针。 如果窗口的形状和视觉上下文不会更改,则 pDCSrc
可为 NULL
。
pptSrc
指向 POINT
结构的指针,该结构指定层在设备上下文中的位置。
如果 pDCSrc
为 NULL
,则 pptSrc
应为 NULL
。
crKey
指向 COLORREF
值的指针,该值指定组合分层窗口时要使用的透明度颜色键。 窗口以这种颜色绘制的所有像素都是透明的。 若要生成 COLORREF
,请使用 RGB 宏。
pblend
指向 BLENDFUNCTION
结构的指针,该结构指定组合分层窗口时要使用的透明度值。
dwFlags
指定要执行的操作。 此参数可使用以下一个或多个值。 有关可能值的列表,请参阅 UpdateLayeredWindow
。
如果函数成功,则为非零值;否则为
此成员函数模拟 UpdateLayeredWindow
函数的功能,如 Windows SDK 中所述。
如果更新区域不为空,则通过发送 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);
}
通过从窗口的更新区域中删除矩形来验证给定矩形中的工作区。
void ValidateRect(LPCRECT lpRect);
lpRect
指向 CRect
对象或 RECT
结构,其中包含要从更新区域中删除的矩形的客户端坐标。 如果 lpRect
为 NULL
,则验证整个窗口。
BeginPaint
成员函数自动验证整个工作区。 如果在下次生成 WM_PAINT
之前需要验证更新区域的一部分,则不应调用 ValidateRect
和 ValidateRgn
成员函数。
Windows 将继续生成 WM_PAINT
消息,直到当前更新区域已验证。
通过从窗口的当前更新区域中删除区域来验证给定区域中的工作区。
void ValidateRgn(CRgn* pRgn);
pRgn
指向用于标识一个区域的 CRgn
对象的指针,该区域定义要从更新区域中删除的区域。 如果此参数为 NULL
,则删除整个工作区。
给定的区域必须事先已由 region 函数创建。 假设区域坐标是客户端坐标。
BeginPaint
成员函数自动验证整个工作区。 如果在生成下一条 WM_PAINT
消息之前必须验证更新区域的一部分,则不应调用 ValidateRect
和 ValidateRgn
成员函数。
检索包含指定点的窗口;point
必须指定屏幕上某个点的屏幕坐标。
static CWnd* PASCAL WindowFromPoint(POINT point);
point
指定用于定义要检查的点的 CPoint
对象或 POINT
数据结构。
指向该点所在的窗口对象的指针。 如果没有任何窗口位于给定的点处,则返回值为 NULL
。 返回的指针可能是暂时性的,不应存储它以供稍后使用。
WindowFromPoint
不检索已隐藏或禁用的窗口,即使该点位于窗口内。 应用程序应使用 ChildWindowFromPoint
成员函数进行非限制性搜索。
为 CWnd
对象提供 Windows 过程 (WindowProc
)。
virtual LRESULT WindowProc(
UINT message,
WPARAM wParam,
LPARAM lParam);
message
指定要处理的 Windows 消息。
wParam
提供处理消息时使用的其他信息。 参数值取决于消息。
lParam
提供处理消息时使用的其他信息。 参数值取决于消息。
返回值取决于消息。
它通过窗口的消息映射来调度消息。
调用以启动 WinHelp 应用程序。
virtual void WinHelp(
DWORD_PTR dwData,
UINT nCmd = HELP_CONTEXT);
dwData
指定其他数据。 使用的值取决于 nCmd
参数的值。
nCmd
指定请求的帮助的类型。 有关可能值的列表及其如何影响 dwData
参数,请参阅 Windows SDK 中的 WinHelp
Windows 函数。
有关详细信息,请参阅CWinApp::WinHelp
。
注册或取消注册 Windows 触摸支持。
BOOL RegisterTouchWindow(
BOOL bRegister = TRUE,
ULONG ulFlags = 0);
bRegister
TRUE
表示注册 Windows 触摸支持;FALSE
表示不注册。
ulFlags
一组用于指定可选修改的位标志。 此字段可包含 0 或以下值之一:TWF_FINETOUCH
、TWF_WANTPALM
。
如果成功,则返回 TRUE
;否则返回 FALSE
。
如果对窗口启用了动态布局,则窗口大小更改以调整子窗口布局时会通过框架调用。
virtual void ResizeDynamicLayout();