http://tikitak.narod.ru ---- Главная страница сайта
Шаг 13 - Обмен данными с диалоговой панелью без DDX
Ночью безлунной
В муке безумной
Тебя создала я сама (в данном случае сам)
"Алла Пугачева"
Создание проекта
Дополняем Step1. В файле ресурсов необходимо создать еще одну простую диалоговую панель. Можете изменить старую, но не запутайтесь с идентификаторами!
Создаем код
Обьявить идентификатор кнопки
#define IDC_LIST1 104
Мы будет изменять наш CMyDialog, описание класса
class CMyDialog : public CDialog
{
public:
CMyDialog( UINT nIDTemplate,CWnd* pParentWnd = NULL);
virtual BOOL OnInitDialog();
virtual void OnOK();
CString GetString();
private:
CListBox *cListBox;
CString cDate;
};
Реализация
CString CMyDialog::GetString()
{
return cDate;
}
void CMyDialog::OnOK()
{
if (cListBox->GetCurSel()==LB_ERR )
{
AfxMessageBox("Select Item List Box");
}
else
{
char buffer[256];
cListBox->GetText(cListBox->GetCurSel(),buffer);
cDate=buffer;
CDialog::OnOK();
}
}
CMyDialog::CMyDialog( UINT nIDTemplate, CWnd* pParentWnd)
:CDialog(nIDTemplate,pParentWnd)
{
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
CRect rect(10, 10, 100, 100);
cListBox=new CListBox();
cListBox->Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |LBS_NOTIFY | WS_VSCROLL | WS_BORDER, rect, this, IDC_LIST1);
cListBox->AddString("God");
cListBox->AddString("Bad");
cListBox->AddString("VOID");
return TRUE;
}
И применение
void CMainWnd::OnRButtonDblClk( UINT, CPoint )
{
CMyDialog about(IDD_DIALOG2);
if (about.DoModal()==IDOK)
{
AfxMessageBox(about.GetString());
}
}
Описание
То что писал ранее, писать больше не буду, читай все по шагам.
Смотрите на обьявление класса CMyDialog добавилась функция OnInitDialog. Это аналог функции OnCreate, т.е. в ней описываются все элементы создания диалога.
Функция OnOk виртуальная и будет вызвана по нажатию кнопки OK.
GetString для возврата данный, мы ведь договорились своими методами, правда ?
ClistBox* Указатель но будущий ListBox (окно со списком).
cDate Строка которую мы вернет с помощью GetString
Функция возврат строки . Там написанно return cDate это понятно вернуть её кто запросил.
Функция OnOK. Когда пользователь нажмет кнопку Ok управление передается в эту функцию. Дальше она проверяет, выбрали ли вы слово из списка используя константу LB_ERR. Эта константа возвращается когда нет выбора в поле со списком.
Так если выбора нет тогда сообшить об этом и продолжить диалог.
А вот если выбор был, с помошью функции GetText получаем текст. В ней необходимо указать, индекс элемента и буфер куда. Индекс мы берем текущий GetCurSel() скажет, что выбрано.
И напоследок вызывает OnOk папы , он завершит диалог и вернёт результат.
В методе OnInitDialog вызываем одноименный метод папы. Пусть всё необходимое сделает. CenterWindow() поставит диалоговое окно по середине от текущего окна, это красиво.
Создаем обьект типа CRect для будущего списка. Создаем обьект списка new и сам список используя Create. Параметры - это вначале атрибуты списка, размер, куда вставлять и идентификатор.
Addstring добавляет строки в список.
И в конце изменяем реакцию на двойной шелчок правой кнопкой мыши. Вызываем панель и в сучае нажатия кнопки Ok Показываем, что выбрано.
Запускайте и пробуйте , получиться точно !
Шпаргалка
Создайте данные в классе диалогового окна
class CMyDialog : public CDialog
{
.......
CString cDate;
.........
};
И функцию воврата данных
class CMyDialog : public CDialog
{
.........
CString GetString();
...........
};
Возмите данные после закрытия окна
if (about.DoModal()==IDOK)
{
............
}
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|