Как напечатать строку формата в окне? - PullRequest
0 голосов
/ 04 мая 2011

Дескриптор окна HWND hwnd уже был доступен, теперь я хочу напечатать строку формата в окне, описанном этим hwnd.Я не знаком с Windows API, большое спасибо за вашу помощь.

Например:

num = 23;
printFunction(hwnd, "number is %d", num);

Есть ли функция для решения этой проблемы?Спасибо!

ОБНОВЛЕНИЕ : я столкнулся с этой проблемой при использовании IDA Pro SDK.

Создайте пример подокна ниже:

HWND hwnd = NULL;
TForm *form = create_tform("Sample subwindow", &hwnd);

Я используюSendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"hello world"); чтобы вывести hello world строку в подокне, но что мне делать, если я хочу вывести строку формата в это подокно?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Это не так просто.

Сначала необходимо настроить процедуру окна для обработки WM_PAINT . Это даст вам HDC (контекст устройства) . С этим HDC вы можете вызвать DrawText , чтобы нарисовать вашу строку. Вам нужно будет сформировать строку, используя, скорее всего, sprintf .

1 голос
/ 05 мая 2011
sprintf(myString, "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)myString);
1 голос
/ 05 мая 2011

Если у вас уже есть подокно, в которое вы можете отправлять текст, вы можете использовать что-то похожее на следующее:

#include <strsafe.h>
#define MAXSTRING 1024

CHAR string[MAXSTRING];
StringCchPrinf(string, ARRAYSIZE(string), "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)string);

Используйте StringCchPrintf для форматирования текста в промежуточной строке, а затем используйте WM_SETTEXTотправить эту строку в подокно для отображения.Нет функции, которая выполняет оба действия за один раз, но ничто не мешает вам написать вспомогательную функцию, которая оборачивает оба из них, если вы обнаружите, что делаете это часто.

(здесь я использовал StringCchPrintf, который являетсяWindows API, вы также можете использовать C-flavour sprintf (), который похож на printf (), но принимает в качестве параметра дополнительную строку. Преимущество использования StringCchPrintf заключается в том, что он принимает дополнительный параметр длины, который он использует дляизбегайте переполнения буфера, что может привести к проблемам с безопасностью; если вы планируете делать какие-либо «реальные» действия, рекомендуется ознакомиться с этими «безопасными» версиями.)

-

Краткое примечание о том, как это связано с другим ответом: как правило, есть два основных подхода к выводу текста на экран в Windows.Самый простой способ - создать группу элементов управления надписью или текстом, попросить их сделать рисунок и отправить им текст.Если вы используете консольную среду в стиле Unix (printf и т. Д.), Это самый простой способ начать работу.Похоже, это тот подход, который вы уже используете, и тот, который я использовал выше.Другой подход - нарисовать текст самостоятельно.Это немного сложнее, так как вам нужно создать свой собственный элемент управления и обрабатывать различные запросы из Windows, чтобы ваш элемент управления перерисовывался сам, когда Windows запрашивает его - используя DrawText или другие API.Это то, что эти элементы управления фактически делают от вашего имени.Это дает вам полный контроль над размещением текста, шрифтом, цветом и т. Д., Но несколько излишним, если вы просто хотите, чтобы какой-то текст статуса или результата отображался для простого апплета.В любой из книг по Программированию Windows будет много подробностей об этом подходе.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...