Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Закрытие диалога






По умолчанию диалог закрывается при получении сообщения с идентификатором либо IDOK, либо IDCANCEL. Они предопределены и обычно связаны с кнопками подтверждения и отмены. Класс CDialog содержит встроенные обработчики для этих двух случаев, OnOK() и OnCancel(). Их не нужно включать в очередь сообщений диалога. Но их можно переопределить, что дает возможность программисту управлять закрытием диалога. Для программного закрытия диалога нужно вызвать член-функцию с прототипом:

void CDialog:: EndDialog(int RetCode);

Параметр определят значение, которое вернет функция DoModal(). Обычно возвращаются значения IDOK или IDCANCEL, другие значения используются редко.

 

Элемент List Control выглядит следующим образом:

 

Чтобы добавить столбцы используется функция InsertColumn. Вот пример:

 

m_list.InsertColumn(0, _T(" Full Name"), LVCFMT_LEFT, 90);

m_list.InsertColumn(1, _T(" Profession"), LVCFMT_LEFT, 90);

m_ list.InsertColumn(2, _T(" Fav Sport"), LVCFMT_LEFT, 90);

m_ list.InsertColumn(3, _T(" Hobby"), LVCFMT_LEFT, 90);

 

Чтобы добавить строки используется функция InsertItem:

int nIndex = m_lstIDC_LIST1Control.InsertItem(0, _T(" Sandra C. Anschwitz"));

 

Чтобы установить значение в заданном столбце добавленной строки используется функция SetItemText:

m_ list.SetItemText(nIndex, 1, _T(" Singer"));

m_ list.SetItemText(nIndex, 2, _T(" Handball"));

m_ list.SetItemText(nIndex, 3, _T(" Beach"));

 

Добавляем еще одну строку:

nIndex = m_ list.InsertItem(1, _T(" Roger A. Miller"));

m_ list.SetItemText(nIndex, 1, _T(" Footballer"));

m_ list.SetItemText(nIndex, 2, _T(" Tennis"));

m_ list.SetItemText(nIndex, 3, _T(" Teaching"));

 

И так далее…

Пример программы: Планировщик задач.

В программе на главном диалоге приложения в виде списка отображается список задач, которые необходимо выполнить: Название задачи (Task), дату выполнения (Date), состояние – выполнено или не выполнено (Status). Новую задачу пользователь добавляет нажатием на кнопку Add. При этом открывается новое модальное диалоговое окно, в котором с помощью элементов управления текстового ввода пользователь вводит информацию о задаче и сроках ее выполнения. Также предусмотрена возможность удаления задачи нажатием на кнопку Delete. Если пользователь нажимает на кнопку Done, то статус задачи становится выполненным, и в списке в последней колонке отображается слово Done (выполнено).

Создаем новый проект, как показано на рис. 1.

Рис. 1.

 

Выбираем тип приложения на основе диалогового окна, как показано на рис.2.

Рис. 2.

 

На диалоге размещаем элемент управления List Control. В его свойствах выбираем Вид – Отчет, как показано на рис. 3. При таком виде записи будут отображаться в виде таблицы.

Рис. 3.

 

Добавляем в ресурсы новый диалог, как показано на рис. 4.

Рис. 4.

 

 

На диалоге размещаем 3 элемента текстового ввода, и не забываем добавить статический текст, как показано на рис. 5, чтобы пользователь понимал куда что нужно вводить.

Рис. 5.

 

 

Теперь для созданного ресурса диалога нужно создать класс. Для этого в Окне классов вызываем контекстное меню, щелкнув правой кнопкой мыши на названии проекта, и из контекстного меню выбираем Добавить Класс, как показано на рис. 6.

 

Рис. 6.

 

Откроется окно, показанное на рис. 7. В нем выбираем Класс MFC.

Рис. 7.

 

На следующем шаге вводим имя класса, и выбираем Базовый класс, а также идентификатор ресурса диалога, как показано на рис. 8.

Рис. 8.

 

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

 

 

// Project12Dlg.cpp: файл реализации

//

 

#include " stdafx.h"

#include " Project12.h"

#include " Project12Dlg.h"

#include " afxdialogex.h"

#include " MyDialog.h" // Это мы добавляем!!!

 

 

С помощью Мастера классов привязываем переменную к элементу управления, как показано на рис. 9 и рис. 10.

 

Рис. 9.

 

 

Рис. 10.

 

Связываем переменные с элементами управления в созданном классе диалога CMyDialog:

Рис. 11.

 

Добавляем код в обработчик нажатия на кнопку OK диалога добавления информации о задаче:

void CMyDialog:: OnBnClickedOk()

{

UpdateData(true);

CDialog:: OnOK();

}

 

 

Добавляем в OnInitDialog класса CProject12Dlg код, который создает в списке колонки:

 

m_list.InsertColumn(0, _T(" Task Name"), LVCFMT_LEFT, 200); // добавляем 1 колонку

m_list.InsertColumn(1, _T(" Date"), LVCFMT_LEFT, 150); // добавляем 2 колонку

m_list.InsertColumn(2, _T(" Status"), LVCFMT_LEFT, 150); // добавляем 3 колонку

// чтобы можно было выделить всю строку и были видны линии разделительной сетки таблицы

m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

 

Добавляем обработчик нажатия на кнопку Add:

 

void CProject12Dlg:: OnBnClickedButton1()

{qqq

CMyDialog dlg; // создание объекта диалога

int res=dlg.DoModal(); // отображение диалога на экране

if(res! =IDOK) return; // если пользователь не нажал ОК, выходим из этой функции

 

int N=m_list.GetItemCount(); // получаем количество записей в списке

m_list.InsertItem(N, dlg.m_name); // добавляем в конец списка новую запись

m_list.SetItemText(N, 1, dlg.m_date); // устанавливаем дату, которую ввел пользователь

m_list.SetItemText(N, 2, dlg.m_status); // устанавливаем статус задачи

}

 

 

Добавляем обработчик нажатия на кнопку Delete:

 

void CProject12Dlg:: OnBnClickedButton2()

{

int d; // объявляем переменную

d=m_list.GetSelectionMark(); // получаем номер текущей выбранной записи

m_list.DeleteItem(d); // мочим запись, как буряк в сортире

}

 

Добавляем обработчик нажатия на кнопку Done:

void CProject12Dlg:: OnBnClickedButton3()

{

int d; // объявляем переменную

d=m_list.GetSelectionMark(); // получаем номер текущей выбранной записи

m_list.SetItemText(d, 2, _T(" Done! ")); // ставим в 3 колонку текст Done!

}

 

 

Для автоматического сохранения списка в файл при закрытии диалога добавим код в обработчик нажатия на кнопку OK:

 

void CProject12Dlg:: OnBnClickedOk()

{

CStdioFile f; // объявляем объект для работы с текстовым файлом

f.Open(_T(" phone.dat"), CFile:: modeWrite | CFile:: modeCreate); // открываем файл

int n; // дополнительная переменная

n=m_list.GetItemCount(); // получаем количество записей

CAtlString s; // объект для работы со строками

for(int i=0; i< n; i++) // в цикле получаем текст из списка и записываем в файл

{

s=m_list.GetItemText(i, 0);

s=s+_T(" \n");

f.WriteString(s);

s=m_list.GetItemText(i, 1);

s=s+_T(" \n");

f.WriteString(s);

s=m_list.GetItemText(i, 2);

s=s+_T(" \n");

f.WriteString(s);

}

f.Close(); // закрываем файл

CDialogEx:: OnOK();

}

 

 

Чтобы при запуске приложения список заполнялся данными из файла, в конце функции OnInitDialog добавить нужно следующий код:

 

CStdioFile f; // объявляем объект для работы с текстовым файлом

if(f.Open(_T(" phone.dat"), CFile:: modeRead)) // открываем файл для чтения

{

CString s; // объект для работы со строками

int i=0;

while(f.ReadString(s)) // пока есть что считывать в файле, считываем

{

m_list.InsertItem(i, s);

f.ReadString(s);

m_list.SetItemText(i, 1, s);

f.ReadString(s);

m_list.SetItemText(i, 2, s);

i++;

}

f.Close(); // закрываем файл

}

 

Приложение готово. Компилируем проект. На рисунке ниже показано окно приложения.

Рис. 12.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.