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

📄 wderes.c

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

    if( ok ) {
        if( WdeIsHashTableDirty( res_info->hash_table ) ) {
            if( main_obj = GetMainObject() ) {
                Forward( main_obj, RESOLVE_HELPSYMBOL, &ok, NULL ); /* JPK */
                Forward( main_obj, RESOLVE_SYMBOL, &ok, NULL );
            }
        }
        WdeCreateDLGInclude( res_info, res_info->sym_name );
        ok = WdeSaveResourceToFile( res_info );
        if( !ok ) {
            WdeDisplayErrorMsg( WDE_SAVEFAILED );
        }
    }

    if( ok ) {
        if( WdeIsHashTableDirty( res_info->hash_table ) &&
            !WdeIsHashSaveRejectedSet( res_info->hash_table ) ) {
            WdeWriteSymbols( res_info->hash_table, &res_info->sym_name, get_name );
        }
    }

    if( ok ) {
        //fn_offset = WRFindFnOffset( fn );
        win_title_len = strlen( &(fn[fn_offset]) ) + 1;
        win_title_len += 15;
        win_title = (char *)WdeMemAlloc( win_title_len );
        if( win_title != NULL ) {
            sprintf( win_title,"%s (%d)", &(fn[fn_offset]),
                                          0xffff & res_info->window_num );
            SendMessage( res_info->res_win, WM_SETTEXT, 0,
                         (LPARAM) (LPCSTR) win_title );
            WdeMemFree( win_title );
        } else {
            SendMessage( res_info->res_win, WM_SETTEXT, 0,
                         (LPARAM) (LPCSTR) &(fn[fn_offset]) );
        }
    }

    return( ok );
}

Bool WdeQueryKillApp( Bool fatal_exit )
{
    LIST       *rlist;
    WdeResInfo *res_info;
    Bool        kill_app;

    if( WdeResList ) {
        kill_app = TRUE;
        for( rlist=WdeResList; rlist && kill_app; rlist=ListNext(rlist) ) {
            res_info = (WdeResInfo *) ListElement(rlist);
            kill_app = WdeQuerySaveResOnDeleteRes( res_info, fatal_exit ) &&
                       WdeQuerySaveSymOnDeleteRes( res_info, fatal_exit );
            kill_app = kill_app || fatal_exit;
            WdeHashClearSaveRejected( res_info->hash_table );
        }
        if( !fatal_exit && !kill_app ) {
            return( FALSE );
        }
    }

    return( TRUE );
}

void WdeFreeResList( void )
{
    LIST       *rlist;
    WdeResInfo *res_info;

    if( WdeResList ) {
        for( rlist = WdeResList; rlist; rlist = ListNext(rlist) ) {
            res_info = (WdeResInfo *) ListElement(rlist);
            WdeSetCurrentRes( res_info );
            WdeFreeResInfo( res_info );
        }
        ListFree( WdeResList );
        WdeResList = NULL;
    }
}

Bool WdeRemoveResource( WdeResInfo *res_info )
{
    LIST *node;

    if( !WdeResList ) {
        return( FALSE );
    }

    if( (node = ListFindElt(WdeResList, res_info) ) != NULL ) {
        ListRemoveElt( &WdeResList, (void *) ListElement(node) );
    } else {
        WdeWriteTrail("WdeRemoveResource: res_info not found!");
        return( FALSE );
    }

    if( WdeGetNumRes( ) == 1 ) {
        WdeOldStickyMode = WdeSetStickyMode ( FALSE );
        WdeSetBaseObject( IDM_SELECT_MODE );
    }

    WdeFreeResInfo( res_info );

    if( WdeGetNumRes( ) == 1 ) {
        WdeSetAppMenuToRes( FALSE );
    }

    WdeDecNumRes ();

    return ( TRUE );
}

Bool WdeRemoveDialogFromResInfo ( WdeResInfo *res_info, WdeResDlgItem *ditem,
                                  Bool destroy_object )
{
    WResResNode   *rnode;
    WResLangNode  *lnode;

    if ( !res_info || !ditem ) {
        return ( FALSE );
    }

    res_info->modified = TRUE;

    rnode = ditem->rnode;
    lnode = ditem->lnode;

    ListRemoveElt ( &(res_info->dlg_item_list), ditem );
    WdeFreeResDlgItem ( &ditem, destroy_object );

    if( rnode || lnode ) {
        return( WRRemoveLangNodeFromDir( res_info->info->dir,
                                         &(res_info->dlg_entry),
                                         &rnode, &lnode ) );
    }

    return ( TRUE );
}

