⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmain.cpp

📁 mini http server,可以集成嵌入到程序中,实现简单的web功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -