FreeBASIC в России

   

 Главная   Исходники   Русскоязычный форум   Полезные файлы   Пользователи   Поиск

 

 FB Wiki   Уроки   Скачать FreeBASIC   Проекты   Ссылки   Загрузить   Каталог ссылок

 
 

 Замечания и предложения по работе сайта оставляйте здесь.

Сейчас на сайте:

Вы вошли как: Guest   Регистрация   

Логин:     Пароль:     

Создай бесплатно WebMoney кошелёк на своём мобильном всего за 5 минут

 

Делаем dll своими руками

Хэндл окна

Графические средства языка

Точка пересечения отрезков

Окна без рамки

Физика поведения ядра

Win32 API Введение

►Урок 1 Win32 API

►Урок 2 Win32 API

►Урок 3 Win32 API

►Урок 4 Win32 API

►Урок 5 Win32 API

►Урок 6 Win32 API

►Урок 7 Win32 API

►Урок 8 Win32 API

►Урок 9 Win32 API

►Урок 10 Win32 API

►Урок 11 Win32 API

►Урок 12 Win32 API

►Урок 13 Win32 API

►Урок 14 Win32 API

►Урок 15 Win32 API

►Урок 16 Win32 API

►Урок 17 Win32 API

►Урок 18 Win32 API

►Урок 19 Win32 API

►Урок 20 Win32 API

►Урок 21 Win32 API

►Урок 22 Win32 API

►Урок 23 Win32 API

►Урок 24 Win32 API

Ассоциация файлов

Определить OS

Выводит имя компьютера

 

 

 

Win32 API. Урок 11. Больше о диалоговых окнах.

Опытом поделился и оптимизировал под FreeBASIC:   15.01.2011

 

 

Реклама:

Курсы косметологии в Москве, обучение стилистов. Курсы медицинской косметологии Москва.;Создание сайтов список компаний. Создание управляющей компании найти.

 

В этом туториале мы узнаем больше о диалоговых окнах. В частности, мы узнаем, как использовать диалоговые окна в качестве устройств ввода- вывода. Если вы читали предыдущий туториал, то этот будет для вас достаточно прост, так как небольшая модификация - все, что требуется для использования диалоговых окон как дополнение к основному окну. Также в этом туториале мы научимся тому, как использовать предопределенные диалоговые окна.

Теория:

Очень немногое будет сказано о том, как использовать диалоговые окна в качестве устройств ввода-вывода. Программа создает основное окно как обычно, и когда вы хотите отобразить диалоговое окно, просто-напросто вызовите CreateDialogparam или DialogBoxparam. Вызвав DialogBoxparam, вам не нужно делать что-либо еще, просто обработайте сообщения в процедуре диалогового окна. При использовании CreateDialogParam, вам будет нужно вставить вызов IsDialogMessage в цикле сообщений, чтобы позволить менеджеру диалогового окна обработать навигацию клавиатуры в вашем диалоговом окне за вас. Поскольку эти два случая тривиальны, я не привожу здесь исходный код.

Давайте перейдем к предопределенным диалоговым окнам, которые Windows предоставляет для использования вашими приложениями. Эти диалоговые окна существуют, чтобы обеспечить стандартизованный пользовательский iнтерфейс. Существует файловое диалоговое окно, принтер, цвет, фонт и поисковое диалоговое окно. Вам следует использовать их так часто, как это возможно.

Вы создаете эти диалоговые окна вызовом соответствующих
функций из библиотеки предопределенных диалоговых окон. Для открытия файлового диалогового окна существует функция GetOpenFileName, для сохранения - GetSaveFileName, для диалогового окна принтера - PrintDlg и так далее. Каждая из этих функций берет указатель на структуру в качестве параметра. Вам следует посмотреть их в справочнике Win32 API. В этом туториале я продемонстрирую как создавать и использовать файловое диалоговое окно.

Ниже приведено описание функции GetOpenFileName.

function GetOpenFileName (byval as LPOPENFILENAME) as BOOL

Вы можете видеть, что она получает только один параметр, указатель на структуру OPENFILENAME. Возвращаемое значение TRUE показывает, что пользователь выбрал файл, который нужно открыть, FALSE означает обратное. Сейчас мы рассмотрим структуру OPENFILENAME:

type OPENFILENAME
lStructSize as DWORD
hwndOwner as HWND
hInstance as HINSTANCE
lpstrFilter as LPCSTR
lpstrCustomFilter as LPSTR
nMaxCustFilter as DWORD
nFilterIndex as DWORD
lpstrFile as LPSTR
nMaxFile as DWORD
lpstrFileTitle as LPSTR
nMaxFileTitle as DWORD
lpstrInitialDir as LPCSTR
lpstrTitle as LPCSTR
Flags as DWORD
nFileOffset as WORD
nFileExtension as WORD
lpstrDefExt as LPCSTR
lCustData as DWORD
lpfnHook as LPOFNHOOKPROC
lpTemplateName as LPCSTR
end type

Давайте рассмотрим значение часто используемых параметров.


