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

📄 wdefdiag.c

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

    GlobalUnlock(dialog_template);

    GlobalFree(dialog_template);

    if ( hwin == NULL ) {
        WdeWriteTrail("WdeDialogTest: Could not create window!");
        ShowWindow ( obj->window_handle, SW_SHOW );
        return ( FALSE );
    }

    if ( obj->num_children && !WdeSetTestControlDefaults ( hwin ) ) {
        WdeWriteTrail("WdeDialogTest: WdeSetTestControlDefaults failed!");
    }

    ShowWindow ( hwin, SW_SHOW );

    return ( TRUE );
}

Bool WdeDialogRestore ( WdeDialogObject *obj, void *p1, void *p2 )
{
    /* touch unused vars to get rid of warning */
    _wde_touch(p1);
    _wde_touch(p2);

    if( WdeIsDialogRestorable ( obj ) ) {
        ShowWindow ( obj->window_handle, SW_HIDE );
        if( !WdeOpenDialogFromResInfo ( obj->res_info, obj->dlg_item ) ) {
            ShowWindow ( obj->window_handle, SW_SHOW );
            obj->dlg_item->object = obj;
            return( FALSE );
        }
        MakeObjectCurrent( obj->dlg_item->object );
        Destroy( (OBJPTR)obj, FALSE );
    } else {
        return( FALSE );
    }

    return ( TRUE );
}

Bool WdeIsDialogRestorable ( void *_obj )
{
    WdeDialogObject *obj = _obj;

    return ( obj && obj->res_info && obj->dlg_item &&
             obj->dlg_item->dialog_info );
}

Bool WdeDialogSaveObject ( WdeDialogObject *obj, WORD *id, void *p2 )
{
    WdeDialogBoxInfo *dbi;
    uint_8            ret;
    WResLangType      lang;

    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    ret = FALSE;

    if( WdeIsHashTableDirty( obj->res_info->hash_table ) ) {
        Forward ( obj->object_handle, RESOLVE_SYMBOL, NULL, NULL );
        Forward ( obj->object_handle, RESOLVE_HELPSYMBOL, NULL, NULL );
    }

    dbi = WdeDBIFromObject( obj );
    if( !dbi ) {
        return ( FALSE );
    }

    if( obj->dlg_item->dialog_info ) {
        WdeFreeDialogBoxInfo( obj->dlg_item->dialog_info );
    }
    obj->dlg_item->dialog_info = dbi;

    if( obj->dlg_item->lnode ) {
        lang = obj->dlg_item->lnode->Info.lang;
    } else {
        lang.lang    = DEF_LANG;
        lang.sublang = DEF_SUBLANG;
    }

    switch( *id ) {
        case IDM_DIALOG_SAVE:
            ret = WdeSaveObject( obj->res_info, dbi, &(obj->file_name),
                                 obj->name, &lang, FALSE, FALSE );
            break;

        case IDM_DIALOG_SAVEAS:
            ret = WdeSaveObject( obj->res_info, dbi, &(obj->file_name),
                                 obj->name, &lang, FALSE, TRUE );
            break;

        case IDM_DIALOG_SAVEINTO:
            ret = WdeSaveObject( obj->res_info, dbi, &(obj->file_name),
                                 obj->name, &lang, TRUE, TRUE );
            break;
    }

    return ( ret );
}

Bool WdeDialogGetResizeInc ( WdeDialogObject *obj, POINT *p, void *p2 )
{
    DialogSizeInfo      d;
    RECT                r;

    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    p->x = 1;
    p->y = 1;

    d.x = 0;
    d.y = 0;
    d.width = WdeGetOption( WdeOptReqGridX );
    d.height = WdeGetOption( WdeOptReqGridY );

    if( obj->window_handle != (HWND)NULL ) {
        SetRect( &r, 0, 0, d.width, d.height );
        MapDialogRect( obj->window_handle, &r );
        p->x = r.right;
        p->y = r.bottom;
    } else {
        if( WdeDialogToScreen( obj, &(obj->resizer), &d, &r ) ) {
            p->x = r.right;
            p->y = r.bottom;
        }
    }

    return ( TRUE );
}

