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

📄 wdesvdlg.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************
*
*                            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 "wdeglbl.h"
#include "wdemem.h"
#include "wderesin.h"
#include "wdehash.h"
#include "wdeldres.h"
#include "wdesvres.h"
#include "wdesvdlg.h"
#include "wdesdup.h"
#include "wresall.h"
#include "wdecctl.h"
#include "wde_rc.h"
#include "wde_wres.h"
#include "wrutil.h"

/****************************************************************************/
/* macro definitions                                                        */
/****************************************************************************/
#define str(a)          # a
#define xstr(a)         str(a)
#define wpick(a,b, s)   { a##b, a##b, a##b, xstr(a)##xstr(b) , s }
#define opick(a,b)      { a##b, 0xf, 0x0, xstr(a)##xstr(b), ControlStyle }
#define lvs_pick(a,b)   { a##b, 0x3, 0x3, xstr(a)##xstr(b), ControlStyle }
#define jpick(a,b)      { a##b, 0x0f00, 0x0, xstr(a)##xstr(b), ControlStyle }
#define fpick(a,b)      { a##b, a##b, a##b, xstr(a)##xstr(b), ControlStyle }
#define sentinel        { 0, 0, 0, NULL, 0 }

/****************************************************************************/
/* type definitions                                                         */
/****************************************************************************/
typedef enum {
    WindowStyle         = 0x01,
    ControlStyle        = 0x02,
    BothStyle           = 0x03
} flag_style;

typedef struct flag_map {
    unsigned long       flag;
    unsigned long       check_mask;
    unsigned long       erase_mask;
    char                *text;
    flag_style          style;
} flag_map;

// Window Style mappings
flag_map WindowMap[] = {
    wpick(WS_,OVERLAPPEDWINDOW, BothStyle ),
    wpick(WS_,POPUPWINDOW, BothStyle ),
    wpick(WS_,CAPTION, BothStyle ),
//    wpick(WS_,OVERLAPPED, BothStyle ),
    wpick(WS_,POPUP, BothStyle ),
    wpick(WS_,CHILD, BothStyle ),
    wpick(WS_,CLIPSIBLINGS, BothStyle ),
    wpick(WS_,CLIPCHILDREN, BothStyle ),
    wpick(WS_,VISIBLE, BothStyle ),
    wpick(WS_,DISABLED, BothStyle ),
    wpick(WS_,MINIMIZE, BothStyle ),
    wpick(WS_,MAXIMIZE, BothStyle ),
    wpick(WS_,BORDER, BothStyle ),
    wpick(WS_,DLGFRAME, BothStyle ),
    wpick(WS_,VSCROLL, BothStyle ),
    wpick(WS_,HSCROLL, BothStyle ),
    wpick(WS_,SYSMENU, BothStyle ),
    wpick(WS_,THICKFRAME, BothStyle ),
    wpick(WS_,MINIMIZEBOX, WindowStyle ),
    wpick(WS_,MAXIMIZEBOX, WindowStyle ),
    wpick(WS_,GROUP, ControlStyle ),
    wpick(WS_,TABSTOP, ControlStyle ),
    sentinel
};

// Window Extended Style mappings
flag_map WindowEXMap[] = {
    wpick(WS_EX_,DLGMODALFRAME,  WindowStyle),
    wpick(WS_EX_,NOPARENTNOTIFY, WindowStyle),
    // wpick(WS_EX_,TOPMOST,        WindowStyle),   // in code
    wpick(WS_EX_,ACCEPTFILES,    WindowStyle),
    // wpick(WS_EX_,TRANSPARENT,    WindowStyle),   // TRANSPARENT == 1 somewhere
    wpick(WS_EX_,MDICHILD,       WindowStyle),
    // wpick(WS_EX_,TOOLWINDOW,     WindowStyle),   // in code
    // wpick(WS_EX_,WINDOWEDGE,     WindowStyle),   // in code
    // wpick(WS_EX_,CLIENTEDGE,     WindowStyle),   // in code
    wpick(WS_EX_,CONTEXTHELP,    WindowStyle),
    wpick(WS_EX_,RIGHT,          WindowStyle),
    // wpick(WS_EX_,LEFT,           WindowStyle),   // default
    wpick(WS_EX_,RTLREADING,     WindowStyle),
    // wpick(WS_EX_,LTRREADING,     WindowStyle),   // default
    wpick(WS_EX_,LEFTSCROLLBAR,  WindowStyle),
    // wpick(WS_EX_,RIGHTSCROLLBAR, WindowStyle),   // default
    wpick(WS_EX_,CONTROLPARENT,  WindowStyle),
    wpick(WS_EX_,STATICEDGE,     WindowStyle),
    wpick(WS_EX_,APPWINDOW,      WindowStyle),
    // wpick(WS_EX_,OVERLAPPEDWINDOW, WindowStyle),  // deal with these in
    // wpick(WS_EX_,PALETTEWINDOW,    WindowStyle),  // code
    sentinel
};

