- •Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.
- •П. 1.2 Главная функция приложения WinMain().
- •П. 1.3 Оконная функция.
- •П. 1.4 Сообщения от окна
- •П. 1.5 Сообщения от мыши
- •1.5.1 Сообщения мыши, связанные с рабочей областью окна
- •1.5.3 Двойные щелчки мыши
- •1.5.4 Сообщения мыши, связанные с нерабочей областью окна
- •1.5.5 Захват мыши
- •П. 1.6 Сообщения от клавиатуры
- •1.6.1 Синхронизация событий клавиатуры
- •1.6.2 Игнорирование событий клавиатуры
- •1.6.3 Понятие фокуса ввода
- •1.6.4 Категории клавиатурных сообщений
- •1.6.5 Аппаратные сообщения
- •1.6.6 Символьные сообщения
- •П. 1.7 Таймеры Windows и служба времени.
- •П. 1.8 Классы окон
- •1.8.1. Описание используемых классом окон ресурсов
- •1.8.2. Регистрация класса окон
- •1.8.3. Создание окон
- •1.8.4. Стили окна
- •П. 1.9 Цикл обработки сообщений
- •П. 1.10 Структура текста приложения
- •П. 1.11 Вспомогательные функции создания окон
- •1.11.1 Функции отображения и перерисовки окон
- •1.11.2 Функции поиска и определения состояния окон
- •1.11.3 Функции перемещения окон
- •1.11.4 Сообщения приложения для пользователя
- •П. 1.12 Примеры создания окон
- •П 2. Органы управления
- •П 2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •П 2.2. Статический орган управления
- •П 2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •П 2.4 Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •П 2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •П. 2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •П 3. Вывод в окно
- •П. 3.1. Виды контекста отображения
- •П 3.2. Сообщение wm_paint
- •П 3.3. Установка атрибутов контекста отображения для текста
- •П 3.4. Вывод текста
- •3.4.1. Настройка параметров шрифта
- •3.4.2. Выбор шрифта в контекст отображения
- •3.4.3. Функции вывода текста
- •3.4.4. Определение метрик шрифта
- •П 3.5. Рисование геометрических фигур
- •3.5.1 Установка атрибутов контекста отображения для рисования.
- •3.5.1. Функции рисования точки
- •3.5.2. Функции рисования линий
- •3.5.3. Функции рисования замкнутых фигур
- •3.5.4 Функции создания и рисования регионов
- •П. 4 Ресурсы приложения и их использование. П. 4.1 Файл ресурсов.
- •П 4.2 Главное меню
- •П. 4.2.1 Элементы меню
- •П. 4.2.2 Создание меню
- •П. 4.2.3 Сообщения от меню
- •П. 4.3. Плавающее меню
- •П. 4.4. Акселераторы
- •П. 4.5. Панель инструментов
- •4.5.1. Создание панели инструментов
- •4.5.2. Управление состоянием кнопок панели
- •4.5.3. Вывод подсказок в панели инструментов
- •П. 4.6. Строка состояния
- •4.6.1. Создание строки состояния
- •4.6.2. Сообщения о меню в строке состояний
- •П 5. Диалоговые панели п. 5.1. Характеристики диалоговых панелей
- •5.1.1. Единицы диалоговой панели '
- •5.1.2. Стили диалоговой панели
- •5.1.3. Функция окна диалоговой панели
- •П. 5.2. Создание диалоговой панели
- •5.2.1 Создание окна модальной диалоговой панели
- •5.2.2 Создание окна немодальной диалоговой панели
- •П. 5.3 Разработка и компоновка диалоговых панелей.
- •П. 5.4 Сообщения и диалоговые панели
- •П. 5.5. Стандартные диалоговые панели
- •5.5.1. Панели для открытия или сохранения файлов
- •5.5.2. Панель для выбора цветов
- •5.5.3. Панель для выбора шрифта
П. 5.5. Стандартные диалоговые панели
5.5.1. Панели для открытия или сохранения файлов
В Win32 API существуют две функции для организации пользовательского интерфейса при выборе имен для открытия или создания файлов и при выборе имени для сохранения файла Это функции Ge-tOpenFileName и GetSaveFileName.
Функция GetOpenFileName создает стандартную панель выбора имен для открытия или создания файлов. Эта панель обеспечивает просмотр дисков, каталогов и списка имен файлов и выбор одного или нескольких имен файлов из списка.
Функция GetOpenFileName объявлена следующим образом: BOOL GetOpenFileName( LPOPENFILENAME Ipofn);
Параметр lpofii указывает на структуру типа OPENFILENAME, которая содержит данные для инициализации панели. После завершения работы функции GetOpenFileName этд структура будет дополнена данными о выбранных именах файлов.
Если пользователь выбрал имя файла и нажал кнопку ОК, возвращаемое значение отлично от нуля. При этом буфер, указанный полем ipstrFile структуры будет содержать полное имя выбранного файла. Иначе возвращаемое значение - нуль.
Функция GetSaveFileName создает стандартную панель выбора имени для сохранения файла/Эта панель обеспечивает просмотр дисков, каталогов и списка имен файлов и выбор одного имени файла. Эта функция объявлена следующим образом: BOOL GetSaveF9eNatne( LPOPENRLENAME Ipofn};
Параметр lpofh указывает на структуру типа OPENFILENAME, которая содержит данные для инициализации панели. После завершения работы функции GetSaveFileName эта структура будет дополнена данными ов
Если пользователь выбрал имя файла и нажал кнопку ОК, возвращаемое значение отлично от нуля. При этом буфер, указанный полем ipstrFile структуры, будет содержать полное имя выбранного файла. Иначе возвращаемое значение - нуль.
Структура OPENFILENAME описала следующим образом:
typedefstojet
IStructSize;
hwndOwner,
hlnstance;
IpstrFfflen
IpstfCustomFilto",
nMaxCustFffler;
nFiltertndex;
DWORD
HWND
H1NSTANCE
LPCTSTR
LPTSTK
DWORD
DWORD
LPTSTR
DWORD
LPTSTR
DWORD
LPCTSTR
LPCTSTR
DWORD
WORD
WORD
LPCTSTR
DWORD
LPOFNHOOKPROC
LPCTSTR
OPENFILENAME;
nMaxFile;
nMaxFileTitte;
tpstrinitialDtn
IpstrTitle;
nFfteOtfeet;
nFiteExtenston;
ipstfOefExt;
ICustData;
ipfaHook;
IpTemplateName;
Назначение полей структуры OPENFILENAME: .
1. IStructSize содержит размер структуры OPENFILENAME в байтах.
2. hwndOwner - дескриптор окна - владельца панели.
3. hlnstance указывает на блок памяти с шаблоном панели. Это поле игнорируется, если не указан флаг OFN^ENABLETEMPLATE или OFN_ ENABLETEMPLATEHANDLE.
Если Flags содержит значение OFN_EXPLORER, используется предопределенный шаблон панели в стиле Explorer. Иначе создается панель старого стиля.
4. ipstrFilter содержит адрес текстовой строки, задающей фильтр имен файлов. Фильтр состоит из одной или нескольких пар текстовых строк. Например, "Текстовые файлы\0*Ш\0". Символ \0? означает конец строки. Первая строка пары (здесь "Текстовые файлы") поясняет назначение фильтра, а вторая (здесь "*.txt") задает образец имен файлов. В одной паре можно задать различные образцы, разделяя их точкой с запятой (например, "*.txt; *.doc; *.bak"). Если lpstrFilter=NULL, используется фильтр lpstrCustomFilter.
5. lpstrCustomFilter указывает на статический буфер, в котором будет храниться примененный пользователем фильтр. Этот буфер должен быть длиной не менее 40 символов.
6. nMaxCustFilter содержит размер буфера lpstrCustomFilter.
7. nFilterlndex задает номер пары строк в поле IpstrFilter для использования в качестве фильтра. После выбора имени файла в поле nFilterlndex сохраняется номер использованного фильтра.
8. IpstrFile содержит адрес строки, в которую будет записано полное имя выбранного файла. Если выбран список имен файлов, эта строка будет содержать путь, завершенный символом '\0', затем следуют имена файлов, завершенные символом *\0\ Последнее в списке имя завершается двумя символами \0\
9. nMaxFile содержит размер в байтах буфера, расположенного по адресу, указанному в поле IpstrFile.
10. ipstrFileTitle содержит адрес буфера, в который после выбора будет записано имя файла без указания пути. Это поле может быть использовано для отображения имени выбранного файла.
11. nMaxFileTitle содержит размер указанного выше буфера. Этот член игнорируется, если lpstrFileTitle=NULL.
12. ipstrlnitialDir указывает на строку, содержащую начальный путь поиска имен файлов.
13.1pstrTit.e указывает на строку, содержащую нестандартный заголовок панели.
14. nFileOffset будет содержать, смещение первого символа имени файла от начала буфера lpsfrFile. Например, если IpstrFile указывает на строку "c:\did\dir2\lle.exfV то поле nFileOffset содержит смещение имени file.ext от начала строки, равное 13.
15. nFileExtension будет содержать смещение первого символа расширения имени файла от начала буфера lpstrFile. Например, если IpstrFile указывает на строку «c:\dirl\dir2\fue.ext», то это поле содержит смещение расширения ext от начала строки, равное 18.
16. ipstrDefExt указывает на буфер,, который содержит Расширение имени файла по умолчанию. Это расширение добавляется к выбранному имени файла, если расширение не было указано.
17. Значение lCustData передается функции фильтра через параметр lParam.
18 Flags задает режимы выбора и внешний вид панели. Следующая таблица содержит список часто применяемых флагов, комбинации которых используются для заполнения этого поля:
Флаг OFN ALLOWMULTI'SELECT |
Можно выбрать список имен файлов |
|
OFN_CREATEPROMPT |
При выборе имени не существующего файла панель запросит, нужно ли создать файл |
|
OFN_ENABLEHOOK |
Использовать функцию фильтра, указанную в поле lpfhHook |
|
OFNJEXPLORER |
Этот флаг указывают только с флагом OFN ENABLEHOOKmh OFN ALLOWMULTISELECT |
|
OFN EXTENSIONDIFFERENT |
Проверить ситуации, когда расширение заданного имени файла отличается от расширения, указанного в lpstrDefExt |
|
OFN_FILEMUSTEXIST |
Предупреждать при вводе имени несуществующего файла. Используется с флагом OFN_PATHMUSTEXIST |
|
OFN HIDEREADONLY |
Скрыть кнопку "Только чтение" |
|
OFN_N0CHANGEDIR |
Поиск файлов начинать в первоначально заданном каталоге |
|
OFN_NONETWORKBUTTON |
Скрыть и отключить кнопку Network |
|
OFN NOREADONLYRETURN |
Запретить выбор файла с атрибутом "только чтение" и в защищенном от записи каталоге |
|
OFN_OVERWRITEPROMPT |
При сохранении файла предупреждать, если файл с указанным именем уже существует |
|
OFNJ»ATHMUSTEXIST |
Можно вводить только существующее полное имя файла |
|
OFN READONLY |
Включить кнопку "Только чтение" |
|
OFN_SHAREAWARE |
Игнорировать факт совместного доступа к файлу по сети |
|
OFN SHOWHELP |
Показать кнопку "Справка" |
19. ipfhHook указывает на функцию фильтра, обрабатывающую сообщения для панели.
20. lpTemplatename идентифицирует ресурс, содержащий шаблон панели, используемый вместо стандартного шаблона. Для применения альтернативного шаблона в поле Flags следует установить флагОРЫ_ ENABLETEMPLATE.
Задача. Главное меню приложения содержит раздел "Файл" со строками "Открыть", "Сохранить" и "Выход". При выборе строки "Открыть" создать стандартную панель для выбора списка имен для открытий или создания файлов. Отобразить этот список. При выборе строки "Сохранить" создать стандартную панель для выбора имени для сохранения файла. Отобразить это имя. Панели должны работать с одними и теми же допустимыми начальными установками.