lStructSize
размер структуры OPENFILENAME в байтах.
hwndOwner
Хэндл файлового диалогового окна.
hInstance
Хэндл процесса, который создает файловое диалоговое окно.
lpstrFilter
Строка-фильтр состоит из парных строк, разделенных null'ом. Первая строка в
каждой паре - это описание. Вторая строка - это шаблон фильтра. Например:
.lpstrFilter = @!"All Files, (*.*)\0*.*\0Bas Files, (*.BAS)\0*.bas\0\0" )
во второй строке каждой пары действительно используется для отфильтровки файлов. Также отметьте, что вам нужно добавить дополнительный 0 в конце фильтровых строк, чтобы указать конец.
Определите, какая пара фильтровых строк будет использоваться при первом отображении файлового диалогового окна. Индекс основывается на единице, то есть первая пара - 1, вторая - 2 и так далее. Поэтому в вышеприведенном экземпляре, если мы укажем nFilterIndex как 2, будет использован второй шаблон - "*.bas".
lpstrFile
Указатель на буфер, который содержит имя файла, используемого для инициализации edit control'а имени файла на диалоговом окне. Буфер должен быть длиной по крайней мере 260 байтов.
После того, как юзер выберет файл для открытия, имя файла с полным путем будет сохранено в этом буфере. Вы можете извлечь информацию из него позже.
nMaxFile
размер буфера.
lрstrTitle
Указатель на заголовок открытого файлового диалогового окна.
Flags
Определяет стили и характеристики диалогового окна.
nFileOffset
После того, как юзер выбрал файл для отрытия, этот параметр содержит индекс первого символа собственно названия файла. Например, если полное имя с путем
"c:\windows\system\lz32.dll", то этот параметр будет содержать значение 18.
nFileExtension
После того, как пользователь выберет файл для открытия, этот параметр содержит индекс первого символа расширения файла.

Пример:

Нижеприведенная программа отображает диалоговое окно открытия файла, когда пользователь выбирает пункт File->Open в меню. Когда пользователь выберет файл
в диалоговом окне, программа отобразит сообщение, содержащее полное имя, собственно имя файла и расширение выбранного файла.

файл fileopen.bas

Скопировать данный код в буфер обмена

файл fileopen.bi

Скопировать данный код в буфер обмена

файл fileopen.rc

Скопировать данный код в буфер обмена

Анализ:

ofn.lStructSize = SIZEOF(OPENFILENAME)
ofn.hwndOwner = hWnd
ofn.hInstance = hModule

Мы заполняем в процедуре члены структуры ofn.

ofn.lpstrFilter = _
@!"Text files, *.txt\0*.txt\0Bas files, *.bas\0*.bas\0All files, *.*\0*.*\0\0"

Заметьте, что все пять строк заканчиваются нулем. Первая строка - это описание следующей строки. Первая строка является описанием первой. В качестве
фильтра мы можем определить все, что захотим. Мы должны добавить дополнительный ноль после последнего фильтра, чтобы указать конец. Не забудьте сделать это, иначе ваше диалоговое окно поведет себя весьма странно.

ofn.lpstrFile = @buffer
ofn.nMaxFile = MAXSIZE

Мы указываем, где диалоговое окно должно поместить имена файлов, выбранные пользователем. Учтите, что мы должны указать размер буфера в nMaxFile. Мы можем затем извлечь имя файла из этого буфера.

ofn.Flags = OFN_FILEMUSTEXIST or _
OFN_PATHMUSTEXIST or OFN_LONGNAMES or _
OFN_EXPLORER or OFN_HIDEREADONLY

Флаги определяют характеристики окна.

• OFN_FILEMUSTEXIST и OFN_PATHMUSTEXIST указывают то, что имя файла и путь, который пользователь набирает в edit control'е имени файла, должен существовать.
• OFN_LONGNAMES указывает диалоговому окну показывать длинные имена.
• OFN_EXPLORER указывает на то, что появление диалогового окна должно быть похоже на explorer.
• OFN_HIDEREADONLY прячет неизменяемый checkbox на диалоговом окне. Есть много других флагов, которые вы можете использовать. Проконсультируйтесь с вашим справочником по Win32 API.

ofn.lpstrTitle = @"-=Our First Open File Dialog Box=-: Choose the file to open"

Указываем имя диалогового окна.

if GetOpenFileName(@ofn) = TRUE then

Вызов функции GetOpenFileName. Передача указателя на структуру ofn в качестве параметров.
В тоже время, диалоговое окно открытия файла отображается на экране. Функция не будет возвращаться, пока пользователь не выберет файл или не нажмет кнопку 'Cancel' или закроет диалоговое окно.
Функция возвратит TRUE, если пользователь выбрал файл, в противном случае FALSE.

lstrcat(@OutputString,"The Full Filename with Path is: ")
lstrcat(@OutputString,ofn.lpstrFile)
lstrcat(@OutputString,CrLf)
lstrcat(@OutputString,"The Filename is: ")
lstrcat(@OutputString,(ofn.lpstrFile + ofn.nFileOffset))
lstrcat(@OutputString,CrLf)
lstrcat(@OutputString,"The Extension is: ")
lstrcat(@OutputString,(ofn.lpstrFile + ofn.nFileExtension))

В случае, если пользователь выбирает файл, мы подготавливаем строку вывода, которая будет отображаться в окне сообщения. Мы резервируем блок памяти в переменной OutputString и затем используем API-функцию, lstrcat, чтобы соединить обе строки. Чтобы разместить строку в несколько рядов, мы должны использовать символы переноса каретки.

MessageBox(hWnd,@OutputString,"Result",MB_OK)

Мы отображаем строку в окне сообщения.

RtlZeroMemory(@OutputString,OUTPUTSIZE)

Мы должны очистить OutputString перед тем, как заполнить его другой строкой. Поэтому мы используем для этого функцию RtlZeroMemory .

[C] Iczelion, пер. Aquila.

 

 

Прокомментировать

Ваше имя:  

Ваш e-mail:  

Сообщение:



Введите код: 

 

 

   Спасибо можно сказать, посетив любую ссылку:

 

 

© 2010-2012

DEPOzit (Попов Денис Владимирович)

WebMoney кошелёк: WMID#302963000004

ICQ:279786014 или R549103331586   Z116647355686