📄 pmain.cpp
字号:
int AD_IsChanged() { return __iChanged; };
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
BOOL AD_apply( HWND hDlg )
{
if (AD_IsChanged())
{
AD_hourglassOn();
int iSaved = Internal_applyChanges();
AD_hourglassOff();
if ( iSaved!=1 )
{
::MessageBox( GetParent( hDlg ), "Error saving configuration \
or restarting server.", "Error", MB_OK | MB_ICONSTOP );
SetWindowLong( hDlg, DWL_MSGRESULT, PSNRET_INVALID );
}
else
{
SetWindowLong( hDlg, DWL_MSGRESULT, PSNRET_NOERROR );
AD_UnChanged( hDlg );
}
}
return (TRUE);
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
BOOL AD_cancel( HWND hDlg )
{
if (AD_IsChanged())
{
int mbRes = MessageBox( GetParent( hDlg ), "Discard changes?",
"Warning", MB_YESNOCANCEL | MB_ICONWARNING );
switch (mbRes)
{
case IDYES:
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
break;
case IDNO:
NMHDR nmhdr;
memset((void *)&nmhdr, sizeof(nmhdr), 0);
nmhdr.hwndFrom = hDlg;
nmhdr.code = PSN_KILLACTIVE;
/* ---
Force to write back changes of property sheet page
before safe configuration
--- */
SendMessage( hDlg, WM_NOTIFY, 0, (LPARAM)&nmhdr );
AD_apply( hDlg );
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
break;
case IDCANCEL:
default:
SetWindowLong( hDlg, DWL_MSGRESULT, TRUE );
}
}
return (TRUE);
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
Windowing loop with modeless dialog and tray icon.
\*____________________________________________________________________________*/
static int Internal_WindowsLoop( HINSTANCE hInstance )
{
int i;
int iSheet;
/*
** Register URL class
*/
AD_registerURLClass( hInstance );
/*
** Attempt to load configuration file
*/
assert( __ppArgv );
__pConfig = AD_loadConfig( __ppArgv[1] );
if ( !__pConfig)
{
enum { BUF_SIZE=1023 };
char szBuf[BUF_SIZE+1];
sprintf( szBuf, "Unable to load configuration file '%s'",
__ppArgv[1] );
::MessageBox( NULL, szBuf, "Error", MB_OK );
goto error;
};
/*
** Set configuration values
*/
AD_replaceValue( __pConfig, "Startup", "SemaphoreName", __pSemaphoreName );
AD_replaceValue( __pConfig, "Startup", "ConfigName", __ppArgv[1] );
/*
** Setup property sheet data structures
*/
PROPSHEETPAGE psp;
PROPSHEETHEADER psh;
HPROPSHEETPAGE hpsp[NUM_PAGES];
memset( &psp, 0, sizeof( PROPSHEETPAGE ) );
psp.dwSize = sizeof( PROPSHEETPAGE );
psp.dwFlags = PSP_DEFAULT;
psp.hInstance = hInstance;
iSheet = 0;
/* Status page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_STATUS );
psp.pfnDlgProc = fnStatus;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* General page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_GENERAL );
psp.pfnDlgProc = fnGeneral;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Performance page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_PERFORMANCE );
psp.pfnDlgProc = fnPerformance;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Mapping page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_MAPPING );
psp.pfnDlgProc = fnMapping;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Mime types page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_MIMETYPES );
psp.pfnDlgProc = fnMimeTypes;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Users page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_USERS );
psp.pfnDlgProc = fnUsers;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
#if 0
/* Documents page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_DOCUMENTS );
psp.pfnDlgProc = fnDocuments;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
#endif
/* Logging page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_LOGGING );
psp.pfnDlgProc = fnLogging;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Directory Indexing */
psp.pszTemplate = MAKEINTRESOURCE( IDD_DIRINDEX );
psp.pfnDlgProc = fnDirIndex;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* HTTP page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_HTTP );
psp.pfnDlgProc = fnHttp;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* SSL page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_SSL );
psp.pfnDlgProc = fnSSL;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Supplementary IO Objects */
psp.pszTemplate = MAKEINTRESOURCE( IDD_IO );
psp.pfnDlgProc = fnIO;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* Non-IP Virtual hosts page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_NONIP );
psp.pfnDlgProc = fnNonIP;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/* IP Virtual hosts page */
psp.pszTemplate = MAKEINTRESOURCE( IDD_IP );
psp.pfnDlgProc = fnIP;
hpsp[iSheet++] = CreatePropertySheetPage( &psp );
/*
** Validate all the property sheets were correctly setup
*/
for( i=0; i<iSheet; i++ )
{
if ( !(hpsp[i]) )
{
::MessageBox( NULL, "Internal error generating configuration",
"Pi3Web Properties", MB_OK );
goto error;
};
};
/* setup property structure */
memset( &psh, 0, sizeof( PROPSHEETHEADER ) );
psh.dwSize = sizeof( PROPSHEETHEADER );
psh.dwFlags = PSH_MODELESS | PSH_DEFAULT | PSH_USEICONID;
psh.hInstance = hInstance;
psh.hwndParent = NULL;
psh.pszIcon = MAKEINTRESOURCE(IDI_PI3ADMIN);
psh.nPages = iSheet;
psh.phpage = hpsp;
psh.pszCaption = TITLE;
/* Create modeless property sheet */
assert( iSheet<=NUM_PAGES );
__hPropSheet = (HWND)PropertySheet( &psh );
/* ---
Wait for end of window
--- */
MSG tMsg;
while( GetMessage( &tMsg, NULL, 0, 0 ) )
{
if ( !(PropSheet_IsDialogMessage( __hPropSheet, &tMsg )) )
{
TranslateMessage( &tMsg );
DispatchMessage( &tMsg );
}
else
{
if (!PropSheet_GetCurrentPageHwnd(__hPropSheet))
{
::DestroyWindow( __hPropSheet );
::ExitProcess( 0 );
}
}
};
/*
** Unregister URL class
*/
AD_unregisterURLClass( hInstance );
AD_destroyConfig( __pConfig );
return 0;
error:
AD_unregisterURLClass( hInstance );
if ( __pConfig ) { AD_destroyConfig( __pConfig ); };
return -1;
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
static HCURSOR __hHourglass = 0;
EXTERN_C void AD_hourglassInit( void )
{
__hHourglass = LoadCursor( 0, MAKEINTRESOURCE( IDC_WAIT ) );
assert( __hHourglass );
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
EXTERN_C void AD_hourglassDestroy( void )
{
FreeResource( __hHourglass );
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
static HCURSOR __hSave = 0;
EXTERN_C void AD_hourglassOn( void )
{
__hSave = SetCursor( __hHourglass );
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
EXTERN_C void AD_hourglassOff( void )
{
AD_MUSTBETRUE( SetCursor( __hSave ) );
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
Windows entry point for configuration
\*____________________________________________________________________________*/
int AD_configMain( HINSTANCE hInstance, int iArgc,
const char *ppArgv[] )
{
int iRet;
/*
** Check that argument 1 exists and is an existing configuration
** file
*/
if ( iArgc<=1 )
{
/*
** No configuration file specified
*/
::MessageBox( NULL, "No configuration file specified", "Error in \
parameters", MB_OK );
return -1;
};
__ppArgv = ppArgv;
assert( __ppArgv );
/*
** Semaphore name for application is the full
** path to the configuration file in upper case
*/
PIString sSemaphoreName;
CTRL_semaphoreNameFromConfigPath( __ppArgv[1], sSemaphoreName );
__pSemaphoreName = sSemaphoreName;
AD_hourglassInit();
iRet = Internal_WindowsLoop( hInstance );
AD_hourglassDestroy();
return iRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -