HwndSource 类

定义

在 Win32 窗口中呈现 Windows Presentation Foundation (WPF) 内容。

public ref class HwndSource : System::Windows::PresentationSource, IDisposable, System::Windows::Interop::IKeyboardInputSink, System::Windows::Interop::IWin32Window
public class HwndSource : System.Windows.PresentationSource, IDisposable, System.Windows.Interop.IKeyboardInputSink, System.Windows.Interop.IWin32Window
type HwndSource = class
    inherit PresentationSource
    interface IDisposable
    interface IWin32Window
    interface IKeyboardInputSink
type HwndSource = class
    inherit PresentationSource
    interface IDisposable
    interface IKeyboardInputSink
    interface IWin32Window
Public Class HwndSource
Inherits PresentationSource
Implements IDisposable, IKeyboardInputSink, IWin32Window
继承
实现

注解

重要

此类的许多成员在 Internet 安全区域中不可用。

实现 HwndSource 可包含 WPF 内容的 Win32 窗口。 窗口中的 WPF 内容经过排列、测量和呈现;和 与输入交互。 HwndSource由于 专为与 Win32 互操作而设计,因此此类公开了几个低级别的 Win32 功能。 可以使用此类执行以下操作:

  • 指定窗口样式、窗口类样式和扩展窗口样式。

  • 挂钩窗口过程。

  • 提供对 HWND) (窗口句柄的访问权限。

  • 销毁窗口。

HwndSource 旨在实现常规互操作性,而不是设计为托管 HWND 包装器。 通常,它不提供用于操作窗口的托管方法或用于检查其状态的属性。 相反, HwndSource 类通过 Handle 属性提供对 Win32 窗口句柄 (HWND) 的访问权限,该属性可以通过 PInvoke 技术传递给 Win32 API,以便操作窗口。

建筑

的许多方面 HwndSource 只能在构造时指定。 若要创建 , HwndSource请首先创建一个 HwndSourceParameters 结构,并使用所需的参数填充该结构。 这些参数包括:

  • 类、窗口和扩展窗口样式。 创建窗口后,必须使用 PInvoke 更改样式。 创建窗口后,并非所有样式都可以更改。 在更改窗口样式之前,请查阅 Win32 文档。

  • 窗口的初始位置。

  • 窗口的初始大小,包括大小是指定还是应根据 WPF 内容的确定大小确定。

  • 父窗口。

  • HwndSourceHook 包含在窗口过程链中的 。 如果在构造时指定挂钩,它将接收窗口的所有消息。 可以使用 AddHook 在创建窗口后添加挂钩。

  • 透明度设置。 可以根据 WPF 内容的每像素透明度将顶级窗口配置为与桌面上的其他窗口混合。 若要启用此功能,请将 UsesPerPixelOpacity 中的 HwndSourceParameters 属性设置为 true。 此属性只能在构造时指定,并且只能通过 HwndSource(HwndSourceParameters) 构造函数签名指定,并且它施加了几个限制。

填充 HwndSourceParameters 结构后,将其传递给 HwndSource(HwndSourceParameters)HwndSource构造函数。

对象生存期

HwndSource CLR) 对象的常规公共语言运行时 (,其生存期由垃圾回收器管理。 HwndSource由于 表示非托管资源, HwndSource 实现 IDisposable。 如果从所有者线程调用,则同步调用 Dispose 会立即销毁 Win32 窗口。 如果从另一个线程调用,则 Win32 窗口将异步销毁。 对于某些互操作方案,可能需要从互操作代码显式调用 Dispose

窗口过程

HwndSource 实现其自己的窗口过程。 此窗口过程用于处理重要的窗口消息,例如与布局、呈现和输入相关的消息。 但是,也可以挂接窗口过程供自己使用。 可以通过设置 HwndSourceParameters.HwndSourceHook 属性在构造期间指定自己的挂钩,也可以在创建窗口后使用 AddHookRemoveHook 添加和删除挂钩。 挂钩按上进先出顺序调用,这使挂钩能够在内置处理之前执行。 实际挂钩由弱引用保留。 因此,请确保管理挂钩委托的生存期。

有关 和其他互操作类的详细信息 HwndSource ,请参阅 WPF 和 Win32 互操作

请注意 的构造函数 HwndSource 如何采用类似于 Win32 函数的参数(例如 CreateWindowEx)的参数。

缩放转换不应应用于 RootVisualHwndSource。 请参阅 的 RootVisual备注。

构造函数

HwndSource(HwndSourceParameters)

通过使用包含初始设置的结构初始化 HwndSource 类的新实例。

HwndSource(Int32, Int32, Int32, Int32, Int32, Int32, Int32, String, IntPtr)

初始化具有指定类样式、样式、扩展样式、x-y 位置、宽度、高度、名称和父窗口的 HwndSource 类的新实例。

HwndSource(Int32, Int32, Int32, Int32, Int32, Int32, Int32, String, IntPtr, Boolean)

初始化 HwndSource 类的新实例,此实例具有指定的类样式、样式、扩展样式、x-y 位置、宽度、高度、名称和父窗口,并且指示了窗口是否自动调整大小。

HwndSource(Int32, Int32, Int32, Int32, Int32, String, IntPtr)

初始化具有指定类样式、样式、扩展样式、x-y 位置、名称和父窗口的 HwndSource 类的新实例。

属性

AcquireHwndFocusInMenuMode

获取一个值,该值确定是否为此 HwndSource 获取包含窗口的 WPF 的 Win32 焦点。

ChildKeyboardInputSinks

获取一系列注册的输入接收器。

CompositionTarget

获取所承载的窗口的可视化管理器。

DefaultAcquireHwndFocusInMenuMode

获取或设置 AcquireHwndFocusInMenuMode 的新实例的默认 HwndSource 值。

Dispatcher

获取与此 Dispatcher 关联的 DispatcherObject

(继承自 DispatcherObject)
Handle

获取此 HwndSource 的窗口句柄。

IsDisposed

获取一个值,指示是否已对此 Dispose() 调用 HwndSource

KeyboardInputSiteCore

获取或设置对组件容器的 IKeyboardInputSite 接口的引用。

RestoreFocusMode

获取窗口的 RestoreFocusMode

RootVisual

获取或设置窗口的 RootVisual

SizeToContent

获取或设置窗口是否根据其内容调整大小以及如何调整大小。

UsesPerPixelOpacity

获取一个值,该值声明是否遵守源窗口内容的每像素不透明度。

方法

AddHook(HwndSourceHook)

添加接收所有窗口消息的事件处理程序。

AddSource()

PresentationSource 派生类实例添加到已知表示源的列表中。

(继承自 PresentationSource)
CheckAccess()

确定调用线程是否可以访问此 DispatcherObject

(继承自 DispatcherObject)
ClearContentRenderedListeners()

ContentRendered 事件的侦听器列表设置为 null

(继承自 PresentationSource)
CreateHandleRef()

获取 HwndSource 的窗口句柄。 此窗口句柄作为 HandleRef 结构一部分打包。

Dispose()

释放 HwndSource 使用的所有托管资源,并引发 Disposed 事件。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
FromHwnd(IntPtr)

返回指定窗口的 HwndSource 对象。

GetCompositionTargetCore()

获取窗口的可视化目标。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
HasFocusWithinCore()

获取一个值,该值指示接收器或其所包含的组件之一是否具有焦点。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
OnDpiChanged(HwndDpiChangedEventArgs)

在窗口的 DPI 即将变化时进行调用。

OnMnemonicCore(MSG, ModifierKeys)

调用此接收器的助记键(访问键)之一时调用。

RegisterKeyboardInputSinkCore(IKeyboardInputSink)

注册所包含组件的 IKeyboardInputSink 接口。

RemoveHook(HwndSourceHook)

移除 AddHook(HwndSourceHook) 已添加的事件处理程序。

RemoveSource()

从已知表示源的列表中移除 PresentationSource 派生类实例。

(继承自 PresentationSource)
RootChanged(Visual, Visual)

提供根 Visual 已发生更改的通知。

(继承自 PresentationSource)
TabIntoCore(TraversalRequest)

在接收器的第一个制表位或最后一个制表位上设置焦点。

ToString()

返回表示当前对象的字符串。

(继承自 Object)
TranslateAcceleratorCore(MSG, ModifierKeys)

在键按下消息级处理键盘输入。

TranslateCharCore(MSG, ModifierKeys)

在调用 OnMnemonic(MSG, ModifierKeys) 方法之前处理 WM_CHAR、WM_SYSCHAR、WM_DEADCHAR 和 WM_SYSDEADCHAR 输入消息。

VerifyAccess()

强制调用线程具有此 DispatcherObject 的访问权限。

(继承自 DispatcherObject)

事件

AutoResized

当布局导致 HwndSource 自动调整大小时发生。

ContentRendered

在呈现内容并准备开始用户交互时发生。

(继承自 PresentationSource)
Disposed

对此对象调用 Dispose() 方法时发生。

DpiChanged

已更改此 Hwnd 的监视器的 DPI 或 Hwnd 移动到具有不同 DPI 的监视器时发生。

SizeToContentChanged

SizeToContent 属性的值更改时发生。

显式接口实现

IKeyboardInputSink.HasFocusWithin()

有关此成员的说明,请参见 IList.Remove(Object)

IKeyboardInputSink.KeyboardInputSite

有关此成员的说明,请参见 KeyboardInputSite

IKeyboardInputSink.OnMnemonic(MSG, ModifierKeys)

有关此成员的说明,请参见 OnMnemonic(MSG, ModifierKeys)

IKeyboardInputSink.RegisterKeyboardInputSink(IKeyboardInputSink)

有关此成员的说明,请参见 RegisterKeyboardInputSink(IKeyboardInputSink)

IKeyboardInputSink.TabInto(TraversalRequest)

有关此成员的说明,请参见 TabInto(TraversalRequest)

IKeyboardInputSink.TranslateAccelerator(MSG, ModifierKeys)

有关此成员的说明,请参见 TranslateAccelerator(MSG, ModifierKeys)

IKeyboardInputSink.TranslateChar(MSG, ModifierKeys)

有关此成员的说明,请参见 TranslateChar(MSG, ModifierKeys)

适用于

另请参阅