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

📄 wdefdiag.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/


#include <windows.h>
#include <string.h>
#include <mbstring.h>
#include <stdlib.h>
#include <win1632.h>

#include "wdeglbl.h"
#include "wdemem.h"
#include "wderes.h"
#include "wdeopts.h"
#include "wdeactn.h"
#include "wde_wres.h"
#include "wdemain.h"
#include "wdemsgbx.h"
#include "wdemsgs.gh"
#include "wdesdlg.h"
#include "wdefdlg.h"
#include "wdetest.h"
#include "wdeobjid.h"
#include "wdeinfo.h"
#include "wdefont.h"
#include "wdestyle.h"
#include "wderesiz.h"
#include "wdefmenu.h"
#include "wdegeted.h"
#include "wdefutil.h"
#include "wdectool.h"
#include "wdesdup.h"
#include "wdelist.h"
#include "wdeoinfo.h"
#include "wdefordr.h"
#include "wdesym.h"
#include "wdestat.h"
#include "wdedebug.h"
#include "wdedefin.h"
#include "wresall.h"
#include "wde_rc.h"
#include "wderesin.h"
#include "wdesvobj.h"
#include "wdectl3d.h"
#include "wdecctl.h"
#include "wdefbase.h"
#include "wdefsbar.h"
#include "wdefdiag.h"
#include "windlg.h"
#include "windlg32.h"
#include "jdlg.h"

/****************************************************************************/
/* macro definitions                                                        */
/****************************************************************************/
#ifdef __NT__
#define WDEDLGTEMPLATE (LPCDLGTEMPLATE)
#else
#define WDEDLGTEMPLATE
#endif

#define WDE_NEW_DIALOG_X        20
#define WDE_NEW_DIALOG_Y        WDE_NEW_DIALOG_X + 20
#define WDE_NEW_DIALOG_HEIGHT   125
#define WDE_NEW_DIALOG_WIDTH    WDE_NEW_DIALOG_HEIGHT + 20

#define WDE_TT_FONT_MIN         8
#define WDE_TT_FONT_MAX         36

#define DIALOG_MIN_SIZE_BORDER  WDE_BORDER_SIZE

#define DIALOG_MIN_WIDTH        75
#define DIALOG_MIN_HEIGHT       DIALOG_MIN_WIDTH

#define DEFAULT_FONT            "Helv"
#define DEFAULT_POINT_SIZE      8
#define DEFAULT_JFONT           "俵俽 柧挬"
#define DEFAULT_JPOINT_SIZE     10
#define DEFAULT_MEMFLAGS        ( MEMFLAG_DISCARDABLE | MEMFLAG_PURE | MEMFLAG_MOVEABLE )

/****************************************************************************/
/* type definitions                                                         */
/****************************************************************************/
typedef struct {
    FARPROC             dispatcher;
    HWND                window_handle;
    HWND                parent_handle;
    OBJ_ID              object_id;
    OBJPTR              object_handle;
    OBJPTR              parent;
    OBJPTR              o_item;
    uint_16             num_children; // was uint_8 ==> not big enough for NT
    LIST                *children;
    LIST                *ochildren;
    HFONT               font;
    RECT                nc_size;
    uint_16             mem_flags;
    WdeDialogBoxHeader  *dialog_info;
    WdeResInfo          *res_info;
    WdeResDlgItem       *dlg_item;
    WdeResizeRatio      resizer;
    WResID              *name;
//    WResHelpID                *helpname;
    char                *file_name;
    char                *symbol;
    char                *helpsymbol;
    WdeOrderMode        mode;
} WdeDialogObject;

typedef struct {
   uint_32     style;
   uint_8      items;
   uint_16     x;
   uint_16     y;
   uint_16     cx;
   uint_16     cy;
/* char dtMenuName[];       Variable-length string */
/* char dtClassName[];      Variable-length string */
/* char dtCaptionText[];    Variable-length string */
} DialogTemplateFixed;

/****************************************************************************/
/* external function prototypes                                             */
/****************************************************************************/
extern Bool WINEXPORT WdeDialogDispatcher ( ACTION, WdeDialogObject *,
                                            void *, void *);
extern LRESULT WINEXPORT WdeDialogProc        ( HWND, UINT, WPARAM, LPARAM );
extern Bool WINEXPORT    WdeDialogDefineProc  ( HWND, WORD, WPARAM, LPARAM );

