Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L_2.docx
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
208.13 Кб
Скачать
  1. Символьные сообщения.

//Обработка системных сообщений производится в окне №2.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_CHAR: //Обработка символьных сообщений. После того как сообщение WM_KEYDOWN было преобразовано TranslateMessage(&msg), WM_CHAR содержит символьный код клавиши, которая была нажата.

step=step+26;

//message

nBufSize=wsprintf(szBuf, L"%s", L"WM_CHAR");

TextOut(hdc, 0, step, szBuf, nBufSize);

//ansi

nBufSize=wsprintf(szBuf, L"%lx", wParam); //в wParam WM_CHAR содержится код ansi

TextOut(hdc, 330, step, szBuf, nBufSize);

break;}

  1. Системные сообщения.

//Обработка системных сообщений производится в окне №2.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_SYSKEYDOWN://обработка нажатия системных клавиш (Alt, F10)

step=step+26;

//message

nBufSize=wsprintf(szBuf, L"%s", L"WM_SYSKEYDOWN");

TextOut(hdc, 0, step, szBuf, nBufSize);

//vk

nBufSize=wsprintf(szBuf, L"%x", wParam);

TextOut(hdc, 160, step, szBuf, nBufSize);

//keyname

kn=GetKeyNameText(lParam, szKeyName, sizeof(szKeyName)-1);

if (!kn) TextOut(hdc, 390, step, L"Error", 5);

else TextOut(hdc, 390, step, szKeyName, kn);

if(GetKeyState(VK_MENU)<0)

{switch(wParam)

{case 0x32:

KillTimer(hWnd2,sec2);

DestroyWindow(hWnd2);

break;

}break;

break;

case WM_SYSKEYUP: ://обработка отпускания системных клавиш (Alt, F10)

step=step+26;

//message

nBufSize=wsprintf(szBuf, L"%s", L"WM_SYSKEYUP");

TextOut(hdc, 0, step, szBuf, nBufSize);

//vk

nBufSize=wsprintf(szBuf, L"%x", wParam);

TextOut(hdc, 160, step, szBuf, nBufSize);

//keyname

kn=GetKeyNameText(lParam, szKeyName, sizeof(szKeyName)-1);

if (!kn) TextOut(hdc, 400, step, L"Error", 5);

else TextOut(hdc, 400, step, szKeyName, kn);

break;

break;}

break;

  1. Преобразование кодов.

//В данной программе было выполнено преобразование кода в ASCII-код.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_KEYDOWN:

i=MapVirtualKey(wParam,2); //данная функция преобразует виртуальный код клавиши в ascii.

_itoa_s(i, iBuf, 10); //преобразует данные типа int в тип string

nBufSize=wsprintf(szBuf, L"%d", iBuf);

TextOut(hdc, 240, step, szBuf, nBufSize);

break;

break;}

  1. Как отличить нажатия совпадающих клавиш.

//Чтобы отличить нажатие совпадающих клавиш необходимо вывести их скан коды, т.к они будут различаться.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_KEYDOWN:

nBufSize=wsprintf(szBuf, L"%lx", lParam>>16); //скан код лежит в lParam и занимает биты 23-16. Поэтому, чтобы извлечь скан код необходимо выполнить побитовый сдвиг на 16 влево.

TextOut(hdc, 210, step, szBuf, nBufSize);

break;

break;}

  1. Как узнать ввод строчных и прописных букв.

//Чтобы узнать ввод строчных и прописных букв необходимо обработать нажатие клавиш Shift, Caps Lock. Если они были нажаты, то буквы прописные, в ином случае - строчные.

LRESULT CALLBACK WndProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)

{switch (message)

{case WM_KEYDOWN:

if (wParam==VK_CAPITAL) TextOut(hdc, 500, step, L"+CAPITAL", 8);

if (wParam==VK_SHIFT) TextOut(hdc, 500, step, L"+SHIFT", 6);

break;

break;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]