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

📄 wdefdiag.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    if ( handle ==  NULL ) {
        new->object_handle = new;
    } else {
        new->object_handle = handle;
    }

    new->o_item = Create( OBJ_ITEM, new->parent, obj_rect, new->object_handle);

    if (new->o_item == NULL) {
        WdeWriteTrail("WdeDialogCreater: OITEM not created!");
        WdeFreeDialogBoxHeader(&(new->dialog_info));
        WdeMemFree ( new );
        return ( NULL );
    }

    if (!Forward ( new->parent, GET_FONT, &(new->font), NULL)) {
        WdeWriteTrail("WdeDialogCreater: Couldn't get parent font!");
        WdeFreeDialogBoxHeader(&(new->dialog_info));
        WdeMemFree(new);
        return ( NULL );
    }

    if ( !WdeGetStickyMode() ) {
        WdeSetBaseObject ( IDM_SELECT_MODE );
    }

    return ( new );
}

Bool WINEXPORT WdeDialogDispatcher ( ACTION act, WdeDialogObject *obj,
                                     void *p1, void *p2)
{
    int     i;

    WdeDebugDispatch("Dialog", act, obj, p1, p2);

    for ( i = 0; i < MAX_ACTIONS; i++ ) {
        if ( WdeDialogActions[i].id == act ) {
            if ( WdeDialogActions[i].rtn ) {
                return( ( WdeDialogActions[i].rtn ) ( obj, p1, p2 ) );
            } else {
                return ( Forward ( obj->parent, act, p1, p2 ) );
            }
        }
    }

    return ( Forward ( obj->o_item, act, p1, p2 ) );
}

Bool WdeDialogInit ( Bool first )
{
    char        *text;
    Bool        use_default;

    _wde_touch(first);

    WdeAppInst = WdeGetAppInstance();

    WdeDefaultDialog = WdeAllocDialogBoxHeader();
    if( !WdeDefaultDialog ) {
        WdeWriteTrail( "WdeDialogInit: Alloc of dialog failed!" );
        return( FALSE );
    }
#ifdef __NT__
    WdeDefaultDialog->is32bit = TRUE;
#endif

    /* set up the default control structure */
    SETHDR_STYLE( WdeDefaultDialog, WS_CAPTION | WS_SYSMENU |
                                    WS_VISIBLE | DS_MODALFRAME | DS_SETFONT );

    // the following assumes the same memory allocation scheme is
    // being used for regular stuff and RC strings
    text = WdeAllocRCString( WDE_DEFAULTDIALOGCAPTION );
    SETHDR_CAPTION( WdeDefaultDialog, text );

    use_default = TRUE;

#ifdef WDE_USE_RC_FONTS
    char        *cp;
    int         point_size;
    text = WdeAllocRCString( WDE_DEFAULTDIALOGFONT );
    if( text ) {
        cp = _mbschr( text, '.' );
        if( cp ) {
            *cp = '\0';
            SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( text ) );
            cp++;
            point_size = atoi( cp );
            SETHDR_POINTSIZE( WdeDefaultDialog, point_size );
            use_default = FALSE;
        }
        WdeFreeRCString( text );
    }
#endif

    if( use_default ) {
        if( GetSystemMetrics( SM_DBCSENABLED ) ) {
            SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( DEFAULT_JFONT ) );
            SETHDR_POINTSIZE( WdeDefaultDialog, DEFAULT_JPOINT_SIZE );
        } else {
            SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( DEFAULT_FONT ) );
            SETHDR_POINTSIZE( WdeDefaultDialog, DEFAULT_POINT_SIZE );
        }
    }

    WdeDialogDispatch =
        MakeProcInstance ( (FARPROC) WdeDialogDispatcher, WdeAppInst );

    WdeDialogDefineProcInst =
        MakeProcInstance ( (FARPROC) WdeDialogDefineProc, WdeAppInst );

    WdeTestProcInst = (DLGPROC)
        MakeProcInstance ( (FARPROC) WdeTestDlgProc, WdeAppInst );

    WdeDialogProcInst = (DLGPROC)
        MakeProcInstance ( (FARPROC) WdeDialogProc, WdeAppInst );

    return( TRUE );
}

void WdeDialogFini ( void )
{
    WdeFreeDialogBoxHeader ( &WdeDefaultDialog );
    FreeProcInstance       ( WdeDialogDefineProcInst);
    FreeProcInstance       ( (FARPROC) WdeTestProcInst );
    FreeProcInstance       ( (FARPROC) WdeDialogProcInst );
    FreeProcInstance       ( WdeDialogDispatch );
}

