Шаг 7 - Следим за процессом соединения

Создание проекта

Для изучения данного вопроса Вам необходимо создать проект из диалогового окна с кнопкой. У кнопки должна обрабатываться процедура нажатия. Как это сделать? Смотрите шаги 30-31 раздела MFC.

Создаем код

В файле DiaDlg.cpp создать код процедуры:

void OnRas(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
	switch (rasconnstate)
	{
		case RASCS_OpenPort : AfxMessageBox("RASCS_OpenPort"); break;
		case RASCS_PortOpened: AfxMessageBox("RASCS_PortOpened"); break;
		case RASCS_ConnectDevice: AfxMessageBox("RASCS_ConnectDevice"); break;
		case RASCS_DeviceConnected: AfxMessageBox("RASCS_DeviceConnected"); break;
		default: AfxMessageBox("?");
	}
}

Изменить реакцию на нажатие кнопки:

void CDiaDlg::OnDial() 
{
	HRASCONN hrascon=NULL;
	RASDIALPARAMS rc[1];
	rc[0].dwSize = sizeof(RASDIALPARAMS);
	GetPrivateProfileString("Ras","EntryName","not ready",rc[0].szEntryName,99,"Ras.ini");
	GetPrivateProfileString("Ras","Phone","not ready",rc[0].szPhoneNumber,99,"Ras.ini");
	GetPrivateProfileString("Ras","UserName","not ready",rc[0].szUserName,99,"Ras.ini");
	GetPrivateProfileString("Ras","Password","not ready",rc[0].szPassword,99,"Ras.ini");
	strcpy(rc[0].szDomain,"");   
	RasDial(NULL,NULL,rc,0,OnRas,&hrascon);  	
}

Описание

Обратите внимание на RasDial(). Общая идея такова. После выполнения каждого шага соединения. Например, получения доступа к порту, или набора номера происходит вызов некоторой процедуры, куда передаются парамеры о шаге выполения и успехе операции.

Указатель на эту процедуру и тип параметров указан здесь (жирные) RasDial(NULL,NULL,rc,0,OnRas,&hrascon);.

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

VOID WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError); 

Если 1, то:

VOID WINAPI RasDialFunc1( HRASCONN hrasconn, UINT unMsg,
		RASCONNSTATE rascs,DWORD dwError,DWORD dwExtendedError); 

А параметр 2 используется для NT.

В параметры Вашей функции передаеться тип операции в переменной rasconnstate которую и анализируем для вывода сообщений на экран.

Делайте всё необходимое и запускате. Сначала программа будет сообщать Вам о том, что порт открыт, потом о том, что устанавливается соединение и потом знаки вопроса. Список событий довольно длинный и я всё пока перечислять не стал.

Шпаргалка

Для контроля процесса соединения создайте функцию:

void OnRas(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
......
}

Свяжите эту функцию с вызовом соединения:

RasDial(NULL,NULL,rc,0,OnRas,&hrascon);  

Не забудьте, что параметры зависят от кода.


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