小编Sti*_*ggy的帖子

在WPF窗口中托管外部应用程序

我们正在开发WPF中的布局管理器,其具有可由用户移动/调整大小/等的视口.视口通常通过布局管理器中我们控制的提供程序填充数据(图片/电影/等).我的工作是检查它是否也可以在视口中托管任何外部Windows应用程序(即记事本,计算,土坯阅读器等).我遇到了一些问题.

大多数资源都指向使用HwndHost类.我正在试验微软本身的演练:http://msdn.microsoft.com/en-us/library/ms752055.aspx

我已经对此进行了调整,因此列表框将替换为外部应用程序的Windows句柄.任何人都可以帮我解决这些问题:

  1. 演练添加了一个额外的静态子窗口,其中ListBox放置了该子窗口.我不认为我需要外部应用程序.如果我省略它,我必须使外部应用程序成为子窗口(使用来自user32.dll的Get/SetWindowLong设置GWL_STYLEWS_CHILD).但是,如果我这样做,应用程序的菜单栏消失(因为WS_CHILD样式),它不再接收输入.
  2. 如果我确实使用子窗口,并使外部应用程序成为合理的工作的孩子,但有时外部应用程序不能正常工作.
  3. 此外,我需要子窗口调整大小到视口.这可能吗?
  4. 当exernal应用程序生成子窗口(即记事本 - >帮助 - >关于)时,此窗口不由托管HwndHost(因此可以移动到视口外).有什么办法可以阻止吗?
  5. 由于我不需要外部应用程序和布局管理器之间的进一步交互,我是否正确地假设我不需要捕获和转发消息?(演练将HwndSourceHook添加到子窗口以捕获列表框中的选择更改).
  6. 当您运行(未修改的)示例VS2010并关闭窗口时,VS2010看不到程序已结束.如果你打破所有,你最终会在没有来源的情况下进行组装.有点臭,但我找不到.
  7. 演练本身似乎非常草率编码,但我没有找到关于这个主题的更好的文档.还有其他例子吗?
  8. 另一种方法是不使用HwndHost,但WindowsFormHost作为讨论在这里.它工作(并且更简单!)但我无法控制应用程序的大小?另外,WinFormHost真的不是这个意思吗?

感谢您指出正确的方向.

c# wpf winapi hwndhost

38
推荐指数
3
解决办法
4万
查看次数

标签 统计

c# ×1

hwndhost ×1

winapi ×1

wpf ×1