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

📄 vhosts.cpp

📁 mini http server,可以集成嵌入到程序中,实现简单的web功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				if ( IsWindowEnabled( hWndAdd ) ) EnableWindow( hWndAdd, FALSE );
				if ( !IsWindowEnabled( hWndReplace ) ) EnableWindow( hWndReplace, TRUE );
				}
			else						/* --- disable replace, enable add --- */
				{
				if ( !IsWindowEnabled( hWndAdd ) ) EnableWindow( hWndAdd, TRUE );
				if ( IsWindowEnabled( hWndReplace ) ) EnableWindow( hWndReplace, FALSE );
				};
			};
	
		/*
		** If there is a selected item in the listbox then
		** enable delete, otherwise disable delete	
		*/
		if ( SendMessage( hWndList, LB_GETCURSEL, 0, 0 )==LB_ERR )
			{ EnableWindow( hWndDelete, FALSE ); }
		else
	        { EnableWindow( hWndDelete, TRUE ); };
        };
	
    BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
		LPARAM lParam)
	    {
		enum { BUF_SIZE=1023 };
		char szBuf[BUF_SIZE+1];
		int aTabstop[4];
	
		switch (uMsg)
			{
			case WM_INITDIALOG:
				HourglassOn();
				{
				const char *pTmp;
				int iTmp;
				hWndList = GetDlgItem( hDlg, IDC_LIST );
                if ( iIsIP )
                    {
                    hWndIPAddress = GetDlgItem( hDlg, IDC_IPADDRESS );
                    };
				hWndHostname = GetDlgItem( hDlg, IDC_HOSTNAME );
				hWndDocumentRoot= GetDlgItem( hDlg, IDC_DOCUMENTROOT );
				hWndAdd = GetDlgItem( hDlg, IDC_ADD );
				hWndReplace = GetDlgItem( hDlg, IDC_REPLACE );
				hWndDelete= GetDlgItem( hDlg, IDC_DELETE );
				hWndAdministrator= GetDlgItem( hDlg, IDC_ADMINISTRATOR );
	
                if ( iIsIP )
                    {
                    assert( hWndIPAddress );
                    };
				assert( hWndList && hWndHostname && hWndDocumentRoot );
				assert( hWndAdd && hWndReplace && hWndDelete &&
                    hWndAdministrator );
	
				EnableWindow( hWndAdd, FALSE );
				EnableWindow( hWndReplace, FALSE );
				EnableWindow( hWndDelete, FALSE );
	
				/*
				** Limit edit field lengths, really just a sanity thing
				*/
                if ( iIsIP )
                    {
                    SendMessage( hWndIPAddress, EM_SETLIMITTEXT, 256, 0 );
                    };
				SendMessage( hWndHostname, EM_SETLIMITTEXT, 256, 0 );
				SendMessage( hWndDocumentRoot, EM_SETLIMITTEXT, 256, 0 );
				SendMessage( hWndAdministrator, EM_SETLIMITTEXT, 256, 0 );
	
				/*
				** Setup tabstops
				*/
				aTabstop[0] = 0;
				aTabstop[1] = 60;
				aTabstop[2] = 120;
				aTabstop[3] = 170;
				SendMessage( hWndList, LB_SETTABSTOPS, 4, (LPARAM)&aTabstop );
	
				/*
				** Load all data into the listbox
				*/
				iTmp = 0;
				for(;; iTmp++ )
					{
					pTmp = M_LookupValueEx( pConfig, SECTION, 
						sVariable, iTmp );
					if ( !pTmp )
						{ break; };
	
					SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)pTmp );
					};
				Internal_reloadArrays();
				}
				HourglassOff();
				break;
	
			case WM_DESTROY:
				Internal_clearArrays();
				break;
	
	        case WM_COMMAND:
				switch (GET_WM_COMMAND_ID(wParam, lParam))
					{
					case IDC_ADD:
	                    {
	                    /*
	                    ** Verify fields are valid
	                    */
	                    if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
	                        { break; };
	
						int i, j;
						*szBuf = '\0';
                        i = 0;
	
                        if ( iIsIP )
                            {
						    SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
	                            (LPARAM)szBuf );
						    for( i=0; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';
                                i++ );
						    if ( szBuf[i] ) { szBuf[i] = '\0'; };
						    lIPs.Append( (DblList::type)PI_NEW(
                                PIString(szBuf )));
				        	szBuf[i++] = '\t';
                            };
	
						SendMessage( hWndHostname, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lHostnames.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
						szBuf[i++] = '\t';
	
						SendMessage( hWndDocumentRoot, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lDocumentRoots.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
						szBuf[i++] = '\t';
	
						SendMessage( hWndAdministrator, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lAdministrators.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
	
						SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
	
						/*
						** Clear edit fields, focus to list
						*/
                        if ( iIsIP )
                            {
                            SendMessage( hWndIPAddress, WM_SETTEXT, 0,
                                (LPARAM)"" );
                            };
						SendMessage( hWndHostname, WM_SETTEXT, 0,
                            (LPARAM)"" );
						SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
                            (LPARAM)"" );
						SendMessage( hWndAdministrator, WM_SETTEXT, 0,
                            (LPARAM)"" );
						Internal_reloadArrays();
						int iIndex = SendMessage( hWndList,
                            LB_FINDSTRINGEXACT, 0, (LPARAM)szBuf );
						if ( iIndex!=LB_ERR )
                            SendMessage( hWndList, LB_SETTOPINDEX, iIndex, 0 );
						SetFocus( hWndList );
						Changed( hDlg );
						};
						break;
		
					case IDC_REPLACE:
	                    {
	                    /*
	                    ** Verify fields are valid
	                    */
	                    if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
	                        { break; };
	
						/*
						** Get selected item index 
						*/
						int iCurSel = SendMessage( hWndList, LB_GETCURSEL,
                            0, 0 );
	
						/*
						** Get text to add and add it to internal lists only
						*/
						int i, j;
						*szBuf = '\0';
                        i = 0;
	
                        if ( iIsIP )
                            {
						    SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
	                            (LPARAM)szBuf );
						    for( i=0; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';
                                i++ );
						    if ( szBuf[i] ) { szBuf[i] = '\0'; };
						    lIPs.Append( (DblList::type)PI_NEW(
                                PIString(szBuf )));
						    szBuf[i++] = '\t';
                            };
	
						SendMessage( hWndHostname, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lHostnames.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
						szBuf[i++] = '\t';
	
						SendMessage( hWndDocumentRoot, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lDocumentRoots.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
						szBuf[i++] = '\t';
	
						SendMessage( hWndAdministrator, WM_GETTEXT, BUF_SIZE-i,
	                        (LPARAM)&(szBuf[i]) );
						for(j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++);
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lAdministrators.Append( (DblList::type)PI_NEW(
	                        PIString( &(szBuf[j]) ) ) );
	
						/*
						** Delete the item from the list and internal lists
						*/
						SendMessage( hWndList, LB_DELETESTRING,	iCurSel, 0 );
                        if ( iIsIP )
                            {
						    PI_DELETE( (PIString *)lIPs.Detach( iCurSel) );
                            };
						PI_DELETE( (PIString *)lHostnames.Detach( iCurSel) );
						PI_DELETE( (PIString *)lDocumentRoots.Detach( iCurSel));
						PI_DELETE( (PIString *)lAdministrators.Detach(iCurSel));
						
						/*
						** Add new item to listbox
						*/
						SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
	
						/*
						** Clear edit fields, focus to list
						*/
                        if ( iIsIP )
                            {
                            SendMessage( hWndIPAddress, WM_SETTEXT, 0,
                                (LPARAM)"" );
                            };
						SendMessage( hWndHostname, WM_SETTEXT, 0, (LPARAM)"" );
						SendMessage( hWndDocumentRoot, WM_SETTEXT,0,(LPARAM)"");
						SendMessage( hWndAdministrator,WM_SETTEXT,0,(LPARAM)"");
						Internal_reloadArrays();
						int iIndex = SendMessage( hWndList, LB_FINDSTRINGEXACT,
                            0, (LPARAM)szBuf );
						if ( iIndex!=LB_ERR ) SendMessage( hWndList,
	                        LB_SETTOPINDEX, iIndex, 0 );
						SetFocus( hWndList );
						Changed( hDlg );
						};
						break;
	
					case IDC_DELETE:
						{
						int iCurSel = SendMessage( hWndList, LB_GETCURSEL,
                            0, 0 );
						SendMessage( hWndList, LB_DELETESTRING,	iCurSel, 0 );
                        if ( iIsIP )
                            {
						    PI_DELETE( (PIString *)lIPs.Detach( iCurSel) );
                            };
						PI_DELETE( (PIString *)lHostnames.Detach( iCurSel) );
						PI_DELETE( (PIString *)lDocumentRoots.Detach(iCurSel));
						PI_DELETE( (PIString *)lAdministrators.Detach(iCurSel));
				
						/*
						** Clear edit fields, focus to list
						*/
                        if ( iIsIP )
                            {
                            SendMessage( hWndIPAddress, WM_SETTEXT, 0,
                                (LPARAM)"" );
                            };
						SendMessage( hWndHostname, WM_SETTEXT, 0, (LPARAM)"" );
						SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
                            (LPARAM)"" );
						SendMessage( hWndAdministrator, WM_SETTEXT, 0,
                            (LPARAM)"" );
						SetFocus( hWndList );
						Changed( hDlg );
						};
						break;

					case IDC_IPADDRESS:
		                if ( iIsIP )
							{
	                        *szBuf = '\0';
		                    SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
			                    (LPARAM)szBuf ); 
						    Internal_updateButtons( wParam, lParam, hWndIPAddress, 
							    hWndHostname, szBuf );
						    };
						break;

					case IDC_HOSTNAME:
						*szBuf = '\0';
						SendMessage(
					        iIsIP ? hWndIPAddress : hWndHostname,
						    WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf ); 
						Internal_updateButtons( wParam, lParam, hWndHostname, 
							iIsIP ? hWndIPAddress : hWndDocumentRoot, szBuf );
						break;

					case IDC_DOCUMENTROOT:
						*szBuf = '\0';
						SendMessage(
				            iIsIP ? hWndIPAddress : hWndHostname,
					        WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
						Internal_updateButtons( wParam, lParam, hWndDocumentRoot, 
							hWndHostname, szBuf );
						break;

					case IDC_ADMINISTRATOR:
						*szBuf = '\0';
						SendMessage(
				            iIsIP ? hWndIPAddress : hWndHostname,
					        WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
						Internal_updateButtons( wParam, lParam, hWndHostname, 
							hWndDocumentRoot, szBuf );
						break;

					case IDC_LIST:
						if ( GET_WM_COMMAND_CMD(wParam, lParam)==LBN_SELCHANGE )
							{
							int iSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
							if ( iSel!=LB_ERR )
								{
								assert( iSel>=0 && iSel<lHostnames.Size() );
								EnableWindow( hWndDelete, TRUE );
		                        if ( iIsIP )
			                        {
								    SendMessage( hWndIPAddress, WM_SETTEXT, 0,
									    (LPARAM)(const char *)*((PIString *)
						                    lIPs[iSel]) );
							        };
								SendMessage( hWndHostname, WM_SETTEXT, 0,
									(LPARAM)(const char *)*((PIString *)
		                                lHostnames[iSel]) );
								SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
									(LPARAM)(const char *)*((PIString *)
					                    lDocumentRoots[iSel]) );
								SendMessage( hWndAdministrator, WM_SETTEXT, 0,
									(LPARAM)(const char *)*((PIString *)
										lAdministrators[iSel]) );
								};
							};
						break;

					default:;		
					}
				break;

			case WM_NOTIFY:
				switch( ((NMHDR *)lParam)->code )
					{
					case PSN_QUERYCANCEL:
						return SHEET->Cancel(pInterface, hDlg);

					case PSN_KILLACTIVE:
						{
						int i;
						int iCount = SendMessage( hWndList, LB_GETCOUNT, 0, 0 );

						/*
						** Save all date
						*/
						/* --- remove old ones first --- */
						M_DeleteValue( pConfig, SECTION, sVariable );
						for( i=0; i<iCount; i++ )
							{
							*szBuf = '\0';
							szBuf[BUF_SIZE] = '\0';
							SendMessage( hWndList, LB_GETTEXT, i, (LPARAM)szBuf );
							M_AddValue( pConfig, SECTION, sVariable, szBuf );
							};
						};
						SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
						break;

					default:
						return (FALSE);
					};
				break;

			default:
				return (FALSE);
			};	

		return (TRUE);
		};
};

