Шаг 305 - Создаем немодальный диалог

Немодальный диалог создается функцией Create(). Создаем тестовое приложение, как SDI и именем TestDlgs. Создаем пункт меню в View с именем Dialog и идентификатором ID_DIALOG. К этому пункту меню привязываем команду.

/////////////////////////////////////////
// CTestDlgsView message handlers

void CTestDlgsView::OnDialog() 
{

}

Теперь нужно создать диалог в ресурсах. Просто добавляем и все. Идентификатор у меня IDD_DIALOG1. Для того, чтобы диалог существовал нужно, чтобы существовал его объект. Для этого мы с Вами опишем переменную класса диалога в виде.

class CTestDlgsView : public CView
{
protected: // create from serialization only
	CTestDlgsView();
	DECLARE_DYNCREATE(CTestDlgsView)

// Attributes
public:
	CTestDlgsDoc* GetDocument();
	CDialog dlg;
// Operations
......
}

Создаем диалоговую панель при инициализации:

void CTestDlgsView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	dlg.Create(IDD_DIALOG1,this);	
}

Ну, и реализацию функции для показа и скрытия:

void CTestDlgsView::OnDialog() 
{
	if (dlg.IsWindowVisible())
		dlg.ShowWindow(SW_HIDE);
	else
		dlg.ShowWindow(SW_SHOW);	
}

Посмотрим, как это работает. Диалог будет на экране и при этом не будет мешать работать с программой.

305.gif (3134 b)

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.