// Dialog Window mappings
flag_map DialogMap[] = {
    fpick(DS_,ABSALIGN),
    fpick(DS_,SYSMODAL),
    fpick(DS_,LOCALEDIT),
//    fpick(DS_,SETFONT),
    fpick(DS_,MODALFRAME),
    fpick(DS_,NOIDLEMSG),
    fpick(DS_,SETFOREGROUND),
    // fpick(DS_,3DLOOK),
    // fpick macro doesn't like the '3' and expands wrong
#ifdef __NT__
    { DS_3DLOOK, DS_3DLOOK, DS_3DLOOK, "DS_3DLOOK", ControlStyle },
    fpick(DS_,FIXEDSYS),
    fpick(DS_,NOFAILCREATE),
    fpick(DS_,CONTROL),
    fpick(DS_,CENTER),
    fpick(DS_,CENTERMOUSE),
    fpick(DS_,CONTEXTHELP),
#endif // __NT__
    sentinel
};

// Static Control mappings
flag_map StaticMap[] = {
    opick(SS_,LEFT),
    opick(SS_,CENTER),
    opick(SS_,RIGHT),
    opick(SS_,ICON),
    opick(SS_,BLACKRECT),
    opick(SS_,GRAYRECT),
    opick(SS_,WHITERECT),
    opick(SS_,BLACKFRAME),
    opick(SS_,GRAYFRAME),
    opick(SS_,WHITEFRAME),
    opick(SS_,SIMPLE),
    opick(SS_,LEFTNOWORDWRAP),
    fpick(SS_,NOPREFIX),
#ifdef __NT__
    opick(SS_,BITMAP),
    opick(SS_,ENHMETAFILE),
    opick(SS_,ETCHEDFRAME),
    opick(SS_,ETCHEDHORZ),
    opick(SS_,ETCHEDVERT),

    fpick(SS_,OWNERDRAW),
    fpick(SS_,CENTERIMAGE),
    fpick(SS_,NOTIFY),
    fpick(SS_,REALSIZEIMAGE),
    fpick(SS_,RIGHTJUST),
    fpick(SS_,SUNKEN),
#endif // __NT__

    sentinel
};

// Button Control mappings
flag_map ButtonMap[] = {
    opick(BS_,PUSHBUTTON),
    opick(BS_,DEFPUSHBUTTON),
    opick(BS_,CHECKBOX),
    opick(BS_,AUTOCHECKBOX),
    opick(BS_,RADIOBUTTON),
    opick(BS_3ST,ATE),
    opick(BS_,AUTO3STATE),
    opick(BS_,GROUPBOX),
    opick(BS_,USERBUTTON),
    opick(BS_,AUTORADIOBUTTON),
    opick(BS_,OWNERDRAW),
    fpick(BS_,LEFTTEXT),
    // fpick(BS_,TEXT),         // default if not BITMAP or ICON
#ifdef __NT__
    fpick(BS_,BITMAP),
    fpick(BS_,ICON),
    jpick(BS_,LEFT),
    jpick(BS_,RIGHT),
    jpick(BS_,CENTER),
    jpick(BS_,TOP),
    jpick(BS_,BOTTOM),
    jpick(BS_,VCENTER),
    fpick(BS_,PUSHLIKE),
    fpick(BS_,MULTILINE),
    fpick(BS_,NOTIFY),
    // fpick(BS_,RIGHTBUTTON),  // same as LEFTTEXT
#endif // __NT__
    sentinel
};

