Void ShowKey (hwnd hwnd, int iType, char *szMessage,wparam wParam, lparam lParam)
{ static char *szFormat[2] = { "%-14s %3d %c %6u %4d %3s %3s %4s %4s",
"%-14s %3d %c %6u %4d %3s %3s %4s %4s" } ;
char szBuffer[80] ;
HDC hdc ;
ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
TextOut (hdc, cxChar, rect.bottom - cyChar, szBuffer,
wsprintf (szBuffer, szFormat [iType],
szMessage, wParam,
(BYTE) (iType ? wParam : ' '),
LOWORD (lParam),
HIWORD (lParam) & 0xFF,
(PSTR) (0x01000000 & lParam ? "Yes" : "No"),
(PSTR) (0x20000000 & lParam ? "Yes" : "No"),
(PSTR) (0x40000000 & lParam ? "Down" : "Up"),
(PSTR) (0x80000000 & lParam ? "Up" : "Down"))) ;
ReleaseDC (hwnd, hdc) ;
ValidateRect (hwnd, null) ;
}
…
У приведеному фрагменті коду, останнім параметром функції TextOut() є функція wsprintf(). Ця функція є повним аналогом функції sprintf(), але працює в Windows. У загальному вигляді ця функція виглядає в такий спосіб:
int wsprintf(
LPTSTR lpOut, // покажчик на буфер виводу
LPCTSTR lpFmt, // покажчик на рядок формату
... // аргументи для форматування
);
Працює ця функція в такий спосіб: аргументи для форматування форматуются у відповідності з рядком формату lpFmt і заносяться в lpOut.
І, нарешті, додайте код, що використовує тільки що написану функцію ShowKey:
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
…
case WM_KEYDOWN :
ShowKey (hwnd, 0, "WM_KEYDOWN", wParam, lParam) ;
return 0 ;
case WM_KEYUP :
ShowKey (hwnd, 0, "WM_KEYUP", wParam, lParam) ;
return 0 ;
case WM_CHAR :
ShowKey (hwnd, 1, "WM_CHAR", wParam, lParam) ;
return 0 ;
case WM_DEADCHAR :
ShowKey (hwnd, 1, "WM_DEADCHAR", wParam, lParam) ;
return 0 ;
case WM_SYSKEYDOWN :
ShowKey (hwnd, 0, "WM_SYSKEYDOWN", wParam, lParam) ;
break ; // виклик DefWindowProc
case WM_SYSKEYUP :
ShowKey (hwnd, 0, "WM_SYSKEYUP", wParam, lParam) ;
break ; // виклик DefWindowProcghvfbrtu6k 6g vg
case WM_SYSCHAR :
ShowKey (hwnd, 1, "WM_SYSCHAR", wParam, lParam) ;
break ; // виклик DefWindowProc
case WM_SYSDEADCHAR :
ShowKey (hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam) ;
break ; // виклик DefWindowProc
Програма готова. Запустіть її на виконання.
Практична частина
Створити програму keylook, описану в лабораторній роботі.
Написати програму, що виконує наступні дії: при натисканні символьних клавіш відповідний символ з'являється в рядку, починаючи з лівого верхнього кута.