Bool WdeDialogGetScrollRect ( WdeDialogObject *obj, RECT *r, void *p2 )
{
    return ( Forward ( obj->parent, GET_SCROLL_RECT, r, p2 ) );
}

Bool WdeDialogGetResizer ( WdeDialogObject *obj, WdeResizeRatio *resizer,
                           OBJPTR *o )
{
    *resizer = obj->resizer;
    if ( o ) {
        *o = obj;
    }

    return ( TRUE );
}

Bool WdeDialogGetFont ( WdeDialogObject *obj, HFONT *font, void *p2 )
{
    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    *font = obj->font;

    return ( TRUE );
}

Bool WdeDialogIdentify ( WdeDialogObject *obj, OBJ_ID *id, void *p2 )
{
    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    *id = obj->object_id;

    return ( TRUE );
}

Bool WdeDialogDefine( WdeDialogObject *obj, POINT *pnt, void *p2 )
{
    WdeDefineObjectInfo  o_info;
    Bool                 redraw;
    Bool                 quick;
    Bool                 destroy_children;

    /* touch unused vars to get rid of warning */
    _wde_touch(pnt);
    _wde_touch(p2);

    if( obj->mode != WdeSelect ) {
        return( TRUE );
    }

    o_info.obj           = obj;
    o_info.obj_id        = obj->object_id;
    o_info.win           = obj->window_handle;
    o_info.symbol        = obj->symbol;
    o_info.helpsymbol    = obj->helpsymbol;
    o_info.hook_func     = WdeWinStylesHook;
    o_info.set_func      = NULL;
    o_info.get_func      = NULL;
    o_info.res_info      = obj->res_info;
    o_info.info.d.name   = obj->name;
    o_info.info.d.header = obj->dialog_info;
    o_info.mask   = WS_POPUP        | WS_CHILD        |
                    WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
                    WS_VISIBLE      | WS_DISABLED     |
                    WS_BORDER       | WS_DLGFRAME     |
                    WS_VSCROLL      | WS_HSCROLL      |
                    WS_SYSMENU      | WS_THICKFRAME   |
                    WS_MINIMIZEBOX  | WS_MAXIMIZEBOX ;

    if ( !WdeGetOption ( WdeOptUseDefDlg ) ) {
        redraw = WdeGenericDefine ( &o_info );
    } else {
        WdeSetStatusText( NULL, "", FALSE );
        WdeSetStatusByID( WDE_DEFININGDIALOG, -1 );

        redraw = JDialogBoxParam( WdeAppInst, "WdeDefineDIALOG",
                                  obj->window_handle,
                                  (DLGPROC) WdeDialogDefineProcInst,
                                  (LPARAM) &o_info );

        if ( redraw ) {
            quick            = TRUE;
            destroy_children = TRUE;
            HideSelectBoxes ( );

            if ( !WdeDialogDestroyWindow ( obj, &quick, &destroy_children ) ) {
                WdeWriteTrail("WdeDialogDefine: WdeDialogDestroyWindow failed!");
                return ( FALSE );
            }

            if ( !WdeDialogCreateWindow ( obj, NULL, NULL ) ) {
                WdeWriteTrail("WdeDialogDefine: CREATE_WINDOW failed!");
                return ( FALSE );
            }

            ShowSelectBoxes ( );

            UpdateScroll ();
        }
    }

    if ( redraw ) {
        obj->symbol     = o_info.symbol;
        obj->helpsymbol = o_info.helpsymbol;
        obj->name       = o_info.info.d.name;
        WdeWriteDialogToInfo ( obj );
        WdeDialogModified ( obj );
    }

    WdeSetStatusReadyText( );

    return ( TRUE );
}

BOOL WdeDialogIsMarkValid ( WdeDialogObject *obj, BOOL *flag, void *p2 )
{
    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    if ( obj->mode == WdeSelect ) {
        *flag = ( ( obj->window_handle != NULL ) &&
                  IsWindowVisible ( obj->window_handle ) );
    } else {
        *flag = FALSE;
    }

    return ( TRUE );
}

