2012-07-20 32 views
1

因此,我构建了这个游戏引擎thinggy,并发现它非常难以创建某种带有调试信息的覆盖图,并将其与D3D11的主游戏窗口进行叠加或绘制文本,所以我想我会创建另一个窗口来包含我的调试数据。用C++将信息写入空窗口

我得到了创建好的窗口和所有,但我不知道如何写入我的调试信息。我不想使用Windows窗体设计器,因为它必须将我的项目转换为我不想要的CLR项目。

我至少一直在使用googling至少3个小时(诚实),并尝试过各种解决方案,但没有一个看起来真的很实用/他们没有工作。

我想写的调试信息来自全局浮点值。一个例子是CAM_POS_X,它保存一个浮点值,它表示摄像机当前在哪个X坐标上。

像这样期望:

| SiriusAlpha 0.1调试window_ |
|当前X位置:CAM_POS_X |
|当前Y位置:CAM_POS_Y |
|当前Z位置:CAM_POS_Z |
|当前偏航:CAM_YAW_ __ _ __ |
|当前PITCH:CAM_PITCH_ __ |
|当前FPS:CUR_FPS
__ _ ____ |

所有这些值都不是必需的浮点变量。他们可以是字符串,双打,整数,甚至布尔值。

如果有人愿意向我解释如何在D3D11中做到这一点,我可以跳过整个调试窗口schenennigans我会更快乐。

其他方面,如果有人能向我解释这是如何完成的,我会很高兴。

+1

也许这有帮助吗? http://stackoverflow.com/questions/5979632/d3d11-how-to-draw-gdi-text-to-a-gxdi-surface-without-d2d – Aesthete 2012-07-20 13:47:27

+0

我看着那一个更早,但那是我放弃之前希望D3D能做这个文字的东西。我想我必须仔细看看它。 – 2012-07-20 14:06:14

+0

这似乎有点不完整,我需要一些东西来解释一切,从非常基础。我开始学习D3D11 3天前... – 2012-07-20 14:49:12

回答

0

您是否试过TextOut()?阅读msdn上的文章。你应该已经有了一个设备上下文,剩下的就快速简单。

TextOut函数使用当前选定的字体,背景颜色和文本颜色在指定位置写入字符串。

打印到一个字符串是微不足道的。

wchar buf[128]; 
swprintf(buf, "Current X Position: %f", CAM_X_POS); 
TextOut(yourDC, screenXPos, screenYPos, &buf, sizeof(buf)); 

我还没有测试过这个,但是从MSDN文档中应该可以正常工作。

+0

我有,而且不实用。我似乎无法弄清楚如何将字符串和浮点数组合成一个'LPCWSTR'。我也必须知道这是废话的字符串的长度,因为这不是灵活的......该死的很难... – 2012-07-20 14:04:06

+0

你可以使用'swprintf()'(字符串宽打印格式)打印到一个字符串缓冲区。你可以在这里阅读它:http://msdn.microsoft.com/en-us/library/ybk95axf(v=vs.71).aspx – Aesthete 2012-07-20 23:37:30

+0

获取字符串的长度没有问题,只需使用sizeof你制作的字符串。看我的编辑,这是否更有意义? – Aesthete 2012-07-20 23:48:11