LRESULT WINEXPORT WdeResWndProc( HWND hWnd, UINT message,
                                 WPARAM wParam, volatile LPARAM lParam )
{
    WdeResInfo *res_info;
    int         msg_processed;
    LRESULT     ret;

    msg_processed = FALSE;
    ret           = FALSE;
    res_info      = NULL;

    switch ( message ) {
        case WM_CREATE:
            res_info = (WdeResInfo *) ((MDICREATESTRUCT *)
                           ((CREATESTRUCT *)lParam)->lpCreateParams)->lParam;
            res_info->res_win = hWnd;
            SetWindowLong( hWnd, 0, (LONG) res_info );
            break;
        //case WM_COMMAND:
        //case WM_KEYUP:
        //case WM_KEYDOWN:
        case WM_SIZE:
        case WM_MDIACTIVATE:
        case WM_CLOSE:
            res_info = (WdeResInfo *) GetWindowLong( hWnd, 0 );
            break;
        case WM_DESTROY:
            SetWindowLong( hWnd, 0, (LONG) NULL );
            break;
    }

    if( res_info ) {
        switch( message ) {
            //case WM_KEYUP:
            //case WM_KEYDOWN:
                //WdePassToEdit( message, wParam, lParam );
                //break;

            //case WM_COMMAND:
                //switch( LOWORD(wParam) ) {
                    //case IDM_ESCAPE:
                        //ret = WdePassToEdit( message, wParam, lParam );
                        //break;
                //}
                //break;

            case WM_SIZE:
                WdeResizeEditWindows( res_info );
                break;

            case WM_MDIACTIVATE:
                WdeActivateResourceWindow( res_info, wParam, lParam );
                break;

            case WM_CLOSE:
                if( !WdeDestroyResourceWindow( res_info ) ) {
                    return ( (LRESULT) FALSE );
                }
                break;
        }
    }

    if ( !msg_processed ) {
        ret = DefMDIChildProc ( hWnd, message, wParam, lParam );
    }

    return ( ret );
}

Bool WdeSetObjectInfo ( OBJPTR dlg, WdeResInfo **ri,
                        WdeResDlgItem **di, WResID *id )
{
    WdeResInfo    *res_info;
    WdeResDlgItem *item;
    WResID        *name;
    Bool           ok;

    ok = ( dlg && id && ri && di );

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

    if ( ok ) {
        ok = ( ( item = WdeAllocResDlgItem () ) != NULL );
    }

    if ( ok ) {
        ok = ( ( name = WdeCopyWResID ( id ) ) != NULL );
    }

    if ( ok ) {
        item->object      = dlg;
        item->dialog_name = name;
        item->modified    = TRUE;
        item->is32bit     = res_info->is32bit;
        WdeAddResDlgItemToResInfo ( res_info, item );
        *ri = res_info;
        *di = item;
    } else {
        if ( item ) {
            WdeFreeResDlgItem ( &item, FALSE );
        }
        if ( name ) {
            WResIDFree ( name );
        }
    }

    return ( ok );
}

OBJPTR WdeGetCurrentDialog ( void )
{
    WdeResInfo  *info;
    OBJPTR      curr_obj;
    OBJPTR      ancestor;
    OBJ_ID      id;

    info = WdeGetCurrentRes();
    if( info == NULL ) {
        return( NULL );
    }
    InitState( info->forms_win );

    curr_obj = GetCurrObject();
    if( curr_obj == NULL ) {
        return( NULL );
    }

    if( !Forward(curr_obj, IDENTIFY, &id, NULL) ) {
        WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
        return( NULL );
    }

    while( (id != DIALOG_OBJ) && (id != BASE_OBJ) ) {
        GetObjectParent( curr_obj, &ancestor );
        if ( ancestor == NULL ) {
            WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
            return ( NULL );
        }
        curr_obj = ancestor;
        if ( !Forward (curr_obj, IDENTIFY, &id, NULL) ) {
            WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
            return ( NULL );
        }
    }

    if( id != DIALOG_OBJ ) {
        return( NULL );
    }

    return( curr_obj );
}

OBJPTR WdeIsDialogInList ( LIST *l )
{
    OBJ_ID oid;
    OBJPTR obj;

    for ( ; l; l = ListNext ( l ) ) {
        obj = ListElement ( l );
        if ( Forward (obj, IDENTIFY, &oid, NULL) && (oid == DIALOG_OBJ) ) {
            return ( obj );
        }
    }

    return ( NULL );
}

