Мне нужен правильный способ, которым я могу вывести строку символов и отобразить ее в созданном окне. Я использовал функцию textout(), но поскольку она только рисует окно, как только окно свернуто и восстановлено, данные, отображаемые в окне, исчезают. Кроме того, когда отображаемые данные превышают размер окна, отображаются только данные, равные размеру окна, а остальные данные усекаются. Есть ли другой способ вывода данных в окно?
Отображение строкового вывода в окне с помощью C (в WIN32 API)
Ответы (2)
Вы можете поместить Static
a> или Edit
a> элемент управления (метка и текстовое поле) в окне, чтобы отобразить данные.
Вызовите один из них во время WM_CREATE
:
HWND hWndExample = CreateWindow("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);
Or
HWND hWndExample = CreateWindow("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);
Если вы используете Edit
, пользователь также сможет прокручивать, копировать и вставлять текст.
В обоих случаях текст можно обновить с помощью SetWindowText()
:
SetWindowText(hWndExample, TEXT("Control string"));
HWND StaticExample = CreateWindowEx("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100,hWnd,NULL,hInstance,NULL);
для статики и HWND EditExample = CreateWindowEx("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100,hWnd,NULL,hInstance,NULL);
для редактирования.
- person Daboyzuk; 15.03.2013
WM_CREATE
, а затем просто вызываете SetWindowText()
, чтобы установить содержимое. Вот почему я разделил строки в своем ответе, но я сделаю немного яснее,
- person Deanna; 16.03.2013
TextOut должен работать отлично. Если это делается в WM_PAINT, он должен отрисовываться каждый раз. (в том числе по минимизации и изменению размеров)
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, TEXT("Text Out String"),strlen("Text Out String"));
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, hdc);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Вас также может заинтересовать DrawText
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT rec;
// SetRect(rect, x ,y ,width, height)
SetRect(&rec,10,10,100,100);
// DrawText(HDC, text, text length, drawing area, parameters "DT_XXX")
DrawText(hdc, TEXT("Text Out String"),strlen("Text Out String"), &rec, DT_TOP|DT_LEFT);
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, hdc);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Который нарисует текст в вашем окне в заданном прямоугольнике,
При рисовании текст будет переноситься по словам внутри заданного прямоугольника.
Если вы хотите, чтобы все окно было областью рисования, вы можете использовать GetClientRect(hWnd, &rec);
вместо SetRect(&rec,10,10,100,100);
.