// Edit control mappings
flag_map EditMap[] = {
//    fpick(ES_,LEFT), // this has been special cased
    fpick(ES_,CENTER),
    fpick(ES_,RIGHT),
    fpick(ES_,MULTILINE),
    fpick(ES_,UPPERCASE),
    fpick(ES_,LOWERCASE),
    fpick(ES_,PASSWORD),
    fpick(ES_,AUTOVSCROLL),
    fpick(ES_,AUTOHSCROLL),
    fpick(ES_,NOHIDESEL),
    fpick(ES_,OEMCONVERT),
    fpick(ES_,READONLY),
    fpick(ES_,WANTRETURN),
#ifdef __NT__
    fpick(ES_,NUMBER),
#endif // __NT__
    sentinel
};

// Horizontal Scroll bar mappings
flag_map HScrollMap[] = {
    fpick(SBS_,HORZ),
    fpick(SBS_,TOPALIGN),
    fpick(SBS_,BOTTOMALIGN),
    sentinel
};

// Vertical Scroll bar mappings
flag_map VScrollMap[] = {
    fpick(SBS_,VERT),
    fpick(SBS_,LEFTALIGN),
    fpick(SBS_,RIGHTALIGN),
    sentinel
};

// Size Box mappings
flag_map SizeBoxMap[] = {
    fpick(SBS_,SIZEBOX),
    fpick(SBS_,SIZEBOXTOPLEFTALIGN),
    fpick(SBS_,SIZEBOXBOTTOMRIGHTALIGN),
#ifdef __NT__
    fpick(SBS_,SIZEGRIP),
#endif // __NT__
    sentinel
};

// Listbox mappings
flag_map ListBoxMap[] = {
    fpick(LBS_,STANDARD),
    fpick(LBS_,NOTIFY),
    fpick(LBS_,SORT),
    fpick(LBS_,NOREDRAW),
    fpick(LBS_,MULTIPLESEL),
    fpick(LBS_,OWNERDRAWFIXED),
    fpick(LBS_,OWNERDRAWVARIABLE),
    fpick(LBS_,HASSTRINGS),
    fpick(LBS_,USETABSTOPS),
    fpick(LBS_,NOINTEGRALHEIGHT),
    fpick(LBS_,MULTICOLUMN),
    fpick(LBS_,WANTKEYBOARDINPUT),
    fpick(LBS_,EXTENDEDSEL),
    fpick(LBS_,DISABLENOSCROLL),
#ifdef __NT__
    fpick(LBS_,NOSEL),
#endif // __NT__
    sentinel
};

// Combo box mappings
flag_map ComboBoxMap[] = {
    opick(CBS_,SIMPLE),
    opick(CBS_,DROPDOWN),
    opick(CBS_,DROPDOWNLIST),
    fpick(CBS_,OWNERDRAWFIXED),
    fpick(CBS_,OWNERDRAWVARIABLE),
    fpick(CBS_,AUTOHSCROLL),
    fpick(CBS_,OEMCONVERT),
    fpick(CBS_,SORT),
    fpick(CBS_,HASSTRINGS),
    fpick(CBS_,NOINTEGRALHEIGHT),
    fpick(CBS_,DISABLENOSCROLL),
#ifdef __NT__
    fpick(CBS_,UPPERCASE),
    fpick(CBS_,LOWERCASE),
#endif // __NT__
    sentinel
};

// Status Bar mappings
flag_map StatusBarMap[] = {
    fpick(SBT_,OWNERDRAW),
    fpick(SBT_,NOBORDERS),
    fpick(SBT_,POPOUT),
    // fpick(SBT_,RTLREADING),   // isn't there for NT
    sentinel
};

// Progress bar mappings
flag_map ProgressMap[] = {
    sentinel   // no special styles
};

// Track Bar mappings
flag_map TrackBarMap[] = {
    fpick(TBS_,AUTOTICKS),
    fpick(TBS_,VERT),
    // fpick(TBS_,HORZ),
    // fpick(TBS_,TOP),
    // fpick(TBS_,BOTTOM),
    // fpick(TBS_,LEFT),
    // fpick(TBS_,RIGHT),
    fpick(TBS_,BOTH),
    fpick(TBS_,NOTICKS),
    fpick(TBS_,ENABLESELRANGE),
    fpick(TBS_,FIXEDLENGTH),
    fpick(TBS_,NOTHUMB),
    sentinel
};

