📄 wdesvdlg.c
字号:
/****************************************************************************
*
* 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 + -