Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Робота з клавіатурою

Предмет: 
Тип роботи: 
Лабораторна робота
К-сть сторінок: 
18
Мова: 
Українська
Оцінка: 

того, що інформації про положення цих клавіш недостатньо – необхідно знати про особливості реалізації кожної окремої національної клавіатури. За програміста це робить Windows.

Раніше вже зустрічався наступний код:
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMesage (&msg) ;
}
Це типовий цикл обробки повідомлень, що міститься в WinMain. Функція GetMessage заповнює поля структури msg даними наступного повідомлення з черги. Виклик DispatchMesage викликає відповідну віконну процедуру. Між двома цими функціями знаходиться функція TranslateMessage.
Функція TranslateMessage перетворює апаратні повідомлення клавіатури в символьні повідомлення. Якщо цим повідомленням є WM_KEYDOWN (WM_SYSKEYDOWN) і, якщо натискання клавіші в сполученні з положенням клавіші зрушення генерує символ, тоді TranslateMessage поміщає символьне повідомлення в чергу повідомлень.
Це символьне повідомлення буде наступним, після повідомлення про натискання клавіші, що функція GetMessage витягне з черги.
Існує чотири види символьних повідомлень: несистемні – WM_CHAR, WM_DEADCHAR та системні – WM_SYSCHAR, WM_SYSDEADCHAR.
Повідомлення WM_SYSCHAR і WM_SYSDEADCHAR є наслідком повідомлень WM_SYSKEYDOWN.
У більшості випадків, програми для Windows можуть ігнорувати всі повідомлення за винятком WM_CHAR.
Параметр lParam, переданий у віконну процедуру як частина символьного повідомлення, є таким же, як і параметр lParam апаратного повідомлення клавіатури, із якого сгенеровано символьне повідомлення. Параметр wParam – це код символу ASCII.
Якщо Windows-додатку необхідно обробляти символи клавіатури, то йому доведеться обробляти повідомлення WM_CHAR. Найбільш типовим кодом обробки повідомлення WM_CHAR є наступний код:
case WM_CHAR: { char chCharCode = (char) wParam; // ASCII-код символу
switch (chCharCode)
{
case '\b':... ; // уведений символ Backspace
break;
case '\t':... ; // уведений символ Tab
break;
case '\r':... ; // уведений символ Enter
break;
case 'A':... ; // уведений прописний символ A
break;
case 'a':... ; // уведений рядковий символ а
break;
...
default:... ; // введені інші символи
break;
}
}; return 0;
Зауваження. Програми звичайно можуть ігнорувати WM_DEADCHAR і WM_SYSDEADCHAR. На деяких, неамериканських клавіатури, деякі клавіші визначаються додаванням діакритичного знака до букви. Вони називаються німими клавішами (dead keys), оскільки ці клавіші самі по собі не визначають символів.
Розглянемо, з якими наборами символів працює система Windows. В операційній системі MS-DOS використовувався розширений набір символів, визначений фірмою IBM. У цей набір входять букви англійського алфавіту, знаки пунктуації і псевдографіки.
Для забезпечення можливості роботи із символами кирилиці фірма Microsoft розробила розширений набір символів з кирилицею. У термінології Windows такі таблиці кодів називаються наборами символів OEM (Original Equipment Manufacturer).
Сама ж система Windows для представлення символів використовує набір символів ANSI. У цьому наборі визначені не всі коди і відсутні символи псевдографіки.
Якщо програма MS-DOS запускається у вікні Windows, для неї вибирається набір символів OEM. Тому
У Windows використовуються як набір символів ANSI, так і набір символів OEM. За замовчуванням, у контекст відображення вибирається системний шрифт, для якого використовується набір символів ANSI.
Для однакових символів набори ANSI і OEM використовують різні коди, це приводить до необхідності перекодування символів, наприклад, при переносі текстів, підготовлених у середовищі MS-DOS, у середовище Windows. У складі програмного інтерфейсу Windows маються функції, що беруть на себе роботу з перетворення і перекодування символів.
Щоб розібратися, як Windows посилає повідомлення клавіатури в програму, розробимо програму KEYLOOK. Ця програма виводить у робочу область всю інформацію, що Windows посилає віконній процедурі для восьми різних повідомлень клавіатури. Ця інформація буде виводитися на екран у наступному виді:
 
Таблиця 2. 1 Інформація програми KEYLOOK
 
Рисунок 2. 3 Зовнішній вигляд програми KEYLOOK
 
Створення додатка, що демонструє взаємодію програми з клавіатурою:
Створіть новий проект і назвіть його KEYLOOK. Потім додайте до проекту файл типу C++ Source File за назвою keylook. cpp.
Тепер цілком скопіюйте уміст файлу sample. cpp з Лабораторної роботи №1 у keylook. cpp.
Крім заголовного файлу windows. h, не знадобляться ніякі інші файли.
У функцію WinMain внесіть наступні незначні зміни:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{ static char szAppName[] = «KeyLook»;
HWND hWnd;
RegisterClass (&wndclass) ;
hWnd = CreateWindow (szAppName, «Keyboard Message Looker»,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
Крім повідомлень WM_PAINT і WM_DESTROY функція WndProc буде містити обробку наступних повідомлень: WM_CREATE, WM_SIZE, а також WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEAD-CHAR. Отже, у функцію WndProc додайте такий код:
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{ HDC hdc;
PAINTSTRUCT ps;
switch (iMsg)
{ case WM_CREATE:
case WM_SIZE:
case WM_PAINT:
case WM_KEYDOWN: …
case WM_KEYUP: …
case WM_CHAR: …
case WM_DEADCHAR: …
case WM_SYSKEYDOWN: …
case WM_SYSKEYUP: …
case WM_SYSCHAR: …
case WM_SYSDEADCHAR: …
case WM_DESTROY:
PostQuitMessage (0) ;
return 0; }
return DefWindowProc (hwnd,
Фото Капча