Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_progr_Win / Lab2.doc
Скачиваний:
11
Добавлен:
23.03.2015
Размер:
445.44 Кб
Скачать

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.

  1. І, нарешті, додайте код, що використовує тільки що написану функцію 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

Програма готова. Запустіть її на виконання.

Практична частина

  1. Створити програму keylook, описану в лабораторній роботі.

  1. Написати програму, що виконує наступні дії: при натисканні символьних клавіш відповідний символ з'являється в рядку, починаючи з лівого верхнього кута.

Соседние файлы в папке Lab_progr_Win