Nebula3嵌入WPF

  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的函数来处理.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Intellij IDEA神器那些让人爱不释手的小技巧

之前写了一篇介绍IntellIJ IDEA的文章,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因,...

9020
来自专栏happyJared

Intellij IDEA 神器那些让人爱不释手的小技巧

在2018年5月6日写了一篇介绍IntellIJ IDEA的文章,Intellij IDEA神器居然还有这些小技巧,主要是列出一些平时大家可能没用过或者没怎么用...

16320
来自专栏Seebug漏洞平台

34c3 部分Web Writeup

34c3应该算是2017年年末的最后一个惊喜了,比赛题目虽然有非预期导致难度降了很多,但是从CTF中能学到什么才是最重要的,其中Web有3个XSS题目,思路非常...

466100
来自专栏Java进阶架构师

Intellij IDEA神器那些让人爱不释手的小技巧

之前写了一篇介绍IntellIJ IDEA的文章,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因,...

11410
来自专栏程序员的SOD蜜

不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD

问题篇:     昨天在CSDN看到这样一个帖子:“苦逼的三层代码”: 采用传统的三层架构写代码,每个数据表都要定义一个实体对象,编写后台的时候, Web层需要...

37480
来自专栏欧阳大哥的轮子

Windows窗口类

Windows编程中,对所有的GUI组件和控件进行了分类,每种类型的实例对象都具有不同的特性,这些特性包括UI外观以及事件的处理和响应的方法。就和面向对象技术中...

16520
来自专栏逸鹏说道

vscode设置python3调试环境

汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai

34240
来自专栏liulun

基于.net开发chrome核心浏览器【四】

一: 上周去北京出差,给国家电网的项目做架构方案,每天都很晚睡,客户那边的副总也这样拼命工作。 累的不行了,直接导致第四篇文章没有按时发出来。 二: 在这篇文章...

31390
来自专栏逸鹏说道

Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)

这次选Markdown模式(关于Markdown基础可以看之前写的Markdown Base)

2.8K60
来自专栏happyJared

IDEA快捷键拆解系列(十八):Live Templates篇

  首先,我们要知道Live Template是在哪里定义的,先按Ctrl + Shift + S进入设置,接着在输入框输入“Live Template”就可以...

9630

扫码关注云+社区

领取腾讯云代金券