..back /****************************************************************************** Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved. remwiz.c : Remote networking wizard dialogs ******************************************************************************/ // ---------------------------------------------------------------- // // IDD_RAS_WIZ_1 // ( Enter Name and Dial/Direct/Vpn) // | // +-------Dial?-------> IDD_RAS_WIZ_2 // | (Enter Modem Name, have Config+TCP settings) // | | // | | // | IDD_RAS_WIZ_3 // | (Enter Phone Num, Fin) // | // | // | // +-------Direct?-----> IDD_RAS_WIZ_4 // | (Enter DevName, Fin) // | (Config + TCP Settings) // | // | // | // +-------VPN?--------> IDD_RAS_WIZ_5 // (Enter DevName, Fin) // (Config + TCP Settings) // // // // // // ---------------------------------------------------------------- #include <windows.h> #include <tchar.h> #include "string.h" #include "memory.h" #include "commctrl.h" #include "remnet.h" #include "resource.h" #include "ipaddr.h" #include "tapi.h" #include "unimodem.h" #include "dbt.h" PBYTE v_pDevConfig; DWORD v_dwDevConfigSize; DWORD Device; BOOL v_EnteredAsAWizard; extern BOOL v_fPortrait; extern const TCHAR szAppName[]; extern HINSTANCE v_hInst; #define COUNTRY_CODE_SIZE 16 WNDPROC g_pEditProc; // // ---------------------------------------------------------------- // // GetRasDevices // // Call's RasEnumDevices() to get an array of the Ras Device names // and types. // // Returns the number of devices found. // // NOTE: Caller is responsible for freeing the pRasDevInfo data. // // Example usage: // // dwRasDevices = GetRasDevices (&pRasDevInfo); // for (i=0; i < dwRasDevices; i++) { // if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Modem)) { // _tcscpy (EditItem.Entry.szDeviceName, pRasDevInfo[0].szDeviceName); // break; // } // } // if (pRasDevInfo) { // LocalFree (pRasDevInfo); // } // // ---------------------------------------------------------------- DWORD GetRasDevices (LPRASDEVINFO *pRasDevInfo) { DWORD cBytes, cNumDev, dwRetVal; *pRasDevInfo = NULL; cBytes = 0; cNumDev = 0; dwRetVal = RasEnumDevices (NULL, &cBytes, &cNumDev); if (0 == dwRetVal) { // Allocate a buffer *pRasDevInfo = (LPRASDEVINFO) LocalAlloc (LPTR, cBytes); if (pRasDevInfo) { dwRetVal = RasEnumDevices (*pRasDevInfo, &cBytes, &cNumDev); } else { DEBUGMSG (ZONE_ERROR, (TEXT("Error %d doing LocalAlloc of RasDev's\r\n"), GetLastError())); LocalFree (*pRasDevInfo); *pRasDevInfo = NULL; cNumDev = 0; } } else { DEBUGMSG (ZONE_ERROR, (TEXT("Error %d from RasEnumDevices()\r\n"), dwRetVal)); cNumDev = 0; } #ifdef DEBUG DEBUGMSG (1, (TEXT("GetRasDevices: Found %d devices\r\n"), cNumDev)); for (cBytes=0; cBytes < cNumDev; cBytes++) { DEBUGMSG (1, (TEXT("\tDev[%d] : Name='%s' Type='%s'\r\n"), cBytes, (*pRasDevInfo)[cBytes].szDeviceName, (*pRasDevInfo)[cBytes].szDeviceType)); } #endif return cNumDev; } LONG EditFullWidthConversionSubclassProc( HWND hwnd, UINT nMsg, WPARAM wparam, LPARAM lparam) { TCHAR ch, chHW; ASSERT (g_pEditProc); switch(nMsg) { case WM_CHAR: ch = (TCHAR)wparam; LCMapString(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH, &ch, 1, &chHW, 1); wparam = (WPARAM)chHW; break; } return CallWindowProc(g_pEditProc, hwnd, nMsg, wparam, lparam); } BOOL GetDialUpSettings(HWND hDlg, TCHAR CountryCode[], BOOL Validate) { TCHAR *pGet, *pPut; TCHAR szTemp[128]; UINT szTempSize = sizeof(szTemp) / sizeof(TCHAR); TCHAR szFmtStr[128]; UINT cFmtStrSize = sizeof(szFmtStr) / sizeof(TCHAR); // Area code GetWindowText (GetDlgItem (hDlg, IDC_AREA_CODE), EditItem.Entry.szAreaCode, RAS_MaxAreaCode+1); // Phone Number GetWindowText (GetDlgItem (hDlg, IDC_PHONE_NUM), EditItem.Entry.szLocalPhoneNumber, RAS_MaxPhoneNumber+1); // trim white space in phone number pGet = pPut = EditItem.Entry.szLocalPhoneNumber; while (*pPut != TEXT('\0')) { if (*pGet != TEXT(' ')) *pPut++ = *pGet; pGet++; } if (Validate) { // Validate Phone... if (TEXT('\0') == EditItem.Entry.szLocalPhoneNumber[0]) { LoadString(v_hInst, IDS_PHONEREQ, szFmtStr, cFmtStrSize); LoadString(v_hInst, (v_fPortrait) ? IDS_CONNECTIONS : IDS_REMNET, szTemp, szTempSize); MessageBox (hDlg, szFmtStr, szTemp, MB_OK | MB_ICONWARNING); // Will this make it blink? SetFocus(GetDlgItem(hDlg, IDC_PHONE_NUM)); return FALSE; } } // Country Code GetWindowText (GetDlgItem (hDlg, IDC_COUNTRY), CountryCode, COUNTRY_CODE_SIZE); if (CountryCode[0] == TEXT('\0')) EditItem.Entry.dwCountryCode = 0; else EditItem.Entry.dwCountryCode = My_atoi(CountryCode); // Country code check box if (SendMessage(GetDlgItem(hDlg, IDC_FORCELD), BM_GETCHECK, 0, 0)) { EditItem.Entry.dwfOptions |= RASEO_UseCountryAndAreaCodes; } else { EditItem.Entry.dwfOptions &= ~(RASEO_UseCountryAndAreaCodes); } if (SendMessage(GetDlgItem(hDlg, IDC_FORCELOCAL), BM_GETCHECK, 0, 0)) { EditItem.Entry.dwfOptions |= RASEO_DialAsLocalCall; } else { EditItem.Entry.dwfOptions &= ~(RASEO_DialAsLocalCall); } // -- if they have checked the force local checkbox, make sure they have entered an area code if (Validate) { if ((EditItem.Entry.dwfOptions & RASEO_DialAsLocalCall) && (TEXT('\0') == EditItem.Entry.szAreaCode[0])) { LoadString(v_hInst, IDS_AREAREQ, szFmtStr, cFmtStrSize); LoadString(v_hInst, (v_fPortrait) ? IDS_CONNECTIONS : IDS_REMNET, szTemp, szTempSize); MessageBox (hDlg, szFmtStr, szTemp, MB_OK | MB_ICONWARNING); // Will this make it blink? SetFocus(GetDlgItem(hDlg, IDC_AREA_CODE)); return FALSE; } } return TRUE; } void FixButtons(HWND hDlg, DWORD Dialog_IDD) { LONG dwStyle; TCHAR szFmtStr[128]; UINT cFmtStrSize = sizeof(szFmtStr) / sizeof(TCHAR); if (!v_EnteredAsAWizard) { dwStyle = GetWindowLong(hDlg, GWL_STYLE); SetWindowLong(hDlg, GWL_STYLE, dwStyle | WS_SYSMENU); dwStyle = GetWindowLong(hDlg, GWL_EXSTYLE); SetWindowLong(hDlg, GWL_EXSTYLE, dwStyle | WS_EX_CAPTIONOKBTN); // Not a wizard, so hide buttons ShowWindow(GetDlgItem(hDlg, IDBACK), SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDFINISH), SW_HIDE); // Rename dialog title if (Dialog_IDD == v_DialogPages[DLG_PG_2]) { LoadString(v_hInst, IDS_DIALUPTITLE, szFmtStr, cFmtStrSize); SetWindowText(hDlg, szFmtStr); } if (Dialog_IDD == v_DialogPages[DLG_PG_4]) { LoadString(v_hInst, IDS_DIRECTTITLE, szFmtStr, cFmtStrSize); SetWindowText(hDlg, szFmtStr); } if (Dialog_IDD == v_DialogPages[DLG_PG_5]) { LoadString(v_hInst, IDS_VPNTITLE, szFmtStr, cFmtStrSize); SetWindowText(hDlg, szFmtStr); } } } VOID NextPage (HWND hDlg, DWORD NextPage) { LV_ITEM lvi; if (0 == NextPage) { RasSetEntryProperties (NULL, EditItem.EntryName, &(EditItem.Entry), sizeof(EditItem.Entry), v_pDevConfig, v_dwDevConfigSize); // Refresh the list? InitListViewItems(v_hListWnd); // Set this one as the selected one. ListView_SetItemState (v_hListWnd, 0, 0, LVIS_SELECTED|LVIS_FOCUSED); for (lvi.iItem = -1; (-1 != (lvi.iItem = ListView_GetNextItem(v_hListWnd, lvi.iItem, LVNI_ALL)));) { if (0 == lvi.iItem) { continue; } lvi.iSubItem = 0; lvi.mask = LVIF_PARAM; ListView_GetItem(v_hListWnd, &lvi); if (!_tcscmp (EditItem.EntryName, ((PITEMINFO)lvi.lParam)->EntryName)) { ListView_SetItemState (v_hListWnd, lvi.iItem, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); break; } } // Peform Abort cleanup. NextPage = (DWORD)-1; } if ((DWORD)-1 == NextPage) { // Cancel... // Free the Device config info if (v_pDevConfig) { LocalFree (v_pDevConfig); v_pDevConfig = NULL; v_dwDevConfigSize = 0; } // Bring the SIP down PositionSIP(SIP_DOWN); DestroyWindow (hDlg); SetFocus (v_hListWnd); v_hDialogWnd = NULL; return; } // Must have a new page to display v_hDialogWnd = CreateDialog (v_hInst, MAKEINTRESOURCE(NextPage), v_hMainWnd, ConnWizDlgProc); DestroyWindow (hDlg); } VOID DoNext (HWND hDlg) { DWORD i; TCHAR szTemp[128]; TCHAR szFmtStr[128]; int nFormatId; LPRASDEVINFO pRasDevInfo; DWORD dwRasDevices; if (v_WizDialog == v_DialogPages[DLG_PG_1]) { // Validate the input. GetWindowText (GetDlgItem (hDlg, IDC_REMNAME), EditItem.EntryName, RAS_MaxEntryName+1); if (i = RasValidateEntryName(NULL, EditItem.EntryName)) { if (i == ERROR_ALREADY_EXISTS) { nFormatId = IDS_ALREADY_EXISTS; } else if (*EditItem.EntryName) { nFormatId = IDS_BADNAME; } else { nFormatId = IDS_NULLNAME; } SetFocus (GetDlgItem(hDlg, IDC_REMNAME)); LoadString(v_hInst, nFormatId, szFmtStr, sizeof(szFmtStr) / sizeof(TCHAR)); LoadString(v_hInst, (v_fPortrait) ? IDS_CONNECTIONS : IDS_REMNET, szTemp, sizeof(szTemp) / sizeof(TCHAR)); MessageBox (hDlg, szFmtStr, szTemp, MB_OK | MB_ICONWARNING); // Will this make it blink? return; } // Validate the input. if (SendMessage (GetDlgItem (hDlg, IDC_DIALUPCONN), BM_GETCHECK, 0, 0)) { _tcscpy (EditItem.Entry.szDeviceType, RASDT_Modem); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Modem)) { _tcscpy (EditItem.Entry.szDeviceName, pRasDevInfo[0].szDeviceName); break; } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Follow Dial-Up path. v_WizDialog = v_DialogPages[DLG_PG_2]; } else if (SendMessage (GetDlgItem (hDlg, IDC_DIRECTCONN), BM_GETCHECK, 0, 0)) { // They want a direct connection. _tcscpy (EditItem.Entry.szDeviceType, RASDT_Direct); // Set the IP address for Replication EditItem.Entry.ipaddr.d = 192; EditItem.Entry.ipaddr.c = 168; EditItem.Entry.ipaddr.b = 55; EditItem.Entry.ipaddr.a = 100; // Follow Direct-Connect path v_WizDialog = v_DialogPages[DLG_PG_4]; } else if (SendMessage (GetDlgItem (hDlg, IDC_VPNCONN), BM_GETCHECK, 0, 0)) { // They want a direct connection. _tcscpy (EditItem.Entry.szDeviceType, RASDT_Vpn); v_WizDialog = v_DialogPages[DLG_PG_5]; } else { ASSERT(0); DEBUGMSG (1, (TEXT("Wrong page?\r\n"))); } } else if (v_WizDialog == v_DialogPages[DLG_PG_2]) { GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); v_WizDialog = v_DialogPages[DLG_PG_3]; } NextPage (hDlg, v_WizDialog); } void CALLBACK lineCallbackFunc(DWORD dwDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3) { // NULL function. I can't do a lineInitialize without this function. // Since I never dial I don't actually care about any of the state changes return; } LPLINETRANSLATECAPS GetTranslateCaps () { LPLINETRANSLATECAPS pLineTranCaps = NULL; DWORD dwNeededSize; long lReturn; HLINEAPP hLineApp; DWORD dwVersion = TAPI_CURRENT_VERSION; DWORD dwNumDevs; DEBUGMSG (ZONE_FUNCTION, (TEXT("+GetTranslateCaps()\r\n"))); lReturn = lineInitialize (&hLineApp, v_hInst, lineCallbackFunc, szAppName, &dwNumDevs); if (lReturn) { DEBUGMSG (ZONE_FUNCTION | ZONE_ERROR, (TEXT("-GetTranslateCaps(): Error %d from lineInitialize\r\n"), lReturn)); return NULL; } dwNeededSize = sizeof(LINETRANSLATECAPS); while (1) { pLineTranCaps = LocalAlloc (LPTR, dwNeededSize); if (NULL == pLineTranCaps) { DEBUGMSG (ZONE_ERROR|ZONE_ALLOC, (TEXT("!GetTranslateCaps: Alloc failed\r\n"))); break; } pLineTranCaps->dwTotalSize = dwNeededSize; lReturn = lineGetTranslateCaps (hLineApp, dwVersion, pLineTranCaps); if (lReturn) { DEBUGMSG (ZONE_ERROR, (TEXT(" GetTranslateCaps:lineGetTranslateCaps returned 0x%X\r\n"), lReturn)); LocalFree (pLineTranCaps); pLineTranCaps = NULL; break; } if (pLineTranCaps->dwNeededSize > pLineTranCaps->dwTotalSize) { dwNeededSize = pLineTranCaps->dwNeededSize; LocalFree (pLineTranCaps); pLineTranCaps = NULL; continue; } break; } lineShutdown (hLineApp); DEBUGMSG (ZONE_FUNCTION, (TEXT("-TapiLineGetTranslateCaps Returning 0x%X\r\n"), pLineTranCaps)); return pLineTranCaps; } DWORD GetDefaultCountryCode () { LPLINETRANSLATECAPS pCaps; LPLINELOCATIONENTRY pLocEntry; int i; DWORD CountryCode = 0; pCaps = GetTranslateCaps(); if (pCaps) { if( pCaps->dwLocationListSize ) { pLocEntry = (LPLINELOCATIONENTRY) ((LPBYTE)pCaps + pCaps->dwLocationListOffset); for( i=0; i < (int)pCaps->dwNumLocations; i++ ) { if( pLocEntry[i].dwPermanentLocationID == pCaps->dwCurrentLocationID ) { CountryCode = pLocEntry[i].dwCountryCode; } } } LocalFree (pCaps); } return CountryCode; } VOID GetDefaultAreaCode (PTCHAR szAreaCode, DWORD cMaxLen) { LPLINETRANSLATECAPS pCaps; LPLINELOCATIONENTRY pLocEntry; int i; DWORD CountryCode = 0; szAreaCode[0] = TEXT('\0'); pCaps = GetTranslateCaps(); if (pCaps) { if( pCaps->dwLocationListSize ) { pLocEntry = (LPLINELOCATIONENTRY) ((LPBYTE)pCaps + pCaps->dwLocationListOffset); for( i=0; i < (int)pCaps->dwNumLocations; i++ ) { if( pLocEntry[i].dwPermanentLocationID == pCaps->dwCurrentLocationID ) { _tcsncpy (szAreaCode, (LPTSTR)((LPBYTE)pCaps + pLocEntry[i].dwCityCodeOffset), cMaxLen); } } } LocalFree (pCaps); } return; } DWORD WINAPI DevConfigThread (LPVOID pvarg) { DWORD dwNeededSize; LPVARSTRING pVarString; HWND hDlg = (HWND)pvarg; DWORD RetVal; dwNeededSize = sizeof(VARSTRING); while (1) { pVarString = (LPVARSTRING)LocalAlloc (LPTR, dwNeededSize); pVarString->dwTotalSize = dwNeededSize; if (NULL == v_pDevConfig) { v_dwDevConfigSize = 0; } RetVal = RasDevConfigDialogEdit (EditItem.Entry.szDeviceName, EditItem.Entry.szDeviceType, hDlg, v_pDevConfig, v_dwDevConfigSize, pVarString); if (STATUS_SUCCESS != RetVal) { DEBUGMSG (ZONE_ERROR, (TEXT("RemNet: Error 0x%X(%d) from RasDevConfigDialogEdit\r\n"), RetVal, RetVal)); LocalFree (pVarString); break; } else if (pVarString->dwNeededSize > pVarString->dwTotalSize) { // Structure not large enough. Get new size and free original dwNeededSize = pVarString->dwNeededSize; LocalFree (pVarString); } else { // Free the original. if (v_pDevConfig) { v_dwDevConfigSize = 0; LocalFree (v_pDevConfig); } v_pDevConfig = (PBYTE)LocalAlloc (LMEM_FIXED, pVarString->dwStringSize); if (NULL == v_pDevConfig) { DEBUGMSG (ZONE_ERROR, (TEXT("RemNet: Unable to allocate v_pDevConfig\r\n"))); } else { memcpy (v_pDevConfig, (LPBYTE)pVarString + pVarString->dwStringOffset, pVarString->dwStringSize); v_dwDevConfigSize = pVarString->dwStringSize; } LocalFree (pVarString); break; } } return 0; } LRESULT CALLBACK ConnWizDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR CountryCode[COUNTRY_CODE_SIZE]; DWORD dwStyle; DWORD i; int nDefFocus; long lResult; TCHAR szTemp[128]; UINT cTempStrSize = sizeof(szTemp) / sizeof(TCHAR); LPRASDEVINFO pRasDevInfo; DWORD dwRasDevices; DWORD RetVal; switch (message) { case WM_HELP : RETAILMSG (1, (TEXT("PegHelp file:rnetw.htm#Main_Contents\r\n"))); CreateProcess(TEXT("peghelp"),TEXT("file:rnetw.htm#Main_Contents"), NULL,NULL,FALSE,0,NULL,NULL,NULL,NULL); break; case WM_DEVICECHANGE : // Are we on Wiz2? if (v_WizDialog == v_DialogPages[DLG_PG_2]) { GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); // Clear the list... SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_RESETCONTENT, 0, 0); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Modem)) { SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_ADDSTRING, 0, (LPARAM)pRasDevInfo[i].szDeviceName); } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Try to find the modem in the list. lResult = SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_FINDSTRINGEXACT, 0, (LPARAM)EditItem.Entry.szDeviceName); if (lResult == CB_ERR) { // Couldn't find it, just set to first entry SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, 0, 0); } else { // Set to the correct device. SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, (WPARAM)lResult, 0); } } else if (v_WizDialog == v_DialogPages[DLG_PG_4]) { // Save the users current value GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); // Clear the list... SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_RESETCONTENT, 0, 0); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Direct)) { SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_ADDSTRING, 0, (LPARAM)pRasDevInfo[i].szDeviceName); } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Try to find the modem in the list. lResult = SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_FINDSTRINGEXACT, 0, (LPARAM)EditItem.Entry.szDeviceName); if (lResult == CB_ERR) { // Couldn't find it, just set to first entry SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, 0, 0); } else { // Set to the correct device. SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, (WPARAM)lResult, 0); } } break; case WM_INITDIALOG : dwStyle = GetWindowLong (hDlg, GWL_EXSTYLE); if (!v_fPortrait) { dwStyle |= WS_EX_CONTEXTHELP; } SetWindowLong (hDlg, GWL_EXSTYLE, dwStyle | WS_EX_NODRAG | WS_EX_WINDOWEDGE | WS_EX_CAPTIONOKBTN); if (NULL == v_pDevConfig) { RASENTRY RasEntry; DWORD dwSize; // Read in the previous DevConfig if any dwSize = sizeof(RasEntry); RasEntry.dwSize = dwSize; v_dwDevConfigSize = 0; RetVal = RasGetEntryProperties (NULL, EditItem.EntryName, &(RasEntry), &dwSize, NULL, &v_dwDevConfigSize); if (v_dwDevConfigSize && (ERROR_BUFFER_TOO_SMALL == RetVal)) { v_pDevConfig = (PBYTE)LocalAlloc (LPTR, v_dwDevConfigSize); if (v_pDevConfig) { RetVal = RasGetEntryProperties (NULL, EditItem.EntryName, &(RasEntry), &dwSize, v_pDevConfig, &v_dwDevConfigSize); DEBUGMSG (RetVal, (TEXT("Error %d from RasGetEntryProperties\r\n"))); ASSERT (RetVal == 0); } } } if (v_WizDialog == v_DialogPages[DLG_PG_1]) { // Set the connection name. SetWindowText (GetDlgItem (hDlg, IDC_REMNAME),EditItem.EntryName); // Restrict them to 20 characters SendMessage (GetDlgItem (hDlg, IDC_REMNAME), EM_LIMITTEXT, RAS_MaxEntryName, 0); SendMessage (GetDlgItem (hDlg, IDC_REMNAME), EM_SETSEL, 0, -1); // Indicate that we didn't find the current device type CheckRadioButton (hDlg, IDC_DIALUPCONN, IDC_VPNCONN, IDC_DIRECTCONN); // Start by disabling all of the windows. EnableWindow (GetDlgItem (hDlg, IDC_DIALUPCONN), FALSE); EnableWindow (GetDlgItem (hDlg, IDC_DIRECTCONN), FALSE); EnableWindow (GetDlgItem (hDlg, IDC_VPNCONN), FALSE); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Modem)) { EnableWindow (GetDlgItem (hDlg, IDC_DIALUPCONN), TRUE); if (!_tcscmp (EditItem.Entry.szDeviceType, RASDT_Modem)) { CheckRadioButton (hDlg, IDC_DIALUPCONN, IDC_VPNCONN, IDC_DIALUPCONN); } } else if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Direct)) { EnableWindow (GetDlgItem (hDlg, IDC_DIRECTCONN), TRUE); if (!_tcscmp (EditItem.Entry.szDeviceType, RASDT_Direct)) { CheckRadioButton (hDlg, IDC_DIALUPCONN, IDC_VPNCONN, IDC_DIRECTCONN); } } else if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Vpn)) { EnableWindow (GetDlgItem (hDlg, IDC_VPNCONN), TRUE); if (!_tcscmp (EditItem.Entry.szDeviceType, RASDT_Vpn)) { CheckRadioButton (hDlg, IDC_DIALUPCONN, IDC_VPNCONN, IDC_VPNCONN); } } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Edit box gets focus by default nDefFocus = IDC_REMNAME; } else if (v_WizDialog == v_DialogPages[DLG_PG_2]) { // Changes buttons if this is a wizard dialog or not FixButtons(hDlg, v_DialogPages[DLG_PG_2]); // Set the connection name. SetWindowText (GetDlgItem (hDlg, IDC_CONNLABEL), EditItem.EntryName); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Modem)) { SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_ADDSTRING, 0, (LPARAM)pRasDevInfo[i].szDeviceName); } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Try to find the modem in the list. lResult = SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_FINDSTRINGEXACT, 0, (LPARAM)EditItem.Entry.szDeviceName); if (lResult == CB_ERR) { SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, 0, 0); GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); } else { // Set to the correct device. SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, (WPARAM)lResult, 0); } // Modem combo box gets focus by default nDefFocus = IDC_MODEM; } else if (v_WizDialog == v_DialogPages[DLG_PG_3]) { if (v_EnteredAsAWizard) { if (EditItem.Entry.dwCountryCode == 0) { EditItem.Entry.dwCountryCode = GetDefaultCountryCode (); } if (EditItem.Entry.szAreaCode[0] == TEXT('\0')) { GetDefaultAreaCode (EditItem.Entry.szAreaCode, RAS_MaxAreaCode); } } else { LoadString(v_hInst, IDS_DIALUPTITLE, szTemp, cTempStrSize); SetWindowText(hDlg, szTemp); } // Set the connection name. SetWindowText (GetDlgItem (hDlg, IDC_CONNLABEL), EditItem.EntryName); // Set Phone Number SetWindowText (GetDlgItem (hDlg, IDC_AREA_CODE), EditItem.Entry.szAreaCode); SetWindowText (GetDlgItem (hDlg, IDC_PHONE_NUM), EditItem.Entry.szLocalPhoneNumber) ; // Initialize Country code list box. CountryCode[0] = TEXT('\0'); if (EditItem.Entry.dwCountryCode) wsprintf(CountryCode, TEXT("%d"), EditItem.Entry.dwCountryCode); SetWindowText (GetDlgItem (hDlg, IDC_COUNTRY), CountryCode); // Initialize the use country check box if (EditItem.Entry.dwfOptions & RASEO_UseCountryAndAreaCodes) { SendMessage (GetDlgItem(hDlg, IDC_FORCELD), BM_SETCHECK, 1, 0); } if (EditItem.Entry.dwfOptions & RASEO_DialAsLocalCall) { SendMessage (GetDlgItem(hDlg, IDC_FORCELOCAL), BM_SETCHECK, 1, 0); } // Phone number gets focus by default nDefFocus = IDC_PHONE_NUM; g_pEditProc = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_AREA_CODE), GWL_WNDPROC, (LONG)EditFullWidthConversionSubclassProc); SetWindowLong(GetDlgItem(hDlg, IDC_PHONE_NUM), GWL_WNDPROC, (LONG)EditFullWidthConversionSubclassProc); SetWindowLong(GetDlgItem(hDlg, IDC_COUNTRY), GWL_WNDPROC, (LONG)EditFullWidthConversionSubclassProc); } else if (v_WizDialog == v_DialogPages[DLG_PG_4]) { // Changes buttons if this is a wizard dialog or not FixButtons(hDlg, v_DialogPages[DLG_PG_4]); // Set the connection name. SetWindowText (GetDlgItem (hDlg, IDC_CONNLABEL), EditItem.EntryName); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Direct)) { SendMessage(GetDlgItem (hDlg, IDC_MODEM), CB_ADDSTRING, 0, (LPARAM)pRasDevInfo[i].szDeviceName); } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Try to find the modem in the list. lResult = SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_FINDSTRINGEXACT, 0, (LPARAM)EditItem.Entry.szDeviceName); if (lResult == CB_ERR) { SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, 0, 0); GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); } else { // Set to the correct device. SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_SETCURSEL, (WPARAM)lResult, 0); } // gets focus by default nDefFocus = IDC_MODEM; } else if (v_WizDialog == v_DialogPages[DLG_PG_5]) { // The VPN config page FixButtons(hDlg, v_DialogPages[DLG_PG_5]); dwRasDevices = GetRasDevices (&pRasDevInfo); for (i=0; i < dwRasDevices; i++) { if (!_tcscmp (pRasDevInfo[i].szDeviceType, RASDT_Vpn)) { // Just copy the first device to the entry. _tcsncpy (EditItem.Entry.szDeviceType, RASDT_Vpn, RAS_MaxDeviceType); _tcsncpy (EditItem.Entry.szDeviceName, pRasDevInfo[i].szDeviceName, RAS_MaxDeviceName); break; } } if (pRasDevInfo) { LocalFree (pRasDevInfo); } // Set the connection name. SetWindowText (GetDlgItem (hDlg, IDC_CONNLABEL), EditItem.EntryName); SetWindowText (GetDlgItem (hDlg, IDC_HOSTNAME), EditItem.Entry.szLocalPhoneNumber); SendMessage (GetDlgItem (hDlg, IDC_HOSTNAME), EM_LIMITTEXT, RAS_MaxPhoneNumber, 0); nDefFocus = IDC_HOSTNAME; } else { ASSERT (0); } // Set focus SetFocus(GetDlgItem(hDlg, nDefFocus)); return FALSE; case WM_COMMAND : if (HIWORD(wParam) == CBN_SELCHANGE) { DEBUGMSG (ZONE_WARN, (TEXT("Got CBN_SELCHANGE message\r\n"))); // Make sure that it's the Modem if (LOWORD(wParam) == IDC_MODEM) { // Release any Device Config info they had edited. if (v_pDevConfig) { LocalFree (v_pDevConfig); v_pDevConfig = NULL; v_dwDevConfigSize = 0; } } break; } switch (LOWORD(wParam)) { case IDCANCEL : NextPage (hDlg, (DWORD)-1); break; case IDFINISH: case IDOK: if ((v_WizDialog == v_DialogPages[DLG_PG_1]) || (v_WizDialog == v_DialogPages[DLG_PG_2])) { DoNext (hDlg); } else if (v_WizDialog == v_DialogPages[DLG_PG_3]) { // Validate the input. if (GetDialUpSettings(hDlg, CountryCode, TRUE)) { v_WizDialog = 0; NextPage (hDlg, v_WizDialog); } } else if (v_WizDialog == v_DialogPages[DLG_PG_4]) { GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); v_WizDialog = 0; NextPage (hDlg, v_WizDialog); } else if (v_WizDialog == v_DialogPages[DLG_PG_5]) { // Should we validate the string??? GetWindowText (GetDlgItem (hDlg, IDC_HOSTNAME), EditItem.Entry.szLocalPhoneNumber, RAS_MaxPhoneNumber+1); v_WizDialog = 0; NextPage (hDlg, v_WizDialog); } break; case IDNEXT : DoNext (hDlg); break; case IDBACK : if (v_WizDialog == v_DialogPages[DLG_PG_2]) { // Save the modem name. GetWindowText (GetDlgItem (hDlg, IDC_MODEM), EditItem.Entry.szDeviceName, RAS_MaxDeviceName+1); v_WizDialog = v_DialogPages[DLG_PG_1]; } else if (v_WizDialog == v_DialogPages[DLG_PG_3]) { (void) GetDialUpSettings(hDlg, CountryCode, FALSE); v_WizDialog = v_DialogPages[DLG_PG_2]; } else if (v_WizDialog == v_DialogPages[DLG_PG_4]) { v_WizDialog = v_DialogPages[DLG_PG_1]; Device = SendMessage (GetDlgItem (hDlg, IDC_MODEM), CB_GETCURSEL, 0, 0); } else if (v_WizDialog == v_DialogPages[DLG_PG_5]) { v_WizDialog = v_DialogPages[DLG_PG_1]; } NextPage (hDlg, v_WizDialog); break; case IDC_TCPSETTINGS : TCP_IP_Properties (hDlg, &(EditItem)); break; case IDC_FORCELOCAL : if (SendMessage(GetDlgItem(hDlg, IDC_FORCELOCAL), BM_GETCHECK, 0, 0)) { // Clear the FORCELD checkbox. SendMessage (GetDlgItem(hDlg, IDC_FORCELD), BM_SETCHECK, 0, 0); } break; case IDC_FORCELD : if (SendMessage(GetDlgItem(hDlg, IDC_FORCELD), BM_GETCHECK, 0, 0)) { SendMessage (GetDlgItem(hDlg, IDC_FORCELOCAL), BM_SETCHECK, 0, 0); } break; case IDC_CONFIG : { static HANDLE hThread = NULL; DWORD ThreadID; DWORD RetVal; MSG NewMsg; if (hThread != NULL) { RETAILMSG (1, (TEXT("Recursing, only one config allowed at a time\r\n"))); ASSERT(1); break; } hThread = CreateThread (NULL, 0, DevConfigThread, (LPVOID)hDlg, 0, &ThreadID); while (1) { RetVal = MsgWaitForMultipleObjectsEx (1, &hThread, INFINITE, QS_PAINT, 0); if (WAIT_OBJECT_0 == RetVal) { // The thread died. Break out of this loop break; } else if ((WAIT_OBJECT_0+1) == RetVal) { if (PeekMessage (&NewMsg, NULL, WM_PAINT, WM_PAINT, PM_REMOVE)) { if (!IsDialogMessage(hDlg, &NewMsg)) { TranslateMessage(&NewMsg); DispatchMessage(&NewMsg); } } } } CloseHandle (hThread); hThread = NULL; } break; default : // Unused WM_COMMAND? break; } case WM_DESTROY: return TRUE; break; default: return (FALSE); } return TRUE; }


Legal Declaration: it is for studying wince(MicroSoft Windows CE) only! : http://www.vxworks6.com