/*____________________________________________________________________________*\
 *
 Function:
 Synopsis:
 Description:
\*____________________________________________________________________________*/
static BOOL CALLBACK fnDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
    LPARAM lParam)
{
    if ( uMsg==WM_INITDIALOG )
        {
        ::SetWindowLong( hDlg, DWL_USER, ((LPPROPSHEETPAGE)lParam)->lParam );
        };

    VHostsPage *pPage = (VHostsPage *)::GetWindowLong( hDlg, DWL_USER );
    return pPage ? pPage->DialogProc( hDlg, uMsg, wParam, lParam ) : FALSE;
}

/*____________________________________________________________________________*\
 *
 Function:
 Synopsis:
 Description:
\*____________________________________________________________________________*/
PUBLIC_PIAPI int VHostsPage_constructor( PIObject *pObj,
	int iArgc, const char *ppArgv[] )
{
	return IFaceBase_constructor( pObj, PI_NEW( VHostsPage( pObj,
		iArgc, ppArgv ) ) );
}

#if 0
/*___+++CNF_BEGIN+++___*/
	<Class>
		Name VHostsPageClass
		Type LogicExtension
		Library IntrFace
		OnClassLoad IFaceBase_onClassLoad
		Constructor VHostsPage_constructor
		CopyConstructor IFaceBase_copyConstructor
		Destructor IFaceBase_destructor
		Execute IFaceBase_execute
	</Class>

	<Object>
		Name IPVHostsPage
		Class VHostsPageClass
        Flag "IP"
	</Object>

	<Object>
		Name NonIPVHostsPage
		Class VHostsPageClass
        Flag "NonIP"
	</Object>

/*___+++CNF_END+++___*/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -