- •Программирование для Windows
- •Литература
- •Вам необходимо знать и уметь
- •Первая программа
- •Соглашения операционной системы Windows
- •Вызовы функций Windows
- •Идентификаторы, написанные прописными буквами
- •Новые типы данных
- •Описатели
- •Венгерская нотация
- •Точка входа программы
- •Оконная процедура
- •Регистрация класса окна
- •Создание окна
- •Отображение окна
- •Цикл обработки сообщений
- •Оконная процедура
- •Обработка сообщений
- •Воспроизведение звукового файла
- •Сообщение wm_paint
- •Сообщение wm_destroy
- •Сложности программирования для Windows
- •Синхронные и асинхронные сообщения
- •Думайте о пользователе
- •Лекция3. Приступаем с изучению компонент
- •Урок 4. Класс tObjectи его потомки
- •Урок 5. Работа с кнопками
- •Урок 6. Компонент ActionList
- •Урок 7. Работаем с меню (класс tMainMenu)
- •Урок 8. Работаем с контекстным меню (класс tPopupMenu)
- •Урок 9. Компонент Edit
- •Урок 10. Работаем с двумя формами
- •Урок 11. Текст (компоненты tLabel и tStaticText)
- •Урок 12. Компонент ListBox
- •Урок 13. Компонент ComboBox
- •Урок 14. Используем api-функции
- •Урок 15. Разные MessageBox'ы
- •Урок 16. Компонент CheckBox
- •Урок 17. Компонент RadioButton
- •Урок 18. Класс tStrings
- •Урок 19. Класс tStringList
- •Урок 20. Работаем с сетью. Клиент (класс tClientSocket)
- •Урок 21. Работаем с сетью. Сервер (класс tServerSocket)
- •Урок 22. Компонент ImageList
- •Урок 23. Пересчитываем компоненты на форме
- •Урок 24. Форма - добавление методов
- •Урок 25. Форма - добавление полей
- •Урок 27. Значок на панели задач (компонент tTrayIcon)
- •Урок 28. Работаем со сплиттером
- •Урок 29. Компонент Panel
- •Урок 30. Совместное использование сплиттера и Panel'ей
- •Урок 31. Компонент HotKey
- •Урок 32. Компонент StatusBar
- •Урок 33. Установка главной формы приложения
- •Урок 34. Рисование на форме
Новые типы данных
Несколько других идентификаторов в HELLOWIN.C являются новыми типами данных; они также определяются в заголовочных файлах с помощью либо инструкций typedef, либо инструкций#define. Это изначально сделано для облегчения перевода программ для Windows на другую платформу. Иногда эти новые типы данных вполне условны. Например, тип данных UINT, использованный в качестве второго параметраWndProc— это просто беззнаковое целое, которое в Windows является 32-разрядным. Тип данных PSTR, использованный в качестве третьего параметраWinMain, является указателем на строку символов, т. е.char*. Другие имена имеют историческое происхождене. Например, третий и четвертый параметрыWndProcопределяются как WPARAM и LPARAM соответственно. ФункцияWndProcвозвращает значение типа LRESULT. Оно определено просто как LONG. ФункцияWinMainполучает тип WINAPI (как и любая другая функция Windows, которая определяется в заголовочных файлах), а функцияWndProcполучает тип CALLBACK. Оба эти идентификатора определяются как stdcall, что является ссылкой на особую последовательность вызовов функций, которая имеет место между самой операционной системой Windows и ее приложением.
В HELLOWIN также использованы четыре структуры данных, определяемых в заголовочных файлах Windows. Этими структурами данных являются:
Структура |
Значение |
MSG |
Структура сообщения |
WNDCLASSEX |
Структура класса окна |
PAINTSTRUCT |
Структура рисования |
RECT |
Структура прямоугольника |
Первые две структуры данных используются в WinMainдля определения двух структур, названныхmsgиwndclass. Две вторые используются вWndProcдля определения структурpsиrect.
Описатели
Наконец, имеется еще три идентификатора, которые пишутся прописными буквами и предназначены для разных типов описателей (handles):
Идентификатор |
Значение |
HINSTANCE |
Описатель экземпляра (instance) самой программы |
HWND |
Описатель окна |
HDC |
Описатель контекста устройства |
Описатели в Windows используются довольно часто. Например есть описатель HICON (описатель иконки), описатель HCURSOR (описатель курсора мыши) и описатель HBRUSH (описатель графической кисти) и много других. Описатель — это просто число, которое ссылается на объект. Программа почти всегда получает описатель путем вызова функции Windows. Программа использует описатель в других функциях Windows, чтобы сослаться на объект.
Венгерская нотация
Некоторые переменные в HELLOWIN.С имеют своеобразные имена. Например, имя szCmdLine— параметрWinMain. Это соглашение по именованию переменных, названные условно Венгерской нотацией. Имя переменной начинается со строчных буквы или букв, которые отмечают тип данных переменной. Например, префиксszвszCmdLineозначает, что строка завершается нулем (string terminated by zero). ПрефиксhвhInstanceиhPrevInstanceозначает описатель (handle); префиксiвiCmdShowозначает целое (integer).
При обозначении переменных структуры удобно пользоваться именем самой структуры (или аббревиатурой имени структуры) и строчными буквами, используя их либо в качестве префикса имени переменной, либо как имя переменной в целом. Например, в функции WinMainв HELLOWIN.С переменнаяmsgотносится к структуре типа MSG;wndclass— к структуре типа WNDCLASSEX. В функцииWndProc, переменнаяpsотносится к структуре PAINTSTRUCT,rect— к RECT.
Венгерская нотация помогает избегать ошибок в программе еще до ее компоновки. Поскольку имя переменной описывает и саму переменную и тип ее данных, то намного снижается вероятность введения в программу ошибок, связанных с несовпадением типа данных у переменных.
В таблице представлены общепринятые префиксы переменных:
Префикс |
Тип данных |
c |
символ |
by |
BYTE (беззнаковый символ) |
n |
короткое целое |
i |
целое |
x, y |
целое (используется в качестве координат xиy) |
cx, cy |
целое (используется в качестве длины xиy),созначает "счет" — (count) |
b или f |
BOOL (булево целое); f означает "флаг" — (flag) |
w |
WORD (беззнаковое короткое целое) |
l |
LONG (длинное целое) |
dw |
DWORD (беззнаковое длинное целое) |
fn |
функция |
s |
строка |
sz |
строка, завершаемая нулем |
h |
описатель (handle) |
p |
указатель (pointer) |