Операционная система Microsoft Windows 3.1 для программиста -том 3

       

Новый вариант приложения OEM3ANSI


Приведем еще один вариант приложения OEM3ANSI, описанного в предыдущем томе "Библиотеки системного программиста". В новом варианте приложение заказывает в глобальной области памяти буфер для чтения перекодируемого файла, причем размер этого буфера равен... размеру файла! Далее с помощью одного вызова функции _hread весь файл переписывается в буфер и перекодируется "по месту". Результат перекодировки из буфера переписывается в выходной файл за один вызов функции _hwrite. Таким образом, в нашем приложении нет привычного цикла чтения файла, который прерывается при достижении конца файла, а также нет цикла записи в файл. Механизм виртуальной памяти расширенного режима операционной системы Windows и функции _hread, _hwrite облегчают работу с файлами.

Кроме демонстрации работы перечисленных выше двух функций в новом варианте приложения OEM3ANSI для выбора входного и выходного файла мы использовали вместе со стандартными функциями GetOpenFileName и GetSaveFileName нестандартные шаблоны диалоговых панелей "Open" и "Save as...". Внешний вид диалоговой панели для выбора входного файла представлен на рис. 4.3, для выбора выходного файла - на рис. 4.4.

Рис. 4.3. Выбор входного файла

Рис. 4.4. Выбор выходного файла

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

Как создать свой шаблон для стандартной диалоговой панели ?

Для этого проще всего воспользоваться приложением Borland Resource Workshop. С помощью этого приложения вы сможете "вытянуть" из DLL-библиотеки commdlg.dll описание любого имеющегося там ресурса, записав его в текстовый файл с расширением имени rc.




Запустите приложение Borland Resource Workshop. С помощью строки "Open Project" меню "File" загрузите DLL-библиотеку commdlg.dll. Вариант этой библиотеки, который вы можете распространять вместе с созданными вами приложениями, как правило, поставляется в составе системы разработки приложений. Кроме того, эта библиотека есть в системном каталоге операционной системы Windows версии 3.1.

После загрузки библиотеки в окне "commdlg.dll" вы увидите список ресурсов (рис. 4.5).



Рис. 4.5. Шаблоны диалоговых панелей и другие ресурсы в DLL-библиотеке commdlg.dll

Из ресурсов типа DIALOG выберите шаблон 1536. На экране появится окно "DIALOG:1536", в котором вы сможете редактировать стандартную диалоговую панель "Open" (рис. 4.6).



Рис. 4.6. Редактирование стандартной диалоговой панели "Open"

Однако перед тем как редактировать шаблон, его лучше сохранить в отдельном файле. Для этого из меню "Resource" выберите строку "Save resource as..." и сохраните описание шаблона, например, в файле с именем open.rc.

Таким образом, вы выделили описание нужного вам шаблона диалоговой панели в отдельный файл. Содержимое этого файла можно включить в файл описания ресурсов вашего приложения и использовать для работы с функциями GetOpenFileName и GetSaveFileName (как мы и поступили в приложении OEM3ANSI).

Учтите, что при редактировании шаблона не следует удалять из него органы управления, даже если по логике работы приложения они не нужны. Дело в том, что функции DLL-библиотеки commdlg.dll могут обращаться к ним. Например, они могут инициализировать списки. Поэтому, если вам надо сделать какой-либо стандартный орган управления невидимым, вы можете указать для него расположение вне видимой части экрана.

Теперь перейдем к описанию приложения OEM3ANSI. Исходные тексты главного файла приложения приведены в листинге 4.3.


Содержание раздела