BOOL WdeDialogResolveSymbol ( WdeDialogObject *obj, Bool *b, Bool *from_id )
{
    WdeHashValue        val;
    OBJPTR              child;
    LIST                *olist;
    void                *vp;
    Bool                found;

    if( obj->res_info == NULL ) {
        return( FALSE );
    }

    for( olist = obj->children; olist; olist = ListNext( olist ) ) {
        child =  ListElement( olist );
        Forward( child, RESOLVE_SYMBOL, b, from_id );
    }

    if( !obj->name->IsName ) {
        if( from_id && *from_id ) {
            vp = WdeResolveValue( obj->res_info->hash_table,
                                  (WdeHashValue) obj->name->ID.Num );
            if( vp ) {
                if( obj->symbol ) {
                    WdeMemFree( obj->symbol );
                }
                obj->symbol = vp;
                WdeDialogModified( obj );
            }
        } else {
            if( obj->symbol ) {
                val = WdeLookupName( obj->res_info->hash_table,
                                     obj->symbol, &found );
                if( found ) {
                    obj->name->ID.Num = (uint_16)val;
                    WdeDialogModified( obj );
                } else {
                    WdeMemFree( obj->symbol );
                    obj->symbol = NULL;
                }
            }
        }
        if( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
            WdeWriteDialogToInfo( obj );
        }
    }

    return( TRUE );
}

BOOL WdeDialogResolveHelpSymbol ( WdeDialogObject *obj, Bool *b,
                                  Bool *from_id )
{
    WdeHashValue        val;
    OBJPTR              child;
    LIST                *olist;
    void                *vp;
    Bool                found;

    if( obj->res_info == NULL ) {
        return( FALSE );
    }

    for( olist = obj->children; olist; olist = ListNext( olist ) ) {
        child =  ListElement( olist );
        Forward( child, RESOLVE_HELPSYMBOL, b, from_id );
    }

    if( from_id && *from_id ) {
        vp = WdeResolveValue( obj->res_info->hash_table,
                              (WdeHashValue)GETHDR_HELPID(obj->dialog_info));
        if( vp ) {
            if( obj->helpsymbol ) {
                WdeMemFree( obj->helpsymbol );
            }
            obj->helpsymbol = vp;
            obj->dialog_info->helpsymbol = WdeStrDup( obj->helpsymbol );
            WdeDialogModified( obj );
        }
    } else {
        if( obj->helpsymbol ) {
            val = WdeLookupName( obj->res_info->hash_table,
                                 obj->helpsymbol, &found );
            if( found ) {
                SETHDR_HELPID(obj->dialog_info, val);
                WdeDialogModified( obj );
            } else {
                WdeMemFree( obj->helpsymbol );
                obj->helpsymbol = NULL;
            }
        }
    }
    if( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
        WdeWriteDialogToInfo( obj );
    }

    return( TRUE );
}

BOOL WdeDialogModifyInfo ( WdeDialogObject *obj, WdeInfoStruct *in, void *p2 )
{
    WResID              *old_name;
    char                *old_symbol;
    WdeHashEntry        *entry;
    Bool                dup;

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

    if( in->d.caption ) {
        if( GETHDR_CAPTION(obj->dialog_info) ) {
            WdeMemFree( GETHDR_CAPTION(obj->dialog_info) );
        }
        SETHDR_CAPTION( obj->dialog_info, in->d.caption );
        if( GETHDR_CAPTION(obj->dialog_info) ) {
            SendMessage( obj->window_handle, WM_SETTEXT, 0,
                         (LPARAM)(LPCSTR)GETHDR_CAPTION(obj->dialog_info) );
        } else {
            SendMessage( obj->window_handle, WM_SETTEXT, 0,
                         (LPARAM)(LPCSTR)"" );
        }
    }

    old_name = obj->name;
    old_symbol = obj->symbol;

    if( in->symbol ) {
        dup = FALSE;
        obj->symbol = in->symbol;
        entry = WdeDefAddHashEntry( obj->res_info->hash_table,
                                    obj->symbol, &dup );
        if( entry ) {
            obj->name = WResIDFromNum( entry->value );
            in->d.name = obj->name;
        } else {
            obj->name = old_name;
            obj->symbol = old_symbol;
            old_name = NULL;
            old_symbol = NULL;
        }
    } else if( in->d.name ) {
        obj->name = in->d.name;
    }

    if( old_symbol ) {
        WdeMemFree( old_symbol );
    }

    if( old_name ) {
        WResIDFree( old_name );
    }

    WdeDialogModified( obj );

    return( TRUE );
}

