LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR szBuffer[1];
switch (message)
{
case WM_CHAR:
szBuffer[1] = (TCHAR) wParam;
cout << wParam << " " << szBuffer[1] << " ";
break;
case WM_PAINT:
InvalidateRect(hwnd, NULL, TRUE);
hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
TextOut(hdc, 1, 1, szBuffer, 1);
EndPaint(hwnd, &ps);
return 0;
Привет всем, Я пытаюсь запустить приведенный выше код и просто распечатать одну букву за раз в моем окне. Тем не менее, я не могу заставить символы появляться в окне с помощью функции TextOut, но я могу отображать символы в окне терминала. Я новичок в WinApi, и я потерялся!textout winapi с сообщениями клавиатуры
благодарит заранее!
'static TCHAR szBuffer [2];' ... 'szBuffer [0] = (TCHAR) wParam; szBuffer [1] = '\ 0'; ' –
@JonathanPotter - это радость текстовых API-интерфейсов GDI, которые не только не требуют строк с нулевым символом, но также не позволяют их полностью ... (Действительно, я бы хотел, чтобы функции accept -1 означает нуль-завершение, как функции преобразования набора символов: |) Я предполагаю, что этот человек исходит из какого-то другого языка программирования (один с индексированием на основе 1), поэтому я попытался отразить это в своем ответе:/Но да, изучение строк с нулевым завершением может быть важно. – andlabs
У вас нет вызова InvalidateRect() внутри вашего обработчика WM_PAINT. InvalidateRect() - это то, что вы вызываете, чтобы заставить WM_PAINT вызываться в первую очередь. Однако вы можете поместить его в обработчик WM_CHAR. –