Лекция 6 Операционные системы ЗР
Использование стандартных системных окон
Окно Открытия файла:
Создадим диалоговую форму из двух полей и одной кнопки:
Код управляющего модуля:
Глобальные переменные:
HWND hList1;
OPENFILENAME ofn;
Статические переменные в оконной процедуре диалога:
//список шаблонов для выделения файлов в окне диалога
static char szFilter[]="Text Files (*.TXT)\0*.txt\0"
"ASCII Files (*.ASC)\0*.asc\0"
"All Files (*.*)\0*.*\0\0";
//текстовые буфера для получения результата выбора файла
static char szFileName[_MAX_PATH];
static char szTitleName[_MAX_FNAME+_MAX_EXT];
//структура для сообщения о выделении строки в текстовом поле
static CHARRANGE szSel;
switch (wMsg)
{
// Сообщение о инициализации диалогового окна
case WM_INITDIALOG:
//Инициализация структуры окна выбора файлов:
ofn.lStructSize=sizeof (OPENFILENAME); //размер структуры
ofn.hwndOwner=hWnd; //дискриптор окна владельца
ofn.hInstance=NULL; //хендел потока родителя
ofn.lpstrFilter=szFilter; //строка допустимых фильтров выбора файлов
ofn.lpstrCustomFilter=NULL; //строка с выбранным фильтром
ofn.nMaxCustFilter=0; //длина строки предыдущего поля
ofn.nFilterIndex=0; //индекс выбранной строки фильтра
ofn.lpstrFile=NULL; //строка с выбранным файлом и путем к нему
ofn.nMaxFile=_MAX_PATH; //максимально допустимая длина предыдущей строки
ofn.lpstrFileTitle=NULL; //строка с именем выбранного файла
ofn.nMaxFileTitle=_MAX_FNAME+MAX_EXT; //макс.допустимая длина пред. строки
ofn.lpstrInitialDir=NULL; //имя каталога
ofn.lpstrTitle=NULL; //строка с заголовком диалогового окна
ofn.Flags=0; //Флаги диалогового окна
ofn.nFileOffset=0; //Смещение имени файла в строке
ofn.nFileExtension=0; //Смещение расширения файла в строке
ofn.lpstrDefExt="txt"; //расширение выбираемых файлов по-умолчанию
ofn.lCustData=0L; //данные для обработки
ofn.lpfnHook=NULL; //указатель для функции обработки (ФОВ)
ofn.lpTemplateName=NULL; //имя шаблона диалогового окна
//инициализация структуры окна редактирования строки для выделения в нем текста
szSel.cpMin=0; //позиция первого выделяемого символа в строке
szSel.cpMax=-1; //выделить все символы
break;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Обработка нажатия клавиши вызова окна выбора файлов
// Сообщение от элементов диалогового окна
case WM_COMMAND:
switch (LOWORD (wParam))
{
//Нажатие на кнопку ОТКРЫТЬ ФАЙЛ
case IDC_OPEN:
//указываем положение буферов для получения результатов
ofn.lpstrFile=szFileName;
ofn.lpstrFileTitle=szTitleName;
//отображать все файлы
ofn.Flags=OFN_HIDEREADONLY | OFN_CREATEPROMPT;
//открыть диалог по выбору файлов
GetOpenFileName(&ofn);
//получить указатель на текстовое поле 1
hList1= GetDlgItem (hWnd, PVIEW_COMPUTER);
//выделить в нем весь имеющийся текст
SendMessage(hList1,EM_EXSETSEL, 0, (LPARAM)&szSel);
//и заменить его выбранным файлом
SendMessage(hList1,EM_REPLACESEL,0,(LPARAM)szFileName);
//повторить эти операции для второго текстового поля
//в котором высвечивается только имя выбранного файла
hList1= GetDlgItem (hWnd,IDC_EDIT1);
SendMessage(hList1,EM_EXSETSEL, 0, (LPARAM)&szSel);
SendMessage(hList1,EM_REPLACESEL,0,(LPARAM)szTitleName);
break;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
}
Окно Сохранения файла:
На дополнительную кнопку ХХХ вешаем следующий код (по сравнению с предыдущим он практически никак не отличается. Форма работает на той же структуре, что и предыдущий пример):
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.