在本机互操作中控制WPF
Controlling WPF in native interop
我正在用本机代码编写一个应用程序,并希望将WPF用于用户界面库。现在,我已经相对容易地完成了互操作,但最终,我正在尝试编写一个本机应用程序,将WPF作为一个库,而不是一个带有一些本机扩展的WPF应用程序。也就是说,我正在寻找一个具有某些质量的互操作解决方案,而这些质量在任何示例中都找不到。
首先,我肯定想写我自己的主循环。我可能会在本机代码中执行任意操作,并且我希望能够在每次迭代中进行轮询。我的应用程序绝对不是一个"在点击某个东西之前睡觉"的应用程序。
其次,我想要控制WPF的能力。我想说的是WPF处理输入的时间。我想说的是它何时渲染。当我这么说的时候,我希望它能让我成为一个萨米人。这是我遇到的更大的问题之一。当然,这些方法必须存在于WPF中,它们只是没有暴露在我能找到的任何地方。
我一直在研究CLR托管,但它似乎没有我想要的那种"直到完成"的东西。即使我打开了一个关键的部分或其他什么,即使是从托管代码中,也没有办法让WPF做你想做的事。
如果我正确理解你的问题,听起来你想为WPF编写自己的主循环/消息泵。我记得不久前在一条消息中读到过这件事。这不是一个完整的答案,但我想知道它是否能为你指明正确的方向。
主题:WPF中的游戏循环?想知道在WPF框架内编写一个自定义的"游戏循环"有多容易。所谓游戏循环,我的意思是在自定义Dispatcher上泵送我自己的事件,这样我就可以控制我的应用程序的帧速率。
答案:你可以写你自己的信息泵。只是不要调用Dispatcher.Run。您需要泵送消息,并且需要根据需要调用ComponentDispatcher.RaiseThreadMessage。使用反射器查看Dispatcher.PushFrame的功能。
当然,这仍然可能不会给你想要的"游戏循环"。。。
来源:http://blogs.msdn.com/b/jaimer/archive/2009/06/29/wpf-discussions-090626.aspx
我想您应该看看HwndSource。它作为win32控件托管一个WPF GUI。不过,这一切都有点棘手,您最好编写一个简单的WPF.net GUI应用程序,并使用它来使用某种形式的互操作驱动您的本地代码。MS真的没有想过这种迁移方法(重用现有代码并在上面添加一个新的GUI),而是让我们重写所有代码。
网上有很多例子。祝你好运
PS。当然,您可以在原生GUI中尝试当前的"黄金标准"-Qt。
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 无法在windows控制台中为C++程序提供必要的输入
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 查找 GCD:并非所有控制路径都返回值
- 通过 API 控制 DJI 相机
- 禁止在控制台上记录谷神星
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- wx通用目录控制错误"wxTheFileIconsTable was nullptr"
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- Cython通过浮点数的最快方式,用于高频控制回路
- 用户控制从 c++ 到 java 脚本的 Webassembly 访问调用
- C ++,如何从控制台中输入的字符串中删除字母?
- 如何从单独的线程控制 SFML 窗口?
- 如何防止 Windows 控制台上的回车键自动滚动
- 在本机互操作中控制WPF