771 lines
21 KiB
C
771 lines
21 KiB
C
|
|
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
|
|
#if WINNT
|
|
#else
|
|
#include <help.h>
|
|
#endif
|
|
|
|
#include "tchar.h"
|
|
#include "prsht.h"
|
|
|
|
//#define TAPI_API_VERSION 0x00020000
|
|
#define TAPI_API_VERSION 0x00010004
|
|
#define TAPI_CURRENT_VERSION 0x00010004
|
|
|
|
#include "tapi.h"
|
|
|
|
#undef TAPI_CURRENT_VERSION
|
|
#define TAPI_CURRENT_VERSION 0x00020000
|
|
#include "tspi.h"
|
|
#undef TAPI_CURRENT_VERSION
|
|
#define TAPI_CURRENT_VERSION 0x00010004
|
|
|
|
#include "clientr.h"
|
|
#include "client.h"
|
|
#include "privateold.h"
|
|
|
|
#include "general.h"
|
|
|
|
|
|
|
|
#if DBG
|
|
#define InternalDebugOut(_x_) DbgPrt _x_
|
|
garbage;
|
|
#else
|
|
#define InternalDebugOut(_x_)
|
|
#endif
|
|
|
|
|
|
//***************************************************************************
|
|
|
|
TCHAR gszCurrentProfileKey[] = "System\\CurrentControlSet\\Control\\Telephony";
|
|
TCHAR gszStaticProfileKey[] = "Config\\%04d\\System\\CurrentControlSet\\Control\\Telephony";
|
|
TCHAR gszAutoLaunchKey[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony";
|
|
TCHAR gszAutoLaunchValue[] = "AutoLaunchFlags";
|
|
TCHAR gszAutoLocationID[] = "AutoLocationID";
|
|
|
|
|
|
UINT gnNumConfigProfiles = 0;
|
|
DWORD gdwConfigProfiles[MAX_CONFIGPROFILES];
|
|
|
|
|
|
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
//Purpose: Gets the appropriately sized translate caps structure
|
|
// from TAPI. Return TRUE if successful
|
|
|
|
|
|
#define LOCATION_GROW 4
|
|
|
|
|
|
BOOL GetTranslateCaps(
|
|
LPLINETRANSLATECAPS FAR * pptc)
|
|
{
|
|
LONG lineErr;
|
|
LPLINETRANSLATECAPS ptc;
|
|
DWORD cbSize;
|
|
|
|
cbSize = sizeof(*ptc) * LOCATION_GROW + 200;
|
|
ptc = (LPLINETRANSLATECAPS)GlobalAllocPtr(GPTR, cbSize);
|
|
if (ptc)
|
|
{
|
|
// Get the translate devcaps
|
|
ptc->dwTotalSize = cbSize;
|
|
lineErr = lineGetTranslateCaps (0, TAPI_API_VERSION, ptc);
|
|
if (LINEERR_STRUCTURETOOSMALL == lineErr ||
|
|
ptc->dwNeededSize > ptc->dwTotalSize)
|
|
{
|
|
// Provided structure was too small, resize and try again
|
|
cbSize = ptc->dwNeededSize;
|
|
GlobalFreePtr(ptc);
|
|
ptc = (LPLINETRANSLATECAPS)GlobalAllocPtr(GPTR, cbSize);
|
|
if (ptc)
|
|
{
|
|
ptc->dwTotalSize = cbSize;
|
|
lineErr = lineGetTranslateCaps (0, TAPI_API_VERSION, ptc);
|
|
if (0 != lineErr)
|
|
{
|
|
// Failure
|
|
GlobalFreePtr(ptc);
|
|
ptc = NULL;
|
|
}
|
|
}
|
|
}
|
|
else if (0 != lineErr)
|
|
{
|
|
// Failure
|
|
GlobalFreePtr(ptc);
|
|
ptc = NULL;
|
|
}
|
|
}
|
|
|
|
*pptc = ptc;
|
|
|
|
return NULL != *pptc;
|
|
}
|
|
|
|
|
|
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
//
|
|
// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
// Returns 1 if a problem, 0 if no problem
|
|
// Code below assumes that this function ONLY returns 0 or 1 (but I think
|
|
// it would be confusing to have the rettype be BOOL, since we want a
|
|
// return of '1' on a problem...)
|
|
//
|
|
LONG FillConfigProfileBox( HWND hWnd,
|
|
DWORD dwControl,
|
|
LPLINETRANSLATECAPS ptc)
|
|
{
|
|
UINT n;
|
|
DWORD nProfileNumberZ;
|
|
WPARAM wIndex;
|
|
LINELOCATIONENTRY *ple;
|
|
HKEY hKey;
|
|
TCHAR szValueName[40];
|
|
TCHAR buf[256];
|
|
DWORD dwType;
|
|
DWORD dwDataSize;
|
|
LPSTR lpstrProfileLocation = NULL;
|
|
LONG lResult;
|
|
|
|
|
|
//
|
|
// Get the zero-based Config Profile Number
|
|
//
|
|
nProfileNumberZ = dwControl - IDCB_DL_PROFILE1;
|
|
|
|
|
|
//
|
|
// Get the profile's name. If this fails, we assume we've run out
|
|
// of configs
|
|
//
|
|
RegOpenKeyEx(
|
|
HKEY_LOCAL_MACHINE,
|
|
"System\\CurrentControlSet\\Control\\IDConfigDB",
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hKey
|
|
);
|
|
|
|
wsprintf( szValueName, "FriendlyName%04d", nProfileNumberZ + 1);
|
|
|
|
dwDataSize = sizeof(buf);
|
|
|
|
lResult = RegQueryValueEx(
|
|
hKey,
|
|
szValueName,
|
|
0,
|
|
&dwType,
|
|
buf,
|
|
&dwDataSize
|
|
);
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
|
|
//
|
|
// Did we find a name for it?
|
|
//
|
|
if ( ERROR_SUCCESS != lResult )
|
|
{
|
|
return (1);
|
|
}
|
|
|
|
//
|
|
// Put whatever we found into the field
|
|
//
|
|
SendMessage( GetDlgItem( hWnd, IDCS_DL_PROFILE1 + nProfileNumberZ ),
|
|
WM_SETTEXT,
|
|
0,
|
|
(LPARAM)&buf
|
|
);
|
|
|
|
|
|
//
|
|
// Read what location ID is currently specified for this profile
|
|
//
|
|
wsprintf( buf, gszStaticProfileKey, nProfileNumberZ + 1);
|
|
|
|
RegOpenKeyEx(
|
|
HKEY_LOCAL_MACHINE,
|
|
buf,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hKey
|
|
);
|
|
|
|
dwDataSize = sizeof(DWORD);
|
|
|
|
lResult = RegQueryValueEx(
|
|
hKey,
|
|
gszAutoLocationID,
|
|
0,
|
|
&dwType,
|
|
(LPBYTE)&gdwConfigProfiles[ nProfileNumberZ ],
|
|
&dwDataSize
|
|
);
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
|
|
//
|
|
// If there's no value (maybe it's the first run), use current location
|
|
//
|
|
if (lResult != ERROR_SUCCESS)
|
|
{
|
|
gdwConfigProfiles[nProfileNumberZ] = ptc->dwCurrentLocationID;
|
|
}
|
|
|
|
|
|
for (n=0; n<ptc->dwNumLocations; n++)
|
|
{
|
|
ple = (LINELOCATIONENTRY*) ((LPSTR)ptc + ptc->dwLocationListOffset);
|
|
|
|
wIndex = SendMessage( GetDlgItem(hWnd, dwControl),
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)((LPSTR)ptc + ple[n].dwLocationNameOffset));
|
|
|
|
SendMessage( GetDlgItem( hWnd, dwControl),
|
|
CB_SETITEMDATA,
|
|
wIndex,
|
|
ple[n].dwPermanentLocationID
|
|
);
|
|
|
|
|
|
//{
|
|
//// UINT temp;
|
|
//
|
|
// wsprintf( buf, "prof=%d loop=%d s=%s dw=%ld seek=%ld",
|
|
// nProfileNumberZ,
|
|
// n,
|
|
// (LPARAM)((LPSTR)ptc + ple[n].dwLocationNameOffset),
|
|
// (DWORD)ple[n].dwPermanentLocationID,
|
|
// (DWORD)gdwConfigProfiles[nProfileNumberZ]);
|
|
//
|
|
// MessageBox(GetFocus(), buf, "", MB_OK);
|
|
//}
|
|
|
|
|
|
//
|
|
// If this location is the one this profile wants, select it
|
|
//
|
|
if ( gdwConfigProfiles[nProfileNumberZ] == ple[n].dwPermanentLocationID )
|
|
{
|
|
//MessageBox(GetFocus(), "Found profile locationID", "", MB_OK);
|
|
|
|
lpstrProfileLocation = (LPSTR)((LPSTR)ptc + ple[n].dwLocationNameOffset);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//{
|
|
//// UINT temp;
|
|
//
|
|
// wsprintf( buf, "profile=%ld loop=%ld s=%s",
|
|
// (DWORD)nProfileNumberZ,
|
|
// (DWORD)n,
|
|
// (LPARAM)((LPSTR)ptc + ple[n].dwLocationNameOffset));
|
|
// MessageBox(GetFocus(), buf, "", MB_OK);
|
|
//}
|
|
|
|
|
|
SendMessage( GetDlgItem( hWnd, dwControl),
|
|
CB_SELECTSTRING,
|
|
(WPARAM)-1,
|
|
(LPARAM)lpstrProfileLocation
|
|
);
|
|
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|
|
|
|
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
//***************************************************************************
|
|
BOOL
|
|
CALLBACK
|
|
GeneralDlgProc(
|
|
HWND hWnd,
|
|
UINT msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
static DWORD aIds[] = {
|
|
0, 0
|
|
};
|
|
|
|
UINT n;
|
|
LONG lResult;
|
|
HKEY hKey;
|
|
static DWORD dwType;
|
|
static DWORD dwDataSize;
|
|
|
|
static DWORD dwTapiTNAFlags = 0;
|
|
// these values are in GENERAL.H
|
|
// #define FLAG_AUTOLAUNCH 0x00000001
|
|
// #define FLAG_AUTOLOCATIONID 0x00000002
|
|
// #define FLAG_PROMPTAUTOLOCATIONID 0x00000004
|
|
// #define FLAG_ANNOUNCEAUTOLOCATIONID 0x00000008
|
|
|
|
LPLINETRANSLATECAPS ptc;
|
|
|
|
|
|
|
|
switch (msg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
|
|
GetTranslateCaps(&ptc);
|
|
//BUGBUG What if this fails?
|
|
|
|
|
|
//BUGBUG If the number of hardware configs == 1, don't bother showing these
|
|
//
|
|
// Fill up the Hardware config boxes
|
|
//
|
|
|
|
if ( ptc )
|
|
{
|
|
lResult = ERROR_SUCCESS;
|
|
|
|
for (
|
|
n=0;
|
|
(n<MAX_CONFIGPROFILES) && (ERROR_SUCCESS == lResult);
|
|
n++
|
|
)
|
|
{
|
|
lResult = FillConfigProfileBox( hWnd,
|
|
IDCB_DL_PROFILE1 + n,
|
|
ptc );
|
|
}
|
|
|
|
gnNumConfigProfiles = n - lResult;
|
|
|
|
GlobalFreePtr( ptc );
|
|
}
|
|
|
|
|
|
//
|
|
// Now go disable all the stuff not being used
|
|
//
|
|
for ( n=gnNumConfigProfiles; n<MAX_CONFIGPROFILES; n++)
|
|
{
|
|
ShowWindow( GetDlgItem( hWnd, IDCB_DL_PROFILE1 + n),
|
|
SW_HIDE
|
|
);
|
|
ShowWindow( GetDlgItem( hWnd, IDCS_DL_PROFILE1 + n),
|
|
SW_HIDE
|
|
);
|
|
}
|
|
|
|
|
|
//
|
|
// Get the TapiTNA flags
|
|
//
|
|
|
|
lResult = RegOpenKeyEx(
|
|
HKEY_LOCAL_MACHINE,
|
|
gszAutoLaunchKey,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hKey
|
|
);
|
|
|
|
|
|
dwDataSize = sizeof(dwTapiTNAFlags);
|
|
|
|
lResult = RegQueryValueEx(
|
|
hKey,
|
|
gszAutoLaunchValue,
|
|
0,
|
|
&dwType,
|
|
(LPBYTE)&dwTapiTNAFlags,
|
|
&dwDataSize
|
|
);
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
|
|
//
|
|
// Now check the boxes as appropriate
|
|
//
|
|
|
|
if ( dwTapiTNAFlags & FLAG_AUTOLAUNCH )
|
|
{
|
|
CheckDlgButton( hWnd,
|
|
IDCK_DL_LAUNCHTAPITNA,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
if ( dwTapiTNAFlags & FLAG_AUTOLOCATIONID )
|
|
{
|
|
CheckDlgButton( hWnd,
|
|
IDCK_DL_AUTOLOCATIONID,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
if ( dwTapiTNAFlags & FLAG_UPDATEONSTARTUP )
|
|
{
|
|
CheckDlgButton( hWnd,
|
|
IDCK_DL_UPDATEONSTARTUP,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
if ( dwTapiTNAFlags & FLAG_PROMPTAUTOLOCATIONID )
|
|
{
|
|
CheckDlgButton( hWnd,
|
|
IDCK_DL_PROMPTAUTOLOCATIONID,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
if ( dwTapiTNAFlags & FLAG_ANNOUNCEAUTOLOCATIONID )
|
|
{
|
|
CheckDlgButton( hWnd,
|
|
IDCK_DL_ANNOUNCEAUTOLOCATIONID,
|
|
TRUE
|
|
);
|
|
}
|
|
|
|
|
|
//
|
|
// Disable the two checkboxes dependent on this one,
|
|
// but keep the settings
|
|
//
|
|
if ( dwTapiTNAFlags & FLAG_AUTOLOCATIONID )
|
|
{
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_PROMPTAUTOLOCATIONID),
|
|
TRUE
|
|
);
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_ANNOUNCEAUTOLOCATIONID),
|
|
TRUE
|
|
);
|
|
}
|
|
else
|
|
{
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_PROMPTAUTOLOCATIONID),
|
|
FALSE
|
|
);
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_ANNOUNCEAUTOLOCATIONID),
|
|
FALSE
|
|
);
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
|
|
// Process clicks on controls after Context Help mode selected
|
|
case WM_HELP:
|
|
InternalDebugOut((50, " WM_HELP in LocDefineDlg"));
|
|
WinHelp (((LPHELPINFO) lParam)->hItemHandle, "windows.hlp", HELP_WM_HELP,
|
|
(ULONG_PTR)(LPSTR) aIds);
|
|
break;
|
|
|
|
|
|
// Process right-clicks on controls
|
|
case WM_CONTEXTMENU:
|
|
InternalDebugOut((50, " WM_CONTEXT_MENU in LocationsDlgProc"));
|
|
WinHelp ((HWND) wParam, "windows.hlp", HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID) aIds);
|
|
break;
|
|
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR lpnm = (LPNMHDR)lParam;
|
|
|
|
switch ( lpnm->code )
|
|
{
|
|
|
|
case PSN_APPLY: /* case IDOK */
|
|
{
|
|
DWORD dwDisposition; // Don't really care about this...
|
|
|
|
|
|
InternalDebugOut((0, " PSN_APPLY - General"));
|
|
|
|
if ( ((LPPSHNOTIFY)lpnm)->lParam )
|
|
InternalDebugOut((0, " (actually, it was the OK button)"));
|
|
|
|
|
|
//
|
|
// Write out the new flags
|
|
//
|
|
|
|
lResult = RegCreateKeyEx(
|
|
HKEY_LOCAL_MACHINE,
|
|
gszAutoLaunchKey,
|
|
0,
|
|
"", //Class? Who cares?
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKey,
|
|
&dwDisposition
|
|
);
|
|
|
|
|
|
if (ERROR_SUCCESS == lResult)
|
|
{
|
|
lResult = RegSetValueEx(
|
|
hKey,
|
|
gszAutoLaunchValue,
|
|
0,
|
|
dwType,
|
|
(LPBYTE)&dwTapiTNAFlags,
|
|
dwDataSize
|
|
);
|
|
|
|
RegCloseKey( hKey );
|
|
}
|
|
|
|
|
|
|
|
|
|
for ( n=0; n < gnNumConfigProfiles; n++)
|
|
{
|
|
DWORD dwTemp;
|
|
TCHAR szKeyName[128];
|
|
|
|
|
|
wsprintf ( szKeyName, gszStaticProfileKey, n+1);
|
|
|
|
RegCreateKeyEx(
|
|
HKEY_LOCAL_MACHINE,
|
|
szKeyName,
|
|
0,
|
|
"",
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKey,
|
|
&dwTemp
|
|
);
|
|
|
|
RegSetValueEx(
|
|
hKey,
|
|
gszAutoLocationID,
|
|
0,
|
|
REG_DWORD,
|
|
(LPBYTE)&gdwConfigProfiles[n],
|
|
sizeof(DWORD)
|
|
);
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
|
|
case PSN_RESET: /* case IDCANCEL: */
|
|
InternalDebugOut((0, " PSN_RESET - General"));
|
|
break;
|
|
|
|
|
|
#if DBG
|
|
case PSN_SETACTIVE:
|
|
InternalDebugOut((0, " PSN_SETACTIVE - General"));
|
|
break;
|
|
|
|
|
|
case PSN_KILLACTIVE:
|
|
InternalDebugOut((0, " PSN_KILLACTIVE - General"));
|
|
break;
|
|
|
|
#endif
|
|
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
switch (LOWORD(wParam))
|
|
{
|
|
|
|
case IDCB_DL_PROFILE1:
|
|
case IDCB_DL_PROFILE2:
|
|
case IDCB_DL_PROFILE3:
|
|
case IDCB_DL_PROFILE4:
|
|
{
|
|
|
|
//
|
|
// Only process if something is changing
|
|
//
|
|
switch HIWORD(wParam)
|
|
{
|
|
case CBN_SELCHANGE:
|
|
{
|
|
LRESULT m;
|
|
|
|
|
|
gdwConfigProfiles[LOWORD(wParam) - IDCB_DL_PROFILE1] =
|
|
n = (UINT) SendMessage( GetDlgItem( hWnd, LOWORD(wParam)),
|
|
CB_GETITEMDATA,
|
|
( m= SendMessage(
|
|
GetDlgItem( hWnd,
|
|
LOWORD(wParam)),
|
|
CB_GETCURSEL,
|
|
0,
|
|
0
|
|
) ) ,
|
|
0
|
|
);
|
|
|
|
//{
|
|
// TCHAR Buffer[256];
|
|
// wsprintf( Buffer, "wParam=0x%08lx lParam=0x%08lx data=0x%08lx m=0x%08lx",
|
|
// (DWORD)wParam,
|
|
// (DWORD)lParam,
|
|
// (DWORD)n,
|
|
// (DWORD)m
|
|
// );
|
|
// MessageBox(GetFocus(), Buffer, "", MB_OK);
|
|
//}
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case IDCK_DL_LAUNCHTAPITNA:
|
|
{
|
|
dwTapiTNAFlags ^= FLAG_AUTOLAUNCH;
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
break;
|
|
|
|
|
|
case IDCK_DL_AUTOLOCATIONID:
|
|
{
|
|
dwTapiTNAFlags ^= FLAG_AUTOLOCATIONID;
|
|
|
|
//
|
|
// Disable the two checkboxes dependent on this one,
|
|
// but keep the settings
|
|
//
|
|
if ( dwTapiTNAFlags & FLAG_AUTOLOCATIONID )
|
|
{
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_PROMPTAUTOLOCATIONID),
|
|
TRUE
|
|
);
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_ANNOUNCEAUTOLOCATIONID),
|
|
TRUE
|
|
);
|
|
// EnableWindow( GetDlgItem(hWnd, IDCS_DL_PROMPTAUTOLOCATIONID),
|
|
// TRUE
|
|
// );
|
|
// EnableWindow( GetDlgItem(hWnd, IDCS_DL_ANNOUNCEAUTOLOCATIONID),
|
|
// TRUE
|
|
// );
|
|
}
|
|
else
|
|
{
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_PROMPTAUTOLOCATIONID),
|
|
FALSE
|
|
);
|
|
EnableWindow( GetDlgItem(hWnd, IDCK_DL_ANNOUNCEAUTOLOCATIONID),
|
|
FALSE
|
|
);
|
|
// EnableWindow( GetDlgItem(hWnd, IDCS_DL_PROMPTAUTOLOCATIONID),
|
|
// FALSE
|
|
// );
|
|
// EnableWindow( GetDlgItem(hWnd, IDCS_DL_ANNOUNCEAUTOLOCATIONID),
|
|
// FALSE
|
|
// );
|
|
}
|
|
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
break;
|
|
|
|
|
|
case IDCK_DL_PROMPTAUTOLOCATIONID:
|
|
{
|
|
dwTapiTNAFlags ^= FLAG_PROMPTAUTOLOCATIONID;
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
break;
|
|
|
|
|
|
case IDCK_DL_UPDATEONSTARTUP:
|
|
{
|
|
dwTapiTNAFlags ^= FLAG_UPDATEONSTARTUP;
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
break;
|
|
|
|
|
|
case IDCK_DL_ANNOUNCEAUTOLOCATIONID:
|
|
{
|
|
dwTapiTNAFlags ^= FLAG_ANNOUNCEAUTOLOCATIONID;
|
|
|
|
//
|
|
// Activate the APPLY button if not already done
|
|
//
|
|
PropSheet_Changed(GetParent(hWnd), hWnd);
|
|
}
|
|
break;
|
|
|
|
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
}
|