case RADIUS: //Сообщение от поля ввода радиуса
int г - HIWORD(wParam); //Запоминаем код извещения if(r--EN_KILLFOCUS) //Это потеря фокуса, следовательно, ввод закончен {
//break; При выходе из switchO попадем на UpdateData(). GetDlgltemText (hWnd.RADIUS . s. strlen(s)-l): //тогда эти две sscanf(s." *d".&l): //строки не нужны
}:
if (г-EN_SETFOCUS) (SetDlgltemText (hWnd.RADIUS.""); return 0;} if (r~EN_MAXTEXT) {
SetFocus(hWnd); return TRUE; }
return TRUE; //При выходе из оконной процедуры обходим UpdateDataO
}
Проект, в котором оконная процедура анализирует коды извещения и вызывает функцию UpdateData () только при завершении ввода числа, можно найти в папке Asynchrlnput.
Ввод иероглифов Стандарт UNICODE использует кодировку, которая отводит по два байта для хранения одного символа. Ее применение позволяет отказаться от кодовых страниц как средства закрепления одного кода за разными символами. Компания Microsoft и ряд других фирм приняли решение о поддержке этой системы кодировки. В том, что операционная система пользуется текстовыми данными в UNICODE, можно было убедиться при знакомстве с форматом хранения шаблона меню. Отказ от применения строк ANSI ожидает и прикладных программистов, поэтому вводная часть была бы неполной без проекта, который позволяет ознакомиться с особенностями использования UNICODE.
Чтобы обеспечить постепенный переход на UNICODE, в операционных системах для функций API, работающих со строками, предусмотрено по два варианта реализации. Имена функций, использующих ANSI, заканчиваются буквой А, а имена функций, работающих с UNICODE, заканчиваются буквой W.
Программист вместо имени функции использует макрос, название которого является общей частью имен указанных вариантов. По сути дела, он пишет имя функции без последней буквы.
Чтобы указать, что разработчик планирует использовать функции для UNICODE, в исходный текст программы необходимо включить следующие строки:
#define UNICODE #define JJNICODE
Следует заметить, что функция может даже не использовать строковых параметров, но при работе обращаться к содержащим строки системным структурам. Например, в системе нет функции GetObject(HGDI0BJ, int. LPVOID), вместо нее вызывается функция GetObjectAC) или GetObjectWC).