Для изучения данного вопроса Вам необходимо создать проект из диалогового окна с кнопкой. У кнопки должна обрабатываться процедура нажатия. Как это сделать? Смотрите шаги 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);
Не забудьте, что параметры зависят от кода.