Bool WdeMouseRtnCreate( HWND win, RECT *r )
{
    RECT           *ncp;
    RECT            rect;
    LIST           *l;
    SUBOBJ_REQUEST  req;
    OBJPTR          obj;
    OBJPTR          ro;
    Bool            adjust;
    POINT           pt;
    WdeResizeRatio  resizer;
    WdeResInfo     *info;
    DialogSizeInfo  d;

    rect = *r;

    /* if we are creating a dialog discard the NC area */
    if( GetBaseObjType() == DIALOG_OBJ ) {
        ncp = WdeGetDefaultDialogNCSize( );
        rect.left   += ncp->left;
        rect.top    += ncp->top;
        rect.right  -= ncp->right;
        rect.bottom -= ncp->bottom;
        if( rect.right < rect.left ) {
            rect.right = rect.left;
        }
        if( rect.bottom < rect.top ) {
            rect.bottom = rect.top;
        }
        adjust = FALSE;
        obj = GetMainObject();
    } else {
        l          = NULL;
        req.p.ty   = AT_POINT;
        req.p.pt.x = rect.left;
        req.p.pt.y = rect.top;
        Forward( GetMainObject(), FIND_SUBOBJECTS, &req, &l );

        obj = WdeIsDialogInList( l );

        if( l ) {
            ListFree( l );
        }

        if( obj ) {
            adjust = TRUE;
        } else {
            adjust = FALSE;
            obj = GetMainObject();
        }
    }

    if( !Forward( obj, GET_RESIZER, &resizer, &ro ) ) {
        return( FALSE );
    }

    if( adjust ) {
        if( !Forward( ro, GET_WINDOW_HANDLE, &win, NULL) ) {
            return( FALSE );
        }
        GetOffset( &pt );
        OffsetRect( &rect, -pt.x, -pt.y );
        if( info = WdeGetCurrentRes() ) {
            MapWindowPoints( info->edit_win, win, (POINT *) &rect, 2 );
        }
    }

    if( WdeScreenToDialog( NULL, &resizer, &rect, &d ) ) {
        WdeWriteObjectDimensions( (int_16)d.x, (int_16)d.y,
                                  (int_16)d.width, (int_16)d.height );
    }

    return( TRUE );
}

Bool WdeMouseRtnResize( HWND win, RECT *r )
{
    POINT           pt;
    LIST           *l;
    OBJPTR          curr_obj;
    OBJ_ID          oid;
    OBJPTR          obj;
    OBJPTR          ro;
    RECT            rect;
    RECT            nc;
    WdeResizeRatio  resizer;
    Bool            adjust;
    WdeResInfo     *info;
    DialogSizeInfo  d;
    SUBOBJ_REQUEST  req;

    rect   = *r;
    adjust = FALSE;

    /* try to find the object id of resized object */
    curr_obj = GetCurrObject();
    if( !curr_obj || !Forward( curr_obj, IDENTIFY, &oid, NULL ) ) {
        oid = 0;
    }

    if( oid == DIALOG_OBJ ) {
        if( !Forward( curr_obj, GET_NC_SIZE, &nc, NULL ) ) {
            return( FALSE );
        }
        rect.left   += nc.left;
        rect.top    += nc.top;
        rect.right  -= nc.right;
        rect.bottom -= nc.bottom;
        if( rect.right < rect.left ) {
            rect.right = rect.left;
        }
        if( rect.bottom < rect.top ) {
            rect.bottom = rect.top;
        }
        if( !Forward( curr_obj, GET_RESIZER, &resizer, &ro ) ) {
            return( FALSE );
        }
    } else {
        l          = NULL;
        req.p.ty   = AT_POINT;
        req.p.pt.x = rect.left;
        req.p.pt.y = rect.top;
        Forward( GetMainObject(), FIND_SUBOBJECTS, &req, &l );
        obj = WdeIsDialogInList( l );
        if( l ) {
            ListFree( l );
        }
        if( obj ) {
            adjust = TRUE;
        } else {
            obj = GetMainObject();
        }
        if( !Forward( obj, GET_RESIZER, &resizer, &ro ) ) {
            return( FALSE );
        }
    }

    if( adjust ) {
        if( !Forward( ro, GET_WINDOW_HANDLE, &win, NULL) ) {
            return( FALSE );
        }
        GetOffset( &pt );
        OffsetRect( &rect, -pt.x, -pt.y );
        if( info = WdeGetCurrentRes () ) {
            MapWindowPoints( info->edit_win, win, (POINT *) &rect, 2 );
        }
    }

    if( WdeScreenToDialog( NULL, &resizer, &rect, &d ) ) {
        WdeWriteObjectDimensions( (int_16)d.x, (int_16)d.y,
                                  (int_16)d.width, (int_16)d.height );
    }

    return( TRUE );
}

void WINEXPORT WdeMouseRtn( HWND win, RECT *r )
{
    if( GetBaseObjType() == EDIT_SELECT ) {
        WdeMouseRtnResize( win, r );
    } else {
        WdeMouseRtnCreate( win, r );
    }
}

⌨️ 快捷键说明

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