// Up Down Control mappings
flag_map UpDownMap[] = {
    fpick(UDS_,WRAP),
    fpick(UDS_,SETBUDDYINT),
    fpick(UDS_,ALIGNRIGHT),
    fpick(UDS_,ALIGNLEFT),
    fpick(UDS_,AUTOBUDDY),
    fpick(UDS_,ARROWKEYS),
    fpick(UDS_,HORZ),
    fpick(UDS_,NOTHOUSANDS),
    sentinel
};

// Header Control mappings
flag_map HeaderMap[] = {
    // fpick(HDS_,HORZ),
    fpick(HDS_,BUTTONS),
    // fpick(HDS_,HIDDEN),
    sentinel
};

// List View mappings
flag_map ListViewMap[] = {
    lvs_pick(LVS_,ICON),
    lvs_pick(LVS_,REPORT),
    lvs_pick(LVS_,SMALLICON),
    lvs_pick(LVS_,LIST),
    fpick(LVS_,SINGLESEL),
    fpick(LVS_,SHOWSELALWAYS),
    fpick(LVS_,SORTASCENDING),
    fpick(LVS_,SORTDESCENDING),
    fpick(LVS_,SHAREIMAGELISTS),
    fpick(LVS_,NOLABELWRAP),
    fpick(LVS_,AUTOARRANGE),
    fpick(LVS_,EDITLABELS),
    fpick(LVS_,NOSCROLL),
    // fpick(LVS_,ALIGNTOP),   // 0x0000 value
    fpick(LVS_,ALIGNLEFT),
    fpick(LVS_,OWNERDRAWFIXED),
    fpick(LVS_,NOCOLUMNHEADER),
    fpick(LVS_,NOSORTHEADER),
    sentinel
};

// Tree View mappings
flag_map TreeViewMap[] = {
    fpick(TVS_,HASBUTTONS),
    fpick(TVS_,HASLINES),
    fpick(TVS_,LINESATROOT),
    fpick(TVS_,EDITLABELS),
    fpick(TVS_,DISABLEDRAGDROP),
    fpick(TVS_,SHOWSELALWAYS),
    sentinel
};

// Tab Control mappings
flag_map TabControlMap[] = {
    fpick(TCS,_FORCEICONLEFT),       // 0x0010
    fpick(TCS,_FORCELABELLEFT),      // 0x0020
    // fpick(TCS,_TABS),                // 0x0000
    fpick(TCS,_BUTTONS),             // 0x0100
    // fpick(TCS,_SINGLELINE),          // 0x0000
    fpick(TCS,_MULTILINE),           // 0x0200
    // fpick(TCS,_RIGHTJUSTIFY),        // 0x0000
    fpick(TCS,_FIXEDWIDTH),          // 0x0400
    // fpick(TCS,_RAGGEDRIGHT),         // 0x0800
    fpick(TCS,_FOCUSONBUTTONDOWN),   // 0x1000
    fpick(TCS,_OWNERDRAWFIXED),      // 0x2000
    fpick(TCS,_TOOLTIPS),            // 0x4000
    fpick(TCS,_FOCUSNEVER),          // 0x8000
    sentinel
};

// Animate mappings
flag_map AnimateMap[] = {
    fpick(ACS_,CENTER),
    // fpick(ACS_,TRANSPARENT),  // #define TRANSPARENT 1 somewhere
    fpick(ACS_,AUTOPLAY),
    sentinel
};

// Hotkey mappings
flag_map HotkeyMap[] = {
    sentinel   // no special styles
};


/****************************************************************************/
/* static function prototypes                                               */
/****************************************************************************/
static Bool WdeWriteDlgControl  ( WdeResInfo *rinfo, WdeDialogBoxControl *control, Bool is32bitEx, FILE *fp, uint_16 );
static Bool WdeWriteDlgHeader   ( WdeResInfo *rinfo, WdeResDlgItem *ditem, FILE *fp );
static Bool WdeSaveDlgItemToRC  ( WdeResInfo *rinfo, WdeResDlgItem *ditem, FILE *fp );
static Bool WdeCreateItemDBI    ( WdeResInfo *rinfo, WdeResDlgItem *ditem );

Bool WdeSetMemFlagsText( uint_16 flags, char **text )
{
    int         tlen;

    if( text == NULL ) {
        return( FALSE );
    }

    tlen = 0;
    *text = NULL;

    if( flags & MEMFLAG_PRELOAD ) {

⌨️ 快捷键说明

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