Bool WdeDialogDestroy( WdeDialogObject *obj, Bool *flag, Bool *hide )
{
    LIST        *clist;
    OBJPTR       sub_obj;
    OBJPTR       parent;
    RECT         rect;
    Bool         quick, b;
    Bool         destroy_children;

    /* touch unused vars to get rid of warning */
    _wde_touch(flag);

    parent = obj->parent;

    if( obj->mode != WdeSelect ) {
        WdeDialogSetOrderMode( obj, &obj->mode, NULL );
    }

    if( hide && *hide ) {
        WdePreserveDialogWithDBI( obj );
        if( obj->res_info ) {
            sub_obj = WdeGetNextObject( FALSE, obj, parent );
            if( !sub_obj ) {
                sub_obj = parent;
            }
            obj->res_info->next_current = sub_obj;
        }
    } else {
        WdeRemoveObject( obj->res_info, obj );
    }

    Location( obj->object_handle, &rect );

    if( parent ) {
        if( !RemoveObject(parent, obj->object_handle) ) {
            WdeWriteTrail("WdeDialogDestroy: RemoveObject failed!");
        }
    }

    quick            = TRUE;
    destroy_children = TRUE;

    if( !WdeDialogDestroyWindow( obj, &quick, &destroy_children ) ) {
        WdeWriteTrail("WdeDialogDestroy: WdeDialogDestroyWindow failed!");
    }

    b = FALSE;

    // we do this BEFORE we destroy the children as a child if this
    // dialog may be the current object
    ObjectDestroyed( obj->object_handle );
    if( hide && *hide ) {
        if( parent ) {
            MakeObjectCurrent( parent );
        }
    }

    /* destroy all children */
    clist = WdeListCopy( obj->children );
    for( ; clist; clist = ListConsume(clist) ) {
        sub_obj = ListElement( clist );
        if( !Forward( sub_obj, DESTROY, &b, NULL ) ) {
            WdeWriteTrail("WdeDialogDestroy: Child DESTROY failed");
        }
    }

    if( !Forward( obj->o_item, DESTROY, &b, NULL ) ) {
        WdeWriteTrail("WdeDialogDestroy: Remove OITEM failed!");
        return( FALSE );
    }

    WdeFreeOrderedList( obj->ochildren );

    if( obj->res_info ) {
        if( obj->res_info->next_current == obj->object_handle ) {
            obj->res_info->next_current = NULL;
        }
    }

    WdeFreeDialogObject( obj  );

    MarkInvalid( &rect );

    WdeCheckBaseScrollbars( FALSE );

    return( TRUE );
}

void WdeFreeDialogObject ( WdeDialogObject *obj  )
{
    if ( obj->dialog_info ) {
        WdeFreeDialogBoxHeader ( &( obj->dialog_info ) );
    }

    if ( obj->name ) {
        WResIDFree ( obj->name );
    }

    if ( obj->symbol ) {
        WdeMemFree( obj->symbol );
    }

    if ( obj->file_name ) {
        WdeMemFree( obj->file_name );
    }

//    if ( obj->helpname ) {
//        WResHelpIDFree ( obj->helpname );
//    }

    if ( obj->helpsymbol ) {
        WdeMemFree( obj->helpsymbol );
    }

    WdeMemFree ( obj );
}

Bool WdeDialogCreateWindow ( WdeDialogObject *obj, Bool *show, void *p2 )
{
    HGLOBAL             hglobal_mem;
    uint_8              *locked_global_mem;
    RECT                rect;
    LIST                *olist;
    OBJPTR              child;

    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    //SETHDR_STYLE(obj->dialog_info, GETHDR_STYLE(obj->dialog_info) & ~WS_VISIBLE );

    if (!WdeBuildDialogTemplate(obj->dialog_info, &hglobal_mem)) {
        return ( FALSE );
    }

    locked_global_mem = (uint_8 *) GlobalLock(hglobal_mem);

    if (locked_global_mem == NULL) {
        WdeWriteTrail("WdeDialogCreateWindow: Could not lock template!");
        GlobalFree(hglobal_mem);
        return ( FALSE );

⌨️ 快捷键说明

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