Записать информацию в пустое окно с помощью С++

Итак, я создаю этот игровой движок и обнаружил, что ОЧЕНЬ сложно создать какое-то наложение с отладочной информацией в главное окно игры с помощью D3D11 или вообще рисовать текст, поэтому я подумал, что создам другое окно. чтобы содержать мои данные отладки.

Я создал окно в порядке и все такое, но я понятия не имею, как записать в него свою отладочную информацию. Я не хочу использовать конструктор форм Windows, так как это должно преобразовать мой проект в проект CLR, который мне не нужен.

Я гуглил по крайней мере 3 часа (честно) и пробовал различные решения, но ни одно из них не казалось практичным в использовании / они не работали.

Информация об отладке, которую я хотел бы написать, исходит из глобальных значений с плавающей запятой. Примером может быть CAM_POS_X, который содержит значение с плавающей запятой, указывающее, в какой координате X находится камера в данный момент.

Желательно что-то вроде этого:

|SiriusAlpha 0.1 Окно отладки_ |
|Текущее положение X: CAM_POS_X|
|Текущее положение Y: CAM_POS_Y|
|Текущее положение Z: CAM_POS_Z|
|Текущее положение YAW: CAM_YAW ______|
|Текущий PITCH: CAM_PITCH___|
|Текущий FPS: CUR_FPS
_______|

Все эти значения не обязательно являются переменными с плавающей запятой. Это могут быть строки, двойные числа, целые числа или даже логические значения.

Если бы кто-нибудь захотел объяснить мне, как это сделать в D3D11, и я мог бы пропустить все schennnigans окна отладки, я был бы еще счастливее.

В противном случае, я был бы рад, если бы кто-нибудь мог объяснить мне, как это делается.


person Axel Latvala    schedule 20.07.2012    source источник
comment
Может быть, это помогает? stackoverflow.com/questions/5979632/   -  person Aesthete    schedule 20.07.2012
comment
Я смотрел на это раньше, но это было до того, как я потерял надежду на то, что D3D сделает эту текстовую штуку. Думаю, мне придется рассмотреть его поближе.   -  person Axel Latvala    schedule 20.07.2012
comment
Это казалось немного неполным, мне нужно было что-то, что объясняло бы все с самых основ. Я начал изучать D3D11 3 дня назад...   -  person Axel Latvala    schedule 20.07.2012


Ответы (1)


Пробовали ли вы TextOut()< /а>? Прочтите статью на msdn. У вас уже должен быть контекст устройства, остальное делается быстро и просто.

Функция TextOut записывает строку символов в указанное место, используя текущий выбранный шрифт, цвет фона и цвет текста.

Печать в строку тривиальна.

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

Я не проверял это, но из документации MSDN это должно работать нормально.

person Aesthete    schedule 20.07.2012
comment
У меня было, и это было непрактично. Я не могу понять, как объединить строки и числа с плавающей запятой, чтобы получить LPCWSTR. Также мне нужно было бы знать длину струн, а это чушь собачья, потому что она не гибкая... Черт, это сложно... - person Axel Latvala; 20.07.2012
comment
Нет проблем с получением длины строки, просто используйте sizeof для строки, которую вы создали. Смотрите мои правки, это имеет больше смысла? - person Aesthete; 21.07.2012
comment
Спасибо. Я попробую это позже. Не могли бы вы объяснить мне %f? Как это работает? - person Axel Latvala; 21.07.2012
comment
Это называется токен. Он указывает, что его следует заменить значением (в данном случае int). Прочитайте все здесь: cplusplus.com/reference/clibrary/cstdio/printf - person Aesthete; 21.07.2012
comment
Хорошо, большое спасибо! Еще один вопрос. Является ли sprintf() стандартным способом в С++ для создания строк из других типов данных? В PHP (это мой самый сильный язык) вы могли бы сделать что-то вроде этого: $number = 50000.00;$string = 'myString1';$variable = 'myVar1';$Output = $String . " Another string containing a $variable " . ' another string NOT containing a $variable ' . $number; И вывод был бы следующим: myString1 Another string containing a myVar1 another string NOT containing a $variable 50000.00 - person Axel Latvala; 21.07.2012
comment
Есть много более простых (для некоторых) способов сделать это в таких классах, как std::string и std::sstream. Но поскольку вы работаете с D3D, вы увидите, и в любом случае вам придется писать такой код более низкого уровня. Это быстрее и имеет меньше накладных расходов, чем другие классы для работы со строками. - person Aesthete; 21.07.2012
comment
И вам, вероятно, лучше забыть почти все, что вы знаете о PHP, прежде чем писать механизм рендеринга D3D11 на C++. - person Aesthete; 21.07.2012
comment
Дело в stringstream в том, что у меня возникли проблемы с преобразованием результата в соответствующую форму (а именно LPCWSTR) - person Axel Latvala; 21.07.2012
comment
давайте продолжим это обсуждение в чате - person Aesthete; 22.07.2012
comment
Эти вопросы не по теме. Посмотрите, сможете ли вы написать текст в окно, используя ответ, который я дал, и если он сработает — примите его. Удачи. - person Aesthete; 22.07.2012
comment
Я попробую. Но я сейчас очень занят, так что это может занять день или два. - person Axel Latvala; 22.07.2012