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

📄 wreres.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    }

    ok = ( filter && title );

    if( ok ) {
        gf.file_name = NULL;
        gf.title     = title;
        gf.filter    = filter;
        gf.save_ext  = FALSE;
        ok = ( ( name = WREGetOpenFileName( &gf ) ) != NULL );
    }

    if( ok ) {
        ok = ( (res_info = WRELoadResource( name ) ) != NULL );
    }

    if( ok ) {
        WREFindAndLoadSymbols( res_info );
        ok = WRECreateResourceWindow( res_info );
    }

    if( ok ) {
        ListAddElt( &WREResList, (void *)res_info );
    }

    if( ok ) {
        ok = ( WREFindTypeNode( res_info->info->dir, type, NULL ) != NULL );
    }

    if( ok ) {
        ok = WRESetResNamesFromType( res_info, type, FALSE, NULL, 0 );
    }

    if( ok ) {
        ok = WREHandleResEdit();
    }

    if( ok ) {
        SendMessage( old_info->res_win, WM_CLOSE, 0, 0 );
    }

    if( !ok ) {
        if( res_info ) {
            WREFreeResInfo( res_info );
            res_info = NULL;
        }
    }

    if( name ) {
        WREMemFree( name );
    }

    if( title ) {
        WREFreeRCString( title );
    }

    return( ok );
}

void WRESetCurrentRes ( WREResInfo *res_info )
{
    WRECurrentRes = res_info;
}

WREResInfo *WREGetCurrentRes ( void )
{
    return ( WRECurrentRes );
}

Bool WREIsCurrentMDIWindowZoomed ( void )
{
    WREResInfo *info;

    info = WREGetCurrentRes ();

    if ( info && ( info->res_win != NULL ) ) {
        return ( IsZoomed ( info->res_win ) );
    } else {
        return ( FALSE );
    }
}

Bool WRERegisterResClass ( HINSTANCE app_inst )
{
    WNDCLASS wc;

    /* fill in the WINDOW CLASS structure for the resource window */
    wc.style         = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
    wc.lpfnWndProc   = WREResWndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = sizeof (WREResInfo *);
    wc.hInstance     = app_inst;
    wc.hIcon         = LoadIcon ( app_inst, "ResIcon" );
    wc.hCursor       = NULL;
    //wc.hbrBackground = GetStockObject ( WHITE_BRUSH );
    wc.hbrBackground = CreateSolidBrush( GetSysColor( COLOR_BTNFACE ) );
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = WREResClass;

    /* register the resource window class */
    return ( RegisterClass ( &wc ) );
}

int WREIncNumRes ( void )
{
    if( WRENumRes == 0 ) {
        WREEnableMenus( TRUE );
    }
    return ( ++WRENumRes );
}

int WREDecNumRes ( void )
{
    if( WRENumRes == 1 ) {
        WREEnableMenus( FALSE );
        if( WRENoInterface ) {
            PostMessage( WREGetMainWindowHandle(), WM_CLOSE, 0, 0 );
        }
    }
    return ( (WRENumRes) ? --WRENumRes : WRENumRes  );
}

int WREGetNumRes ( void )
{
    return ( WRENumRes );
}

WREResInfo *WRECreateNewResource( char *filename )
{
    WREResInfo *res_info;
    Bool        ok;

    ok = ( ( res_info = WREAllocResInfo() ) != NULL );

    if( ok ) {
        res_info->info = WRAllocWRInfo();
        ok = ( res_info->info != NULL );
    }

    if( ok ) {
        res_info->symbol_table = WRInitHashTable();
        ok = ( res_info->symbol_table != NULL );
    }

    if( ok && filename ) {
        res_info->info->save_name = WREStrDup( filename );
        ok = ( res_info->info->save_name != NULL );
    }

    if( ok ) {
#ifdef __NT__
        res_info->is32bit = TRUE;
#else
        res_info->is32bit = FALSE;
#endif
        if( res_info->is32bit ) {
            res_info->info->internal_type = WR_WINNTW_RES;
        } else {
            res_info->info->internal_type = WR_WIN16W_RES;
        }
        WREFindAndLoadSymbols( res_info );
        ok = WRECreateResourceWindow( res_info );
    }

    if( res_info ) {
        if( ok ) {
            ListAddElt( &WREResList, (void *) res_info );
        } else {
            WREFreeResInfo( res_info );
            res_info = NULL;
        }
    }

    return( res_info );
}

Bool WREOpenResource( char *fn )
{
    char             *name;
    WREResInfo       *res_info;
    WREGetFileStruct  gf;
    Bool              ok, got_name;

    res_info = NULL;
    name     = NULL;
    got_name = FALSE;

    if( fn ) {
        if( WRFileExists ( fn ) ) {
            ok = ( ( name = WREStrDup( fn ) ) != NULL );
        } else {
            ok = FALSE;
        }
    } else {
        gf.file_name = NULL;
        gf.title     = WREResOpenTitle;
        gf.filter    = WREResFilter;
        gf.save_ext  = TRUE;
        ok = ( ( name = WREGetOpenFileName( &gf ) ) != NULL );
    }

    if( ok ) {
        got_name = TRUE;
        ok = ( (res_info = WRELoadResource( name ) ) != NULL );
    }

    if( ok ) {
        WREFindAndLoadSymbols( res_info );
        ok = WRECreateResourceWindow( res_info );
    }

    if( ok ) {
        ListAddElt( &WREResList, (void *)res_info );
    } else {
        if( res_info ) {
            WREFreeResInfo( res_info );
            res_info = NULL;
        }
        if( got_name ) {
            WREDisplayErrorMsg( WRE_RESOURCESNOTLOADED );
        }
    }

    if( name ) {
        WREMemFree( name );
    }

    return( ok );
}

