- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要通过 Handle 在其他窗口中托管我的 WPF UserControl。我试过使用 HwndSource:
var userControl = new MyUserControl();
var parameters = new HwndSourceParameters();
parameters.WindowStyle = 0x10000000 | 0x40000000;
parameters.SetPosition(5, 5);
parameters.SetSize(300, 300);
parameters.ParentWindow = parentWindowHwnd;
var src = new HwndSource(parameters);
src.RootVisual = userControl;
但在这种情况下,箭头和 Tab 键不起作用。
如果我使用 ElementHost 一切正常:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
var userControl = new UserControl1();
var elementHost = new ElementHost();
elementHost.Child = userControl;
elementHost.Left = 5;
elementHost.Top = 5;
elementHost.Width = 300;
elementHost.Height = 300;
SetParent(elementHost.Handle, parentWindowHwnd);
如何使用 HwndSource 获得全部功能?
最佳答案
当您使用 HwndSource 时,您必须为 Windows 消息注册一个处理程序。
这可以通过调用来完成:
src.AddHook(this.messageHook);
Hook 必须检查 wm_getdlgcode 消息。
private IntPtr messageHook(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
{
switch (msg)
{
case WmGetDlgCode:
{
handled = true;
return (IntPtr)(DlgcWantChars | DlgcWantTab | DlgcWantArrows | DlgcWantAllKeys);
}
}
return IntPtr.Zero;
}
通过 Dlgc_WantChars、Dlgc_WantTab、Dlgc_WantArrows 和 Dlgc_WantAllKeys 返回您需要的内容。
检查此消息和代码: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645425(v=vs.85).aspx
private const int WmGetDlgCode = 0x0087;
private const int DlgcWantChars = 0x0080;
private const int DlgcWantTab = 0x0002;
private const int DlgcWantAllKeys = 0x0004;
private const int DlgcWantArrows = 0x0001;
关于c# - 使用 HwndSource 在 Win32 应用程序中托管 WPF UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11200721/
我正在使用 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
我是一名优秀的程序员,十分优秀!