Bool WdeDialogTest( WdeDialogObject *obj, void *p1, void *p2 )
{
    GLOBALHANDLE     dialog_template;
    uint_8          *locked_global_mem;
    char            *MenuName;
    char            *ClassName;
    DWORD           style;
    LIST            *clist;
    WdeOrderedEntry *oentry;
    HWND             hwin;
    uint_16          flag;

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

    SETHDR_NUMITEMS( obj->dialog_info, obj->num_children );

    MenuName = WdeResNameOrOrdinalToStr( GETHDR_MENUNAME(obj->dialog_info), 10 );
    if( MenuName && !*MenuName ) {
        WdeMemFree( MenuName );
        MenuName = NULL;
    }

    ClassName = WdeResNameOrOrdinalToStr( GETHDR_CLASSNAME(obj->dialog_info), 10 );
    if( ClassName && !*ClassName ) {
        WdeMemFree( ClassName );
        ClassName = NULL;
    }

    style = GETHDR_STYLE( obj->dialog_info );

    /* we don't like child windows just yet -- problems with redrawing
     * edit environment
     */
    if ( style & WS_CHILD ) {
        style ^= WS_CHILD;
        style |= WS_POPUP;
    }

    if ( style & DS_SYSMODAL ) {
        style ^= DS_SYSMODAL;
    }

    if (obj->dialog_info->is32bitEx) {
        dialog_template =
            DialogEXTemplate( (DWORD)style,
                            GETHDR_EXSTYLE( obj->dialog_info ),
                            GETHDR_HELPID( obj->dialog_info ),
                            GETHDR_SIZEX( obj->dialog_info ),
                            GETHDR_SIZEY( obj->dialog_info ),
                            GETHDR_SIZEW( obj->dialog_info ),
                            GETHDR_SIZEH( obj->dialog_info ),
                            MenuName,
                            ClassName,
                            GETHDR_CAPTION( obj->dialog_info ),
                            GETHDR_POINTSIZE( obj->dialog_info ),
                            GETHDR_FONTNAME( obj->dialog_info ),
                            GETHDR_FONTWEIGHT( obj->dialog_info ),
                            GETHDR_FONTITALIC( obj->dialog_info ) );
    } else {
        dialog_template =
            DialogTemplate( style,
                            GETHDR_SIZEX( obj->dialog_info ),
                            GETHDR_SIZEY( obj->dialog_info ),
                            GETHDR_SIZEW( obj->dialog_info ),
                            GETHDR_SIZEH( obj->dialog_info ),
                            MenuName,
                            ClassName,
                            GETHDR_CAPTION( obj->dialog_info ),
                            GETHDR_POINTSIZE( obj->dialog_info ),
                            GETHDR_FONTNAME( obj->dialog_info ) );
    }

    if( MenuName ) {
        WdeMemFree( MenuName );
    }

    if( ClassName ) {
        WdeMemFree( ClassName );
    }

    if ( dialog_template == NULL ) {
        WdeWriteTrail("WdeDialogTest: DialogTemplate failed!");
        return ( FALSE );
    }

    WdeCleanOrderedList ( &obj->ochildren );

    if (obj->dialog_info->is32bitEx) {
        flag = TESTEX;
    } else {
        flag = TEST;
    }
    /* add all the children */
    for( clist = obj->ochildren; clist; clist = ListNext(clist) ) {
        oentry = ListElement( clist );
        if ( !Forward( oentry->obj, flag, &dialog_template, NULL ) ) {
            WdeWriteTrail("WdeDialogTest: control TEST failed!");
            GlobalFree( dialog_template );
            return ( FALSE );
        }
    }

    DoneAddingControls( dialog_template );

    locked_global_mem = (uint_8 *) GlobalLock(dialog_template);

    if (locked_global_mem == NULL) {
        WdeWriteTrail("WdeDialogTest: Could not Lock template!");
        GlobalFree(dialog_template);
        return ( FALSE );
    }

    hwin = CreateDialogIndirectParam ( WdeAppInst,
                                       WDEDLGTEMPLATE locked_global_mem,
                                       obj->res_info->forms_win,
                                       WdeTestProcInst, (LPARAM) obj );

⌨️ 快捷键说明

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