WREResInfo *WRELoadResource ( const char *file_name )
{
    WRFileType   file_type;
    WREResInfo  *res_info;
    Bool         ok;

    WRESetWaitCursor ( TRUE );

    ok = ( ( res_info = WREAllocResInfo() ) != NULL );

    if ( ok ) {
        file_type = WRIdentifyFile ( file_name );
        ok = ( file_type != WR_INVALID_FILE );
    }

    if ( ok ) {
        res_info->info = WRLoadResource ( file_name, file_type );
        ok = ( res_info->info != NULL );
    }

    if( ok ) {
        file_type = res_info->info->file_type;
        if( res_info->info->internal_type != WR_DONT_KNOW ) {
            file_type = res_info->info->internal_type;
        }
        res_info->is32bit = WRIs32Bit( file_type );
    }

    if( ok ) {
        res_info->symbol_table = WRInitHashTable();
        ok = ( res_info->symbol_table != NULL );
    }

    if( !ok ) {
        if( res_info ) {
            WREFreeResInfo ( res_info );
            res_info = NULL;
        }
    }

    WRESetWaitCursor ( FALSE );

    return ( res_info );
}

WREResInfo *WREResInfoFromWin ( HWND win )
{
    WREResInfo *info;
    LIST       *rlist;

    if ( win != NULL ) {
        info = NULL;
        for ( rlist = WREResList; rlist; rlist = ListNext(rlist) ) {
            info = (WREResInfo *) ListElement(rlist);
            if ( info->res_win == win ) {
                return ( info );
            }
        }
    }

    return ( NULL );
}

Bool WREIsResInfoWinMsg( LPMSG pmsg )
{
    WREResInfo *info;
    LIST       *rlist;

    info = NULL;
    for( rlist = WREResList; rlist; rlist = ListNext(rlist) ) {
        info = (WREResInfo *) ListElement(rlist);
        if( info->info_win != (HWND)NULL ) {
            if( IsDialogMessage( info->info_win, pmsg ) ) {
                return( TRUE );
            }
        }
    }

    return( FALSE );
}

void WREActivateResourceWindow( WREResInfo *res_info,
                                WPARAM wParam, LPARAM lParam )
{
    WREResInfo *info;
    Bool        fActivate;
    HWND        hwndDeact;

    _wre_touch(wParam);

    if( res_info ) {
        fActivate =
            GET_WM_MDIACTIVATE_FACTIVATE(res_info->res_win, wParam, lParam);
        hwndDeact = GET_WM_MDIACTIVATE_HWNDDEACTIVATE(wParam, lParam);
        res_info->active = fActivate;
        if( fActivate ) {
            WRESetCurrentRes ( res_info );
            if( res_info->info_win != (HWND)NULL ) {
                SetFocus( res_info->info_win );
            }
            info = WREResInfoFromWin ( hwndDeact );
            if ( info ) {
                info->active = FALSE;
            }
        }
    }

    return;
}

char *WREGetQueryName ( WREResInfo *res_info )
{
    char *name;

    if ( res_info->info->save_name ) {
        name = res_info->info->save_name;
    } else if ( res_info->info->file_name ) {
        name = res_info->info->file_name;
    } else {
        name = WREResUntitled;
    }

    return ( name );
}

static void WRECheckIfActiveWindow( void )
{
    HWND        main;
    HWND        active;

    main = WREGetMainWindowHandle();
    active = GetActiveWindow();
    if( active != main ) {
        //SetActiveWindow( main );
        ShowWindow( main, SW_RESTORE );
        BringWindowToTop( main );
    }
}

Bool WREQuerySaveSymOnDeleteRes( WREResInfo *res_info, Bool fatal_exit )
{
    int         ret;
    UINT        style;
    char        *text;
    char        *file;
    HWND        frame;

    if( WRENoInterface ) {
        return( TRUE );
    }

    if( !res_info || !res_info->symbol_table ) {
        return( TRUE );
    }

    if( WRIsHashTableDirty( res_info->symbol_table ) ) {
        if( fatal_exit ) {
            style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
        } else {
            style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
        }
        WRECheckIfActiveWindow();
        frame = WREGetMDIWindowHandle();
        SendMessage( frame, WM_MDIRESTORE, (WPARAM) res_info->res_win, 0 );
        SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
        file = WREGetQueryName( res_info );
        text = WREAllocRCString( WRE_SAVEMODIFIEDSYM );
        ret = MessageBox( res_info->res_win, text, file, style );
        if( text ) {
            WREFreeRCString( text );
        }
        if( ret == IDYES ) {
            if( res_info->symbol_file == NULL ) {
                res_info->symbol_file = WRECreateSymName( file );
            }
            if( !WRESaveSymbols( res_info->symbol_table, &res_info->symbol_file, FALSE ) ) {
                return( FALSE );
            }
        } else if( ret == IDCANCEL ) {
            return( FALSE );
        }
    }

    return( TRUE );
}

Bool WREQuerySaveResOnDeleteRes( WREResInfo *res_info, Bool fatal_exit )
{
    int         ret;
    UINT        style;
    HWND        frame;
    char        *text;

    if( WRENoInterface ) {
        return( TRUE );
    }

    if( res_info && WREIsResModified( res_info ) ) {
        if( fatal_exit ) {
            style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
        } else {
            style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
        }
        WRECheckIfActiveWindow();
        frame = WREGetMDIWindowHandle();
        SendMessage( frame, WM_MDIRESTORE, (WPARAM) res_info->res_win, 0 );
        SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
        text = WREAllocRCString( WRE_QUERYMODIFIED );
        ret = MessageBox( res_info->res_win, text,
                          WREGetQueryName( res_info ), style );
        if( text ) {

⌨️ 快捷键说明

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