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

📄 mimetype.cpp

📁 mini http server,可以集成嵌入到程序中,实现简单的web功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		SendMessage( hWndDefMime, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
		M_ReplaceValue( pConfig, "Internal", "DefaultMIMEType", szBuf );

        ::SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
        return (TRUE);
		};

    void Internal_addLine( const char *pLine )
        {
        assert( pLine );
        assert( lExtensions.Size()==lMIMEs.Size() );

        int i;
        for( i=0; pLine[i] && !isspace(pLine[i]); i++ );
	
        /* --- scan to tab --- */
        lExtensions.Append( (DblList::type)PI_NEW( PIString( pLine, i ) ) );

        /* --- scan over whitespace to start of Media type/subtype --- */
        for( ; pLine[i] && isspace(pLine[i]); i++ );
        lMIMEs.Append( (DblList::type)PI_NEW( PIString( &(pLine[i]) ) ) );	

        assert( lExtensions.Size()==lMIMEs.Size() );
        };

    void Internal_clearArrays()
        {
        DblListIterator x( lExtensions );
        DblListIterator y( lMIMEs );
        for( ; !x.BadIndex(); x++, y++ )
            {
            assert( !x.BadIndex() && !y.BadIndex() );
            PI_DELETE( (PIString *)x.Current() );
            PI_DELETE( (PIString *)y.Current() );
            };
        lExtensions.Clear();
        lMIMEs.Clear();
        };

    void Internal_reloadArrays()
        {
        enum { BUF_SIZE=1023 };
        char szBuf[BUF_SIZE+1];

        Internal_clearArrays();

        /*
        ** Get number of items
        */
        int iCount = ::SendMessage( hWndList, LB_GETCOUNT, 0, 0 );

        /* 
        ** Insert from listbox into internal arrays
        */
        int i;
        for( i=0; i<iCount; i++ )
            {
            ::SendMessage( hWndList, LB_GETTEXT, i, (LPARAM)szBuf );
            Internal_addLine( szBuf );
            };
        };

    void Internal_updateButtons( WPARAM wParam, LPARAM lParam, HWND hWndEdit1, 
        HWND hWndEdit2, const char *pExtension )
        {
        if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
            { return; };

        /*
        ** If the file extension changed then check if this is an existing
        ** file extension
        */
        int iExistingIndex = -1;
        assert( pExtension );
        int iChangeToIndex = -1;
        int iIndex = 0;
        if ( *pExtension )
            {
            for( DblListIterator i( lExtensions ); !i.BadIndex();
                i++, iIndex++ )
                {
                PIString *pString = (PIString *)i.Current();
                assert( pString );
                if ( !PIUtil_strncmpi( (*pString), pExtension,
                    strlen( pExtension ) ) )
                    {
                    iChangeToIndex = iIndex;

                    /*
                    ** If this is a full index, select it
                    */
                    if ( !stricmp( (*pString), pExtension ) )
                        { iExistingIndex = iIndex; };
                    break;
                    };
                };
            };

        /*
        ** Remove listbox selection or scroll to correct line
        ** as appropriate 
        */
        ::SendMessage( hWndList, LB_SETCURSEL, iChangeToIndex, 0 );

        /*
        ** Set buttons
        */
        if ( SendMessage( hWndEdit1, EM_LINELENGTH, 0, 0 )==0 )
            {
            if ( IsWindowEnabled( hWndAdd ) ) EnableWindow( hWndAdd, FALSE );
            if ( IsWindowEnabled( hWndReplace ) )
                ::EnableWindow( hWndReplace, FALSE );
            }
        else if ( SendMessage( hWndEdit2, EM_LINELENGTH, 0, 0 )!=0 )
            {
            if ( iExistingIndex>-1 )/* --- disable add, enable replace --- */
                {
                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 DialogProc(HWND hTheDlg, UINT uMsg, WPARAM wParam,
	LPARAM lParam)
        {
		enum { BUF_SIZE=1023 };
		char szBuf[BUF_SIZE+1];
		int aTabstop[2];
	
		switch (uMsg)
			{
			case WM_INITDIALOG:
                hDlg = hTheDlg;
				HourglassOn();
				{
				const char *pTmp;
				int iTmp;
				hWndList = GetDlgItem( hDlg, IDC_LIST );
				hWndFileExt = GetDlgItem( hDlg, IDC_FILEEXT );
				hWndMime= GetDlgItem( hDlg, IDC_MIME );
				hWndAdd = GetDlgItem( hDlg, IDC_ADD );
				hWndReplace = GetDlgItem( hDlg, IDC_REPLACE );
				hWndDelete = GetDlgItem( hDlg, IDC_DELETE );
				hWndDefMime = GetDlgItem( hDlg, IDC_DEFMIME );
	
				assert( hWndList && hWndFileExt && hWndMime );
				assert( hWndAdd && hWndReplace && hWndDelete );
				assert( hWndDefMime );
				
				EnableWindow( hWndAdd, FALSE );
				EnableWindow( hWndReplace, FALSE );
				EnableWindow( hWndDelete, FALSE );
	
				/*
				** Limit edit field lengths, really just a sanity thing
				*/
				SendMessage( hWndFileExt, EM_SETLIMITTEXT, 256, 0 );
				SendMessage( hWndMime, EM_SETLIMITTEXT, 256, 0 );
				SendMessage( hWndDefMime, EM_SETLIMITTEXT, 256, 0 );
				
				/*
				** Setup tabstops
				*/
				aTabstop[0] = 0;
				aTabstop[1] = 75;
				SendMessage( hWndList, LB_SETTABSTOPS, 2, (LPARAM)&aTabstop );
	
				/*
				** Load all mime types into list box
				*/
				iTmp = 0;
				for(;; iTmp++ )
					{
					pTmp = M_LookupValueEx( pConfig, "MIMETypes", 
						"Mapping", iTmp );
					if ( !pTmp )
						{ break; };
	
					SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)pTmp );
					};
				Internal_reloadArrays();
				}

				/*
				** Load default mime type
				*/
				SendMessage( hWndDefMime, WM_SETTEXT, 0,
					(LPARAM)M_LookupValue( pConfig, "Internal", "DefaultMIMEType" ));
				HourglassOff();
				break;
	
			case WM_DESTROY:
				Internal_clearArrays();
				break;
	
			case WM_COMMAND:
				switch (GET_WM_COMMAND_ID(wParam, lParam))
					{
					case IDC_ADD:
						{
						int i;
						*szBuf = '\0';
						SendMessage( hWndFileExt, WM_GETTEXT, BUF_SIZE,
                            (LPARAM)szBuf );
						for( i=0; i<BUF_SIZE && szBuf[i] && !isspace( szBuf[i] ); i++ );
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lExtensions.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
						szBuf[i++] = '\t';
						SendMessage( hWndMime, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
						lMIMEs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[i]) ) ) );
						SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
	
						/*
						** Clear edit fields, focus to list
						*/
						SendMessage( hWndFileExt, WM_SETTEXT, 0, (LPARAM)"" );
						SendMessage( hWndMime, 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:
						{
						/*
						** 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;
						*szBuf = '\0';
						SendMessage( hWndFileExt, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
						for( i=0; i<BUF_SIZE && szBuf[i] && !isspace( szBuf[i] ); i++ );
						if ( szBuf[i] ) { szBuf[i] = '\0'; };
						lExtensions.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
						szBuf[i++] = '\t';
						SendMessage( hWndMime, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
						lMIMEs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[i]) ) ) );
		
						/*
						** Delete the item from the list and internal lists
						*/
						SendMessage( hWndList, LB_DELETESTRING,	iCurSel, 0 );
						PI_DELETE( (PIString *)lExtensions.Detach( iCurSel) );
						PI_DELETE( (PIString *)lMIMEs.Detach( iCurSel) );
						
						/*
						** Add new item to listbox
						*/
						SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
	
						/*
						** Clear edit fields, focus to list
						*/
						SendMessage( hWndFileExt, WM_SETTEXT, 0, (LPARAM)"" );
						SendMessage( hWndMime, 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 );
						PI_DELETE( (PIString *)lExtensions.Detach( iCurSel) );
						PI_DELETE( (PIString *)lMIMEs.Detach( iCurSel) );
				
						/*
						** Clear edit fields, focus to list
						*/
						SendMessage( hWndFileExt, WM_SETTEXT, 0, (LPARAM)"" );
						SendMessage( hWndMime, WM_SETTEXT, 0, (LPARAM)"" );
						SetFocus( hWndList );
						Changed( hDlg );
						};
						break;
	
					case IDC_FILEEXT:
						*szBuf = '\0';
						SendMessage( hWndFileExt, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf ); 
						Internal_updateButtons( wParam, lParam, hWndFileExt, 
							hWndMime, szBuf );
						break;
	
					case IDC_MIME:
						*szBuf = '\0';
						SendMessage( hWndFileExt, WM_GETTEXT, BUF_SIZE,(LPARAM)szBuf );
						Internal_updateButtons( wParam, lParam, hWndMime, 
							hWndFileExt, 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<lExtensions.Size() );
								EnableWindow( hWndDelete, TRUE );
								SendMessage( hWndFileExt, WM_SETTEXT, 0,
									(LPARAM)(const char *)*((PIString *)lExtensions[iSel]) );
								SendMessage( hWndMime, WM_SETTEXT, 0,
									(LPARAM)(const char *)*((PIString *)lMIMEs[iSel]) );
								};
							};
						break;

					case IDC_DEFMIME:
						if ( GET_WM_COMMAND_CMD(wParam, lParam)==EN_CHANGE )
						Changed( hDlg );
						break;
	
					default:;		
					}
				break;

			case WM_NOTIFY:
				switch( ((NMHDR *)lParam)->code )
					{
					case PSN_QUERYCANCEL:
						return SHEET->Cancel(pInterface, hDlg);
	
					case PSN_KILLACTIVE:
                        return Internal_save();
	
					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 );
        };

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

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

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

	<Object>
		Name MIMETypesPage
		Class MIMETypesPageClass
	</Object>

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

⌨️ 快捷键说明

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