前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nebula3嵌入WPF

Nebula3嵌入WPF

作者头像
逍遥剑客
发布2018-05-23 16:02:47
5440
发布2018-05-23 16:02:47
举报
  1. C++/CLI只能使用MD/MDd的运行库, 所以N3的编译选项需要改一下. 可以在makeslnwin32.tcl里改, 然后重新生成所有的工程文件.
  2. N3的System命名空间与.Net的冲突. 主要是byteorder.h这个头文件里的Math命名空间, 改成"::Math"或"using namespace Math"都可以. Input之类的同理.
  3. 编译时有些代码(估计是内联部分)会提示无法编译成托管代码, 只需要把#include用#pragma unmanaged/#pragma managed包起来
  4. XNAMath的对齐数据会无法编译成托管代码, 会有一个警告, 工程设置里忽略就可以.
  5. WPF没有所谓的主循环, 所以Appcliation的Run方法就不能用了. 所以UpdateXXX之类的方法需要开放给外部调用.
  6. 为了不段地更新引擎, Update/Render之类的方法需要有个地方调用. 临时使用的是CompositionTarget.Rendering这个事件, 大约60FPS的样子. ComponentDispatcher.ThreadIdle可能是更好的解决方法, 我还没搞明白怎么用.
  7. WPF不再使用HWND来做控件, 所以DX要跟WPF结合的话只能使用HwndHost. BuildWindowCore转入的hwndParent做为DisplayDevice的父窗口句柄.
  8. BuildWindowCore在MSDN里有个说明: "The child window will be created only if the window is owned by the calling thread." 而N3的DisplayDevice是在渲染线程创建的窗口, 所以需要把窗口的创建改到主线程.
  9. 由于窗口在主线程创建, 那么Win32DisplayDevice::WndPro也需要在HwndHost::WndProc中实现一遍. 要不然所有的输入消息都没法在InputServer中得到处理.
  10. 键盘消息的处理比较麻烦. 看看是不是应该切换焦点, 还是重写HwndHost的函数来处理.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010年09月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档