/****************************************************************************/
/* static function prototypes                                               */
/****************************************************************************/
static Bool WdeRemoveObject ( WdeResInfo *, OBJPTR );
static Bool WdeCalcDialogNCSize        ( WdeDialogObject *, RECT * );
static Bool WdeKludgeDialogSize        ( WdeDialogObject *, Bool, Bool );
static OBJPTR         WdeDialogCreater ( OBJPTR, RECT *, OBJPTR );
static WResID      *WdeCreateDialogTitle ( void );
static Bool WdeDialogTest       ( WdeDialogObject *, void *, void *);
static Bool WdeDialogSaveObject ( WdeDialogObject *, WORD *, void *);
static Bool WdeDialogMove       ( WdeDialogObject *, POINT *, Bool *);
static Bool WdeOffsetDialogUnits( WdeDialogObject *, RECT *, RECT *);
static Bool WdeUpdateDialogUnits( WdeDialogObject *, RECT *, RECT *);
static Bool WdeDialogGetFont    ( WdeDialogObject *, HFONT *, void *);
static BOOL WdeDialogResolveSymbol ( WdeDialogObject *, Bool *, Bool * );
static BOOL WdeDialogResolveHelpSymbol ( WdeDialogObject *, Bool *, Bool * );
static Bool WdeDialogGetResizer ( WdeDialogObject *, WdeResizeRatio *,
                                  OBJPTR * );
static Bool WdeDialogGetNCSize  ( WdeDialogObject *, RECT *, void *);
static Bool WdeDialogIdentify   ( WdeDialogObject *, OBJ_ID *, void *);
static Bool WdeDialogDefine     ( WdeDialogObject *, POINT *, void *);
static Bool WdeDialogResize     ( WdeDialogObject *, RECT *, Bool *);
static Bool WdeDialogIsMarkValid   ( WdeDialogObject *, BOOL *, void *);
static Bool WdeDialogDestroy    ( WdeDialogObject *, Bool *, Bool *);
static Bool WdeDialogRestore       ( WdeDialogObject *, void *, void *);
static Bool WdeDialogCreateWindow  ( WdeDialogObject *, Bool *, void *);
static Bool WdeDialogDestroyWindow ( WdeDialogObject *, Bool *, Bool *);
static Bool WdeDialogShowWindow    ( WdeDialogObject *, Bool *, void *);
static Bool WdeDialogGetResizeInfo ( WdeDialogObject *, RESIZE_ID *, void *);
static Bool WdeDialogValidateAction( WdeDialogObject *, ACTION *, void *);
static Bool WdeDialogSetFont ( WdeDialogObject *, HFONT *, WdeResizeRatio *);
static Bool WdeDialogDraw    ( WdeDialogObject *, RECT *, HDC *);
static Bool WdeDialogAddSubObject    ( WdeDialogObject *, OBJPTR, void *);
static Bool WdeDialogGetSubObjectList( WdeDialogObject *, LIST **, void *);
static Bool WdeDialogFindSubObjects  ( WdeDialogObject *, SUBOBJ_REQUEST *,
                                       LIST **);
static Bool WdeDialogFindObjectsPt   ( WdeDialogObject *, POINT *, LIST ** );
static Bool WdeDialogGetNextChild    ( WdeDialogObject *, OBJPTR *, Bool * );
static Bool WdeDialogRemoveSubObject ( WdeDialogObject *, OBJPTR, void *);
static Bool WdeDialogGetWindowHandle ( WdeDialogObject *, HWND *, void *);
static Bool WdeDialogNotify          ( WdeDialogObject *, NOTE_ID *, void *);
static Bool WdeDialogFirstChild      ( WdeDialogObject *, void *, void *);
static Bool WdeDialogPutChildFirst   ( WdeDialogObject *, OBJPTR, void *);
static Bool WdeDialogOnTop           ( WdeDialogObject *, void *, void *);
static Bool WdeDialogPasteObject     ( WdeDialogObject *, OBJPTR, POINT *);
static Bool WdeDialogCutObject       ( WdeDialogObject *, WdeDialogObject **,
                                       void *);
static Bool WdeDialogCopyObject      ( WdeDialogObject *, WdeDialogObject **,
                                       WdeDialogObject *);
static Bool WdeDialogSetOrderMode    ( WdeDialogObject *, WdeOrderMode *,
                                       void * );
static Bool WdeDialogGetOrderMode    ( WdeDialogObject *, WdeOrderMode *,
                                       void * );
static Bool WdeDialogSetObjectInfo   ( WdeDialogObject *, WdeDialogBoxHeader *,
                                       void *);
static Bool WdeDialogGetObjectInfo   ( WdeDialogObject *obj,
                                       WdeDialogBoxHeader **, WResID ** );
static Bool WdeDialogGetObjectHelpInfo( WdeDialogObject *obj,
                                        WdeDialogBoxHeader **, char ** );
static Bool WdeDialogGetScrollRect   ( WdeDialogObject *, RECT *, void *);
static Bool WdeDialogGetResizeInc    ( WdeDialogObject *, POINT *, void *);

static Bool WdeBuildDialogTemplate   ( WdeDialogBoxHeader *, HGLOBAL *);
static void WdeDialogSetDefineDialogInfo ( WdeDefineObjectInfo *, HWND );
static void WdeDialogGetDefineDialogInfo ( WdeDefineObjectInfo *, HWND );
static void WdeDialogSetDialogStyles     ( HWND, DialogStyle );
static void WdeDialogGetDialogStyles     ( HWND, DialogStyle *);
static void WdeDialogSetDialogEXStyles   ( HWND, uint_32 );
static void WdeDialogGetDialogEXStyles   ( HWND, uint_32 *);
static void WdeDialogSetDialogMemFlags   ( HWND, uint_16 );
static void WdeDialogGetDialogMemFlags   ( HWND, uint_16 *);
static void WdeDialogSetDialogFontInfo   ( HWND, WdeDialogObject *);
static void WdeDialogSetDialogPntInfo    ( HWND, int );
static void WdeFreeDialogObject          ( WdeDialogObject * );
static void WdeWriteDialogToInfo         ( WdeDialogObject * );
static BOOL WdeDialogModifyInfo          ( WdeDialogObject *, WdeInfoStruct *,
                                           void * );

/****************************************************************************/
/* static variables                                                         */
/****************************************************************************/
static FARPROC                  WdeDialogDispatch;
static FARPROC                  WdeDialogDefineProcInst;
static DLGPROC                  WdeDialogProcInst;
static DLGPROC                  WdeTestProcInst;
static HINSTANCE                WdeAppInst;
static WdeDialogBoxHeader       *WdeDefaultDialog;

static HFONT             WdeLastFont;

static DISPATCH_ITEM WdeDialogActions[] = {
    { MOVE               ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogMove             }
,   { DESTROY            ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogDestroy          }
,   { RESIZE             ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogResize           }
,   { DRAW               ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogDraw             }
,   { VALIDATE_ACTION    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogValidateAction   }
,   { GET_WINDOW_HANDLE  ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetWindowHandle  }
,   { CREATE_WINDOW      ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogCreateWindow     }
,   { DESTROY_WINDOW     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogDestroyWindow    }
,   { SHOW_WIN           ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogShowWindow       }
,   { RESIZE_INFO        ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetResizeInfo    }
,   { NOTIFY             ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogNotify           }
,   { PASTE              ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogPasteObject      }
,   { COPY               ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogCopyObject       }
,   { CUT                ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogCutObject        }
,   { GET_OBJECT_INFO    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetObjectInfo    }
,   { SET_OBJECT_INFO    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogSetObjectInfo    }
,   { GET_OBJECT_HELPINFO,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetObjectHelpInfo}
,   { ADD_SUBOBJECT      ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogAddSubObject     }
,   { FIND_SUBOBJECTS    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogFindSubObjects   }
,   { FIND_OBJECTS_PT    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogFindObjectsPt    }
,   { REMOVE_SUBOBJECT   ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogRemoveSubObject  }
,   { GET_SUBOBJ_LIST    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetSubObjectList }
,   { IDENTIFY           ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogIdentify         }
,   { DEFINE             ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogDefine           }
,   { SET_FONT           ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogSetFont          }
,   { GET_FONT           ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetFont          }
,   { GET_RESIZER        ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetResizer       }
,   { GET_NC_SIZE        ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetNCSize        }
,   { SAVE_OBJECT        ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogSaveObject       }
,   { ON_TOP             ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogOnTop            }
,   { TEST               ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogTest             }
,   { BECOME_FIRST_CHILD ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogFirstChild       }
,   { PUT_ME_FIRST       ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogPutChildFirst    }
,   { GET_RESIZE_INC     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetResizeInc     }
,   { GET_SCROLL_RECT    ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetScrollRect    }
,   { IS_MARK_VALID      ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogIsMarkValid      }
,   { RESTORE_OBJECT     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogRestore          }
,   { RESOLVE_SYMBOL     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogResolveSymbol    }
,   { RESOLVE_HELPSYMBOL ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogResolveHelpSymbol}
,   { MODIFY_INFO        ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogModifyInfo       }
,   { GET_NEXT_CHILD     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetNextChild     }
,   { SET_ORDER_MODE     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogSetOrderMode     }
,   { GET_ORDER_MODE     ,  (BOOL (*)(OBJPTR, void *, void *))WdeDialogGetOrderMode     }
};

#define MAX_ACTIONS      (sizeof(WdeDialogActions)/sizeof (DISPATCH_ITEM))

Bool WdeRemoveObject ( WdeResInfo *res_info, OBJPTR object )
{
    WdeResDlgItem *ditem;
    signed int     pos;

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

    pos = WdeFindObjectPosInDialogList ( res_info, object );
    if ( pos == -1 ) {
        return ( FALSE );
    }

    ditem = WdeFindDialogInResInfo ( res_info, pos );
    if ( !ditem ) {
        WdeWriteTrail("WdeRemoveObject: item not found!");
        return ( FALSE );
    }

    if ( !WdeRemoveDialogFromResInfo ( res_info, ditem, FALSE ) ) {
        WdeWriteTrail("WdeRemoveObject: remove failed!");
        return ( FALSE );
    }

    return ( TRUE );
}

void WdeDialogModified ( void *_obj )
{
    WdeDialogObject *obj = _obj;

    if ( obj && obj->dlg_item ) {
        obj->dlg_item->modified = TRUE;
    }
}

Bool WdePreserveDialogWithDBI ( void *_obj )
{
    WdeDialogObject *obj = _obj;
    void            *vp;

    vp = WdeDBIFromObject( obj );

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

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

    obj->dlg_item->dialog_info = vp;
    obj->dlg_item->object      = NULL;

    return ( TRUE );
}

WdeDialogBoxInfo *WdeDBIFromObject ( void *_obj )
{
    WdeDialogObject     *obj = _obj;
    WdeDialogBoxInfo    *info;
    LIST                *clist;
    LIST                *end;
    WdeDialogBoxControl *control;
    WdeOrderedEntry     *oentry;
    char                *symbol;
    char                *helpsymbol;

    Bool                is32bitEx;
    WdeDialogBoxHeader  *dh;

    info = (WdeDialogBoxInfo *) WdeMemAlloc ( sizeof(WdeDialogBoxInfo) );

    if ( !info ) {
        WdeWriteTrail("WdeDBIFromObject: WdeResInfo alloc failed!");
        return ( NULL );
    }

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

    info->dialog_header = WdeCopyDialogBoxHeader ( obj->dialog_info );

    if( !info->dialog_header ) {
        WdeWriteTrail("WdeDBIFromObject: CopyDBH failed!");
        WdeMemFree( info );
        return( NULL );
    }

    is32bitEx = FALSE;

    info->MemoryFlags                   = obj->mem_flags;
    info->dialog_header->symbol         = WdeStrDup( obj->symbol );
    info->dialog_header->helpsymbol     = WdeStrDup( obj->helpsymbol );
    info->control_list                  = NULL;

    end = NULL;

    WdeCleanOrderedList( &obj->ochildren );

    for( clist = obj->ochildren; clist; clist = ListNext(clist) ) {
        oentry = (WdeOrderedEntry  *) ListElement( clist );
        if ( !Forward ( oentry->obj, GET_OBJECT_INFO, &control, &symbol ) ) {
            WdeWriteTrail("WdeDBIFromObject: GET_OBJECT_INFO failed!");
            WdeFreeDialogBoxInfo ( info );
            return ( NULL );
        }
        /* JPK - do it again for the help symbol */
        if ( !Forward ( oentry->obj, GET_OBJECT_HELPINFO, &control, &helpsymbol ) ) {

⌨️ 快捷键说明

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