RDM/2 The Russian Electronic Developer Magazine  
RDM/2 Русский электронный журнал разработчика  
ДомойОт редактораПишите намОбратная связьRU/2

О болванах и диалогах...

БОЛВАНЪ - ...деревянная или иная вещь,
по которой должно отлить металическую,
образецъ на льякъ...
(Даль В.И. Толковый Словарь...)

Честно говоря, мои муки при изучении программирования на C для OS/2 были бы значительно меньшими, если бы ToolKit от IBM вместо пустых отвлеченных примеров (да еще и написанных в разных стилях) содержал некоторое количество хорошо комментированных работающих заготовок программ.

По моему мнению, даже отсутствие хорошей документации (справочники-то в ToolKit-е все-таки есть ;-)) не является такой уж непреодолимой преградой. Все это - дело наживное, тем более теперь - в условиях почти вездесущего Internet-а (и все-таки не могу не отметить книжку Фроловых - кое-что в голове помогла привести в систему).

Программирование же по принципу "делай как я" позволяет достаточно быстро достичь желаемых результатов, но только при наличии хороших примеров.

Что и послужило поводом к написанию данной статьи (не претендуя на истину в последней инстанции, надеюсь, что мой пример хороший :-)). Посвящена она не очень внятно излагаемой в документации проблеме минимизации диалогов.

В самом деле, как быть, если главное окно Вашей программы должно представлять из себя диалог? И при этом оставаться полноценным главным окном, т.е. иметь собственную иконку, возможность изменять свои размеры, правильно минимизироваться, максимизироваться и восстанавливать свои размеры, присутствовать в списке окон и т.д., и т.п.

Если кратко изложить рекомендации от IBM (см. Redbooks OS/2 V2.0 Volume 4: Application Development (2)), то они сводятся к следующему:

- WinDlgBox() создает модальный диалог. Его нельзя минимизировать по определению;

- для создания немодальных диалогов предлагается два пути:
1). создать главное окно функцией WinCreateStdWindow() и самостоятельно разместить на нем элементы диалога в виде дочерних окон;

2). использовать для загрузки диалога из ресурсов функцию WinLoadDlg(), а затем сделать его видимым с помощью функции WinShowWindow() или WinSetWindowPos().

Первый путь прост в понимании, но утомителен в программировании. Кроме того, приложение будет намертво привязано к форме диалога, т.е. даже простое изменение положения какого-либо элемента диалога будет требовать перекомпиляции программы.

Второй путь более привлекателен (в силу простоты создания диалога и возможности написания программ, независимых от формы диалога) и IBMеры сразу же предлагают использовать его, скромно умолчав "о всего-то сотне километров трясины, скал и непроходимых джунглей, кишаших голодными дикими зверями" (с) не помню чей.

Результаты моих скромных изысканий на этом пути представлены ниже в виде исходного текста программы Болван диалоГовый (коротко, БГ). Я постарался написать к нему достаточно подробные комментарии и осветить все темные места. Примерно так, по моему мнению, должны были бы выглядеть программы-заготовки, которых мне так не хватало.

Коротко о том, что имеет и умеет БГ:

- не зависит от формы диалога (диалог в ресурсе);

- имеет все атрибуты фрейма, в том числе, свою иконку, которая отображается в соответствующих местах (меню и таблицу акселераторов тоже можно грузить из ресурсов - здесь опущено, чтобы не перегружать текст);

- отображается в списке окон;

- реагирует на изменение размеров окна;

- умеет правильно максимизироваться, минимизироваться и восстанавливать положение и размеры окна (в том числе, и при максимизации из минимизированного положения);

- при изменении размеров окна выравнивает позиции элементов диалога (тех, о которых знает);

- при выходе запоминает свое положение и размеры, восстанавливая их при следующем старте (в том числе, и минимизированное).

В прилагаемом архиве (boldy.zip) находятся:

- исходный текст БГ (boldy.c)
- заголовки БГ (boldy.h)
- ресурсы БГ (boldy.rc)
- диалог БГ (boldy.dlg)
- командный файл для замены ресурсов в EXE-модуле БГ (rcboldy.cmd)
- командный файл для удаления записи о параметрах окна БГ
из OS2.INI (deboldy.cmd)
- иконка БГ (boldy.ico)
- исполняемый файл БГ (boldy.exe) - скомпилирован Watcom 10.0

Сознательно опускаю файл определений (*.def) - каждый может написать его сам - только добавлю, что под стек надо выделить не меньше 16K.

Виктор Смирнов

---
Интересные ссылки:

---

---
Комментариев к странице: 0 | Добавить комментарий
---
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов
(C) Russian Underground/2