- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的 WPF 应用程序中,我必须让用户选择一个证书。我通过 X509Certificate2UI.SelectFromCollection 方法执行此操作。为了正确处理对话框,SelectFromCollection 方法需要父 Hwnd 的 IntPtr。我找到了以下代码来提供此功能:
HwndSource source = (HwndSource)HwndSource.FromVisual(Window.GetWindow(this));
var certificates= X509Certificate2UI.SelectFromCollection(...,source.Handle);
到目前为止,一切正常。我的问题是,因为我对 Win32 或互操作知之甚少,如果我必须在此之后做一些清理代码,或者像我上面那样使用 HwndSource 类是否有一些陷阱?
我已经看到 HwndSource 实现了 IDisposable,但在使用后处置该对象会关闭父窗口。因此这似乎不是预期的用途。
最佳答案
WPF窗口由两部分组成:
现在,作为 ContentControl 的 WPF 窗口将所有内容作为其内容。所以你可以说 Window 类中 Content 的每个像素都由 Outside 窗口保存。 WPF 的每个 Visual 都没有自己的与之关联的 HANDLE,而是外部窗口元素的内容。
有关详细信息,请参阅此 - http://www.abhisheksur.com/2010/12/win32-handle-hwnd-wpf-objects-note.html
因此,当您处理该句柄时,您实际上是在处理您的主窗口处理程序,这会导致整个应用程序的关闭。
因此,你在这里只是获取你的窗口处理程序,而不是创建任何你可能需要处理的东西..!!
关于c# - 如何使用HwndSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082895/
我正在使用 HwndSource在不是主窗口的 WPF 窗口中,为了 Hook 窗口过程 (WndProc) 以接收一些消息: WinSource = HwndSource.FromHwnd(new
我正在 .net 4.0 中构建 C# 应用程序。出于某种原因,我无法使这段代码工作: HwndSource Source; Source = HwndSource.FromHwnd(new Wind
我正在尝试“ Hook ”到窗口的消息中以检测最小化/最大化。我环顾四周,认为唯一/最好的解决方案是挂接到窗口的消息,检查 WM_WINDOWPOSCHANGED 消息,然后检查它的状态。 我遇到了一
我有一段代码如下: IntPtr hWnd = new WindowInteropHelper(this).Handle; HwndSource source = HwndSource.FromHwn
我需要通过 Handle 在其他窗口中托管我的 WPF UserControl。我试过使用 HwndSource: var userControl = new MyUserControl(); var
我的公司有一个大型的遗留 Delphi 应用程序,我们正试图将其逐渐迁移到 .Net 框架。我们已经决定使用 WPF 实现新的 GUI 元素并通过 COM 公开它们。我相信这是相当标准的,因为我在网上
我有一个用原生 C++ 编写的 MFC 应用程序,它不能使用\clr。我需要在这个 MFC 应用程序的框架内显示一个 WPF 窗口,所以我试图用混合 C++(cli) 制作一个包装器,它包含这个 WP
我是一名优秀的程序员,十分优秀!