/****************************************************************************/ /* */ /* Microsoft Confidential */ /* */ /* Copyright (c) Microsoft Corp. 1987, 1990 */ /* All Rights Reserved */ /* */ /****************************************************************************/ /****************************** Module Header ******************************* * Module Name: globals.c * * Contains global data for the dialog box editor. * * History: * ****************************************************************************/ #include "dlgedit.h" #include "dlgextrn.h" /* Including this verifies they are synched.*/ #include "dlgfuncs.h" #include "dialogs.h" #include "dlghelp.h" HANDLE ghInst; /* Application instance handle. */ HMENU ghMenuMain; /* Main menu handle. */ PRESLINK gprlHead = NULL; /* Head of the linked list of resources.*/ CURRENTDLG gcd; /* Describes the current dialog. */ HPEN hpenDarkGray; /* A dark gray pen. */ HANDLE ghAccTable; /* The accelerator table handle. */ INT gMenuSelected = 0; /* Currently selected menu item. */ HBITMAP ghbmDragHandle = NULL; /* Handle for the drag handle bitmap. */ HBITMAP ghbmDragHandle2 = NULL; /* Handle for hollow drag handle bitmap.*/ HDC ghDCMem = NULL; /* Memory DC for drawing bitmaps. */ INT gCurTool = W_NOTHING; /* Currently selected tool. */ PWINDOWCLASSDESC gpwcdCurTool = NULL; /* Describes current tool. */ BOOL gfToolLocked = FALSE; /* TRUE if a tool is locked down. */ PCUSTLINK gpclHead = NULL; /* Head of custom control linked list. */ /* * When the dialog editor displays one of its own dialogs, this value * will contain the resource id of it. It is zero if there is not a * dialog up. */ INT gidCurrentDlg = 0; /* * Ordinal for the icon control to display in the dialog. It will be * initialized to one of the editor's own icons. */ ORDINAL gordIcon; /* * Bitmap handles for the up and down W_NOTHING (pointer) tool bitmaps. */ HBITMAP ghbmPointerToolUp = NULL; HBITMAP ghbmPointerToolDown = NULL; /*-- Initialized "Preferences" Data ------------------------------------*/ /* * Initialization data structure. This describes each profile entry * that is contained in the initialization file. */ INIENTRY gaie[] = { { L"fHexMode", &gfHexMode, FALSE, 0 }, { L"fTranslateMode",&gfTranslateMode, FALSE, 0 }, { L"fShowToolbox", &gfShowToolbox, TRUE, 0 }, { L"fUseNewKeywords",&gfUseNewKeywords, TRUE, 0 }, { L"cxGrid", &gcxGrid, DEFCXGRID, 0 }, { L"cyGrid", &gcyGrid, DEFCYGRID, 0 }, { L"xMargin", &gxMargin, DEFXMARGIN, 0 }, { L"yMargin", &gyMargin, DEFYMARGIN, 0 }, { L"xSpace", &gxSpace, DEFXSPACE, 0 }, { L"ySpace", &gySpace, DEFYSPACE, 0 }, { L"xMinPushSpace", &gxMinPushSpace, DEFXMINPUSHSPACE, 0 }, { L"xMaxPushSpace", &gxMaxPushSpace, DEFXMAXPUSHSPACE, 0 }, { L"yPushSpace", &gyPushSpace, DEFYPUSHSPACE, 0 }, { NULL, NULL, 0, 0 } }; BOOL gfHexMode; /* TRUE if in "hex" mode. */ BOOL gfTranslateMode; /* TRUE if in "translate" mode. */ BOOL gfShowToolbox; /* TRUE if Toolbox is to be shown. */ BOOL gfUseNewKeywords; /* FALSE to only use "CONTROL" keyword. */ INT gcxGrid; /* Current X grid. */ INT gcyGrid; /* Current Y grid. */ INT gxMargin; /* Top/bottom margin. */ INT gyMargin; /* Left/right margin. */ INT gxSpace; /* Horizontal control spacing. */ INT gySpace; /* Vertical control spacing. */ INT gxMinPushSpace; /* Minimum horizontal button spacing. */ INT gxMaxPushSpace; /* Maximum horizontal button spacing. */ INT gyPushSpace; /* Vertical button spacing. */ TCHAR szAppPos[] = L"AppPos"; /* App window's position keyname. */ TCHAR szTBPos[] = L"TBPos"; /* Toolbox window's position keyname. */ TCHAR szCustomDLL[] = L"CustomDLL";/* Section name for DLL cust. cntls. */ /*-- Sundry Handles.----------------------------------------------------*/ HWND hwndStatus = NULL; /* Status ribbon window handle. */ HWND ghwndToolbox = NULL; /* Toolbox window handle. */ HWND ghwndTestDlg = NULL; /* Handle of the Test Mode dialog. */ HWND ghwndMain = NULL; /* Main application window. */ HWND ghwndSubClient = NULL; /* The "fake" client area. */ HWND ghwndTrackOver = NULL; /* Window being tracked over. */ /*-- Some System constants.---------------------------------------------*/ INT gcxSysChar; /* Pixel width of system font char box. */ INT gcySysChar; /* Pixel height of system font char box.*/ INT gcyBorder; /* System height of a border. */ INT gcxPreDragMax; /* Max X mouse move during pre-drag. */ INT gcyPreDragMax; /* Max Y mouse move during pre-drag. */ INT gmsecPreDrag; /* The milliseconds that pre-drag lasts.*/ INT gcyPixelsPerInch; /* Vertical pixels/inch of system. */ INT gcyStatus; /* Saves height of the status window. */ /*-- Some state variables.----------------------------------------------*/ INT gState = STATE_NORMAL; /* Has the editor "state" or mode. */ BOOL gfResChged = FALSE; /* Tell if RES has changed */ BOOL gfIncChged = FALSE; /* Tell if include has changed */ BOOL gfDlgChanged = FALSE; /* TRUE if current dialog has changed. */ INT gcSelected = 0; /* Count of selected windows. */ BOOL gfTestMode = FALSE; /* TRUE if in "test" mode. */ BOOL gfDisabled = FALSE; /* TRUE if editing is disabled for now. */ BOOL gfEditingDlg = FALSE; /* TRUE means a dlg is picked to edit. */ BOOL gfDlgSelected = FALSE; /* TRUE if the dialog has the selection.*/ /* * Contains the window rectangle, in window units, for the "client" * area for the currently chosen dialog being edited. This rectangle * is relative to the dialog box window. The xLeft and yBottom fields * contain the offset from the window origin of the dialog box to the * origin of the "client" area. */ RECT grcDlgClient; /* * Contains a rectangle that surrounds all the existing controls. This * is used during tracking of the dialog to limit the minimum size that * the dialog can be sized to. */ RECT grcMinDialog; /* * Contains the offset from the origin of the currently selected * control to the mouse pointer. This is updated when a control * is clicked on and is used for dragging calculations. */ POINT gptCursorOffset; /* * Contains the rectangle that surrounds the selected control(s). This * rectangle is only valid if there are selected controls. */ RECT grcSelected; /* * Contains the rectangle that surrounds the control(s) that are being * copied. This is also used during a clipboard paste operation. In * that case, it contains the rectangle that surrounds the control(s) * as they are defined in the res image. */ RECT grcCopy; /* * These contain the current location of the tracking rectangle when * dragging a control. The values for grcTrackDU are in Dialog Units * (DU's) and the values in grcTrackWin are in window units. The * grcTrackWin values will only be valid if gfTrackRectShown is TRUE; */ RECT grcTrackDU; /* Track rect in dialog units. */ RECT grcTrackWin; /* Track rect in window units. */ BOOL gfTrackRectShown = FALSE; /* TRUE if track rect is visible. */ HDC ghDCTrack; /* Clip DC used when tracking. */ /* * Contains the current drag handle that is being tracked. This will * be one of the DRAG_* constants. */ INT gHandleHit = DRAG_CENTER; /* * Contains the overhang that is allowed during the current tracking * operation. This is used by various routines during dragging so * that limiting the tracking to the dialog boundaries works properly. * In actuality, this is only non-zero when a combo box control is * being drapped or dragged. It will be the height of the listbox * portion of the combo. This is how combos are allowed to extend * below the bottom of the dialog. */ INT gnOverHang; /* Maximum overhang during the drag. */ /* * This pointer is either NULL, or else it points to a dialog resource. * It is used when copying dialogs/controls, either with the Duplicate * command or pasting from the clipboard. */ PRES gpResCopy; /* Copy of dialog/controls. */ /*-- CTYPE linked lists.------------------------------------------------*/ NPCTYPE npcHead = NULL; /* Linked List of controls. */ INT cWindows = 0; /* Number of Controls in pctype list. */ /* * Pointer to the CTYPE structure for the currently selected control. * This will be NULL if there is no control selected. */ NPCTYPE gnpcSel = NULL; /*-- Cursors used by editor.--------------------------------------------*/ HCURSOR hcurArrow = NULL; /* Normal arrow cursor. */ HCURSOR hcurWait = NULL; /* User Wait cursor, Hourglass. */ HCURSOR hcurOutSel = NULL; /* Outline selection cursor. */ HCURSOR hcurMove = NULL; /* System "Move" cursor. */ HCURSOR hcurInsert = NULL; /* Insert cursor for Order/Group dialog.*/ HCURSOR hcurDropTool = NULL; /* Cursor for when dropping new ctrls. */ HCURSOR hcurSizeNESW = NULL; /* System sizing "NESW" cursor. */ HCURSOR hcurSizeNS = NULL; /* System sizing "NS" cursor. */ HCURSOR hcurSizeNWSE = NULL; /* System sizing "NWSE" cursor. */ HCURSOR hcurSizeWE = NULL; /* System sizing "WE" cursor. */ HBITMAP hbmTabStop = NULL; /* Bitmap for showing WS_TABSTOP style. */ HBITMAP hbmTabStopSel = NULL; /* Selected version of the above. */ /*-- Window Class Strings.----------------------------------------------*/ TCHAR szMainClass[] = L"DlgEdit";/* Application window class. */ TCHAR szDragClass[] = L"Drag"; /* Class for drag handle windows. */ TCHAR szSubClientClass[] = L"SubClient"; /* Short client area window class. */ TCHAR szToolboxClass[] = L"Toolbox"; /* Toolbox window class. */ TCHAR szToolBtnClass[] = L"ToolBtn"; /* Toolbox button window class. */ TCHAR szCustomClass[] = L"DlgCustom"; /* Our custom emulator class. */ /*-- Miscellaneous variables.-------------------------------------------*/ UINT fmtDlg; /* The Dialog Clipboard format */ TCHAR szEmpty[] = L""; /* An empty string. */ HHOOK ghhkMsgFilter; /* Hook handle for message filter func. */ /*-- Buffers.-----------------------------------------------------------*/ TCHAR szFullResFile[CCHMAXPATH]; /* Full resource file name */ LPTSTR pszResFile; /* Points to resource file name */ TCHAR szFullIncludeFile[CCHMAXPATH];/* Full include file name */ LPTSTR pszIncludeFile; /* Points to include file name */ TCHAR gszHelpFile[CCHMAXPATH]; /* Path to the help file. */ /* * Write buffer and index into it. This buffer is used by several * sections to write out the different files. Note that only one * file can be written out at a time using these globals. */ TCHAR gachWriteBuffer[CCHFILEBUFFER];/* Buffer for written file data. */ INT cbWritePos; /* Pointer into gachWriteBuffer. */ /*-- Include Data.------------------------------------------------------*/ NPLABEL plInclude = NULL; /* Pointer to Include data */ NPLABEL plDelInclude = NULL; /* Pointer to deleted includes */ /* * Describes each window class. Indexed by the W_ defined constants. * The define CCONTROLS needs to be updated if controls are added or * removed from this array. Note that CCONTROLS does NOT count the * W_DIALOG type as a control, however. */ WINDOWCLASSDESC awcd[] = { /* * W_TEXT */ { W_TEXT, WS_CHILD | WS_GROUP | WS_VISIBLE | SS_LEFT, WS_DISABLED, 0, 0, 20, 8, IC_STATIC, NULL, FALSE, FALSE, TRUE, TRUE, TRUE, DID_TEXTSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_TEXTSTYLES, IDS_DEFTXTTEXT, NULL, NULL, IDBM_CTTEXT, NULL, NULL, IDBM_TUTEXT, NULL, IDBM_TDTEXT, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_EDIT */ { W_EDIT, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL, WS_DISABLED, 0, 0, 32, 12, IC_EDIT, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_EDITSTYLES, (WNDPROC)EditStylesDlgProc, HELPID_EDITSTYLES, IDS_NULL, NULL, NULL, IDBM_CTEDIT, NULL, NULL, IDBM_TUEDIT, NULL, IDBM_TDEDIT, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_GROUPBOX */ { W_GROUPBOX, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, WS_DISABLED, 0, 0, 48, 40, IC_BUTTON, NULL, FALSE, FALSE, TRUE, TRUE, FALSE, DID_GROUPBOXSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_GROUPBOXSTYLES, IDS_DEFTXTGROUP, NULL, NULL, IDBM_CTGROUP, NULL, NULL, IDBM_TUGROUP, NULL, IDBM_TDGROUP, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_PUSHBUTTON */ { W_PUSHBUTTON, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, WS_DISABLED, 0, 0, 40, 14, IC_BUTTON, NULL, FALSE, FALSE, TRUE, TRUE, TRUE, DID_PUSHBUTTONSTYLES, (WNDPROC)PushButtonStylesDlgProc, HELPID_PUSHBUTTONSTYLES, IDS_DEFTXTPUSHBUTTON, NULL, NULL, IDBM_CTPUSH, NULL, NULL, IDBM_TUPUSH, NULL, IDBM_TDPUSH, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_CHECKBOX */ { W_CHECKBOX, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | WS_TABSTOP, WS_DISABLED, 0, 0, 40, 10, IC_BUTTON, NULL, FALSE, FALSE, TRUE, TRUE, TRUE, DID_CHECKBOXSTYLES, (WNDPROC)CheckBoxStylesDlgProc, HELPID_CHECKBOXSTYLES, IDS_DEFTXTCHECKBOX, NULL, NULL, IDBM_CTCHECK, NULL, NULL, IDBM_TUCHECK, NULL, IDBM_TDCHECK, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_RADIOBUTTON */ { W_RADIOBUTTON, WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, WS_DISABLED, 0, 0, 39, 10, IC_BUTTON, NULL, FALSE, FALSE, TRUE, TRUE, TRUE, DID_RADIOBUTTONSTYLES, (WNDPROC)RadioButtonStylesDlgProc, HELPID_RADIOBUTTONSTYLES, IDS_DEFTXTRADIOBUTTON, NULL, NULL, IDBM_CTRADIO, NULL, NULL, IDBM_TURADIO, NULL, IDBM_TDRADIO, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_COMBOBOX */ { W_COMBOBOX, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN | CBS_SORT, WS_DISABLED | CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE | CBS_HASSTRINGS, CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE | CBS_HASSTRINGS, 0, 48, 35, IC_COMBOBOX, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_COMBOBOXSTYLES, (WNDPROC)ComboBoxStylesDlgProc, HELPID_COMBOBOXSTYLES, IDS_NULL, NULL, NULL, IDBM_CTCOMBO, NULL, NULL, IDBM_TUCOMBO, NULL, IDBM_TDCOMBO, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_LISTBOX */ { W_LISTBOX, WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_TABSTOP, WS_DISABLED | LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS | LBS_NODATA, LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE | LBS_HASSTRINGS | LBS_NODATA, 0, 48, 40, IC_LISTBOX, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_LISTBOXSTYLES, (WNDPROC)ListBoxStylesDlgProc, HELPID_LISTBOXSTYLES, IDS_NULL, NULL, NULL, IDBM_CTLIST, NULL, NULL, IDBM_TULIST, NULL, IDBM_TDLIST, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_HORZSCROLL */ { W_HORZSCROLL, WS_CHILD | WS_VISIBLE | SBS_HORZ, WS_DISABLED, 0, 0, 48, 0, IC_SCROLLBAR, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_HORZSCROLLSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_HORZSCROLLSTYLES, IDS_NULL, NULL, NULL, IDBM_CTHSCROL, NULL, NULL, IDBM_TUHSCROL, NULL, IDBM_TDHSCROL, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_VERTSCROLL */ { W_VERTSCROLL, WS_CHILD | WS_VISIBLE | SBS_VERT, WS_DISABLED, 0, 0, 0, 40, IC_SCROLLBAR, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_VERTSCROLLSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_VERTSCROLLSTYLES, IDS_NULL, NULL, NULL, IDBM_CTVSCROL, NULL, NULL, IDBM_TUVSCROL, NULL, IDBM_TDVSCROL, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_FRAME */ { W_FRAME, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME, WS_DISABLED, 0, 0, 20, 16, IC_STATIC, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_FRAMESTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_FRAMESTYLES, IDS_NULL, NULL, NULL, IDBM_CTFRAME, NULL, NULL, IDBM_TUFRAME, NULL, IDBM_TDFRAME, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_RECT */ { W_RECT, WS_CHILD | WS_VISIBLE | SS_BLACKRECT, WS_DISABLED, 0, 0, 20, 16, IC_STATIC, NULL, FALSE, FALSE, FALSE, TRUE, FALSE, DID_RECTSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_RECTSTYLES, IDS_NULL, NULL, NULL, IDBM_CTRECT, NULL, NULL, IDBM_TURECT, NULL, IDBM_TDRECT, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_ICON */ { W_ICON, WS_CHILD | WS_VISIBLE | SS_ICON, WS_DISABLED, 0, 0, 0, 0, IC_STATIC, NULL, FALSE, FALSE, TRUE, FALSE, FALSE, DID_ICONSTYLES, (WNDPROC)GenericStylesDlgProc, HELPID_ICONSTYLES, IDS_NULL, NULL, NULL, IDBM_CTICON, NULL, NULL, IDBM_TUICON, NULL, IDBM_TDICON, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_CUSTOM * * For Custom controls, we do not allow our emulator control * to be created with any other styles than the default ones * (WS_CHILD and WS_VISIBLE), but whatever styles the user * specifies are written out to the .res and .dlg files, * of course. */ { W_CUSTOM, WS_CHILD | WS_VISIBLE, WS_DISABLED, 0, 0, 40, 14, IC_CUSTOM, NULL, TRUE, FALSE, TRUE, TRUE, FALSE, DID_CUSTOMSTYLES, (WNDPROC)CustomStylesDlgProc, HELPID_CUSTOMSTYLES, IDS_NULL, NULL, NULL, IDBM_CTCUSTOM, NULL, NULL, IDBM_TUCUSTOM, NULL, IDBM_TDCUSTOM, NULL, NULL, 0, NULL, NULL, NULL, 0 }, /* * W_DIALOG */ { W_DIALOG, WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | WS_POPUP | DS_SETFONT, WS_DISABLED | DS_SYSMODAL | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD, DS_SYSMODAL, 0, 160, 100, IC_DIALOG, NULL, FALSE, FALSE, TRUE, TRUE, FALSE, DID_DIALOGSTYLES, (WNDPROC)DialogStylesDlgProc, HELPID_DIALOGSTYLES, IDS_DEFTXTDIALOG, NULL, NULL, 0, NULL, NULL, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, NULL, 0 } }; /* * This table maps the BS_* style of a button control into its * appropriate W_* type that is used internally by the editor. * This table assumes that any value used to index into it is * masked by BS_ALL. */ INT rgmpiClsBtnType[] = { W_PUSHBUTTON, /* BS_PUSHBUTTON */ W_PUSHBUTTON, /* BS_DEFPUSHBUTTON */ W_CHECKBOX, /* BS_CHECKBOX */ W_CHECKBOX, /* BS_AUTOCHECKBOX */ W_RADIOBUTTON, /* BS_RADIOBUTTON */ W_CHECKBOX, /* BS_3STATE */ W_CHECKBOX, /* BS_AUTO3STATE */ W_GROUPBOX, /* BS_GROUPBOX */ W_PUSHBUTTON, /* BS_USERBUTTON */ W_RADIOBUTTON, /* BS_AUTORADIOBUTTON */ W_PUSHBUTTON, /* BS_PUSHBOX */ W_PUSHBUTTON /* BS_OWNERDRAW */ }; /* Map low word of Static Control Style to static type. */ /* * This table maps the SS_* style of a static control into its * appropriate W_* type that is used internally by the editor. * This table assumes that any value used to index into it is * masked by SS_ALL. */ INT rgmpiClsStcType[] = { W_TEXT, /* SS_LEFT */ W_TEXT, /* SS_CENTER */ W_TEXT, /* SS_RIGHT */ W_ICON, /* SS_ICON */ W_RECT, /* SS_BLACKRECT */ W_RECT, /* SS_GREYRECT */ W_RECT, /* SS_WHITERECT */ W_FRAME, /* SS_BLACKFRAME */ W_FRAME, /* SS_GRAYFRAME */ W_FRAME, /* SS_WHITEFRAME */ W_TEXT, /* SS_USERITEM */ W_TEXT, /* SS_SIMPLE */ W_TEXT /* SS_LEFTNOWORDWRAP */ }; /* * Following are the tables with the predefined RC keywords for each * class (IC_*). These tables describe each keyword other than the * generic "CONTROL" keyword that is possible to use within a dialog * template. The style describes the minimum bits that must be set * to define the keyword. The mask allows a style to be specified * that must have certain bits OFF for a match to occur. The default * styles flag specifies style bits that are implicitly turned on * when this keyword is specified in the dialog template in the .DLG * file. These bits are checked against the style flag of the control * that we are trying to match and if any of these default bits are * NOT set for that control, we need to specify them in the .DLG file * with a "NOT" in front of them to explicitly turn them off. * * The "Has Text" flag is set to FALSE in those cases where the syntax * for the keyword does NOT include a text field, like "ICON" and * "LISTBOX". */ /* * Array of the predefined RC keywords for Button styles. */ static RCKEYWORD arckwdButton[] = { /* * RADIOBUTTON */ { BS_RADIOBUTTON, BS_ALL, WS_CHILD | WS_VISIBLE, IDS_KEYRADIOBUTTON, TRUE }, /* * CHECKBOX */ { BS_CHECKBOX, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYCHECKBOX, TRUE }, /* * DEFPUSHBUTTON */ { BS_DEFPUSHBUTTON, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYDEFPUSHBUTTON, TRUE }, /* * PUSHBUTTON */ { BS_PUSHBUTTON, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYPUSHBUTTON, TRUE }, /* * GROUPBOX */ { BS_GROUPBOX, BS_ALL, WS_CHILD | WS_VISIBLE, IDS_KEYGROUPBOX, TRUE }, /* * AUTO3STATE */ { BS_AUTO3STATE, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYAUTO3STATE, TRUE }, /* * AUTOCHECKBOX */ { BS_AUTOCHECKBOX, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYAUTOCHECKBOX, TRUE }, /* * AUTORADIOBUTTON */ { BS_AUTORADIOBUTTON, BS_ALL, WS_CHILD | WS_VISIBLE, IDS_KEYAUTORADIOBUTTON, TRUE }, /* * STATE3 */ { BS_3STATE, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYSTATE3, TRUE }, /* * USERBUTTON */ { BS_USERBUTTON, BS_ALL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, IDS_KEYUSERBUTTON, TRUE } }; /* * Array of the predefined RC keywords for Edit control styles. */ static RCKEYWORD arckwdEdit[] = { /* * EDIT */ { 0L, 0L, WS_CHILD | WS_VISIBLE | ES_LEFT | WS_TABSTOP | WS_BORDER, IDS_KEYEDITTEXT, FALSE } }; /* * Array of the predefined RC keywords for Static styles. */ static RCKEYWORD arckwdStatic[] = { /* * ICON */ { SS_ICON, SS_ALL, WS_CHILD | WS_VISIBLE, IDS_KEYICON, TRUE }, /* * RTEXT */ { SS_RIGHT, SS_ALL, WS_CHILD | WS_GROUP | WS_VISIBLE, IDS_KEYRTEXT, TRUE }, /* * CTEXT */ { SS_CENTER, SS_ALL, WS_CHILD | WS_GROUP | WS_VISIBLE, IDS_KEYCTEXT, TRUE }, /* * LTEXT */ { SS_LEFT, SS_ALL, WS_CHILD | WS_GROUP | WS_VISIBLE, IDS_KEYLTEXT, TRUE } }; /* * Array of the predefined RC keywords for ListBox styles. */ static RCKEYWORD arckwdLB[] = { /* * LISTBOX */ { 0L, 0L, WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY, IDS_KEYLISTBOX, FALSE } }; /* * Array of the predefined RC keywords for ComboBox styles. */ static RCKEYWORD arckwdComboBox[] = { /* * COMBOBOX */ { 0L, 0L, WS_CHILD | WS_VISIBLE, IDS_KEYCOMBOBOX, FALSE } }; /* * Array of the predefined RC keywords for ScrollBar styles. */ static RCKEYWORD arckwdScrollBar[] = { /* * SCROLLBAR */ { 0L, 0L, WS_CHILD | WS_VISIBLE, IDS_KEYSCROLLBAR, FALSE } }; /* * Following are the Class Styles structures. These tables define the * styles for the different window classes (IC_*). The first element * is the style flag, followed by an optional style mask. If the style * mask is zero, the style flag becomes the mask also. This is often good * enough, but there are cases where the style depends on certain bits * being off, as well as certain bits being on, to definitively identify * a certain style. An extreme example of this is the BS_PUSHBUTTON * style, which is actually zero (no bits are on). The mask for this * style had to be set to include all four of the lower bits, or all * buttons would be incorrectly figured to have the BS_PUSHBUTTON style. * With the proper mask, only styles that have all four lower bits * OFF will be considered to have the BS_PUSHBUTTON style. */ /* * Button styles. */ static CLASSSTYLE acsButton[] = { {BS_PUSHBUTTON, BS_ALL, DID_BS_PUSHBUTTON }, {BS_DEFPUSHBUTTON, BS_ALL, DID_BS_DEFPUSHBUTTON }, {BS_CHECKBOX, BS_ALL, 0 }, {BS_AUTOCHECKBOX, BS_ALL, 0 }, {BS_RADIOBUTTON, BS_ALL, 0 }, {BS_3STATE, BS_ALL, 0 }, {BS_AUTO3STATE, BS_ALL, 0 }, {BS_GROUPBOX, BS_ALL, 0 }, {BS_USERBUTTON, BS_ALL, 0 }, {BS_AUTORADIOBUTTON, BS_ALL, 0 }, {BS_PUSHBOX, BS_ALL, 0 }, {BS_OWNERDRAW, BS_ALL, DID_BS_OWNERDRAW }, {BS_LEFTTEXT, 0, DID_BS_LEFTTEXT } }; /* * Scroll bar styles. */ static CLASSSTYLE acsSB[] = { {SBS_HORZ, SBS_ALL, 0 }, {SBS_VERT, SBS_ALL, 0 }, {SBS_TOPALIGN, 0, 0 }, {SBS_LEFTALIGN, 0, 0 }, {SBS_BOTTOMALIGN, 0, 0 }, {SBS_RIGHTALIGN, 0, 0 }, {SBS_SIZEBOXTOPLEFTALIGN, 0, 0 }, {SBS_SIZEBOXBOTTOMRIGHTALIGN, 0, 0 }, {SBS_SIZEBOX, 0, 0 } }; /* * Entry field styles. */ static CLASSSTYLE acsEdit[] = { {ES_LEFT, ES_ALIGN, DID_ES_LEFT }, {ES_CENTER, ES_ALIGN, DID_ES_CENTER }, {ES_RIGHT, ES_ALIGN, DID_ES_RIGHT }, {ES_MULTILINE, 0, DID_ES_MULTILINE }, {ES_UPPERCASE, 0, DID_ES_UPPERCASE }, {ES_LOWERCASE, 0, DID_ES_LOWERCASE }, {ES_PASSWORD, 0, DID_ES_PASSWORD }, {ES_AUTOVSCROLL, 0, DID_ES_AUTOVSCROLL }, {ES_AUTOHSCROLL, 0, DID_ES_AUTOHSCROLL }, {ES_NOHIDESEL, 0, DID_ES_NOHIDESEL }, {ES_OEMCONVERT, 0, DID_ES_OEMCONVERT }, {ES_READONLY, 0, DID_ES_READONLY }, {ES_WANTRETURN, 0, DID_ES_WANTRETURN } }; /* * Static styles. */ static CLASSSTYLE acsStatic[] = { {SS_LEFT, SS_ALL, DID_SS_LEFT }, {SS_CENTER, SS_ALL, DID_SS_CENTER }, {SS_RIGHT, SS_ALL, DID_SS_RIGHT }, {SS_ICON, SS_ALL, 0 }, {SS_BLACKRECT, SS_ALL, DID_SS_BLACKRECT }, {SS_GRAYRECT, SS_ALL, DID_SS_GRAYRECT }, {SS_WHITERECT, SS_ALL, DID_SS_WHITERECT }, {SS_BLACKFRAME, SS_ALL, DID_SS_BLACKFRAME }, {SS_GRAYFRAME, SS_ALL, DID_SS_GRAYFRAME }, {SS_WHITEFRAME, SS_ALL, DID_SS_WHITEFRAME }, {SS_USERITEM, SS_ALL, DID_SS_USERITEM }, {SS_SIMPLE, SS_ALL, DID_SS_SIMPLE }, {SS_LEFTNOWORDWRAP, SS_ALL, DID_SS_LEFTNOWORDWRAP }, {SS_NOPREFIX, 0, DID_SS_NOPREFIX } }; /* * List box styles. */ static CLASSSTYLE acsLB[] = { {LBS_NOTIFY, 0, DID_LBS_NOTIFY }, {LBS_SORT, 0, DID_LBS_SORT }, {LBS_NOREDRAW, 0, DID_LBS_NOREDRAW }, {LBS_MULTIPLESEL, 0, DID_LBS_MULTIPLESEL }, {LBS_OWNERDRAWFIXED, 0, DID_LBS_OWNERDRAWFIXED }, {LBS_OWNERDRAWVARIABLE, 0, DID_LBS_OWNERDRAWVARIABLE }, {LBS_HASSTRINGS, 0, DID_LBS_HASSTRINGS }, {LBS_USETABSTOPS, 0, DID_LBS_USETABSTOPS }, {LBS_NOINTEGRALHEIGHT, 0, DID_LBS_NOINTEGRALHEIGHT }, {LBS_MULTICOLUMN, 0, DID_LBS_MULTICOLUMN }, {LBS_WANTKEYBOARDINPUT, 0, DID_LBS_WANTKEYBOARDINPUT }, {LBS_EXTENDEDSEL, 0, DID_LBS_EXTENDEDSEL }, {LBS_DISABLENOSCROLL, 0, DID_LBS_DISABLENOSCROLL }, {LBS_NODATA, 0, DID_LBS_NODATA } }; /* * Combo Box styles. */ static CLASSSTYLE acsComboBox[] = { {CBS_SIMPLE, CBS_ALL, DID_CBS_SIMPLE }, {CBS_DROPDOWN, CBS_ALL, DID_CBS_DROPDOWN }, {CBS_DROPDOWNLIST, CBS_ALL, DID_CBS_DROPDOWNLIST }, {CBS_OWNERDRAWFIXED, 0, DID_CBS_OWNERDRAWFIXED }, {CBS_OWNERDRAWVARIABLE, 0, DID_CBS_OWNERDRAWVARIABLE }, {CBS_AUTOHSCROLL, 0, DID_CBS_AUTOHSCROLL }, {CBS_OEMCONVERT, 0, DID_CBS_OEMCONVERT }, {CBS_SORT, 0, DID_CBS_SORT }, {CBS_HASSTRINGS, 0, DID_CBS_HASSTRINGS }, {CBS_NOINTEGRALHEIGHT, 0, DID_CBS_NOINTEGRALHEIGHT }, {CBS_DISABLENOSCROLL, 0, DID_CBS_DISABLENOSCROLL } }; /* * Dialog styles. */ static CLASSSTYLE acsDialog[] = { {DS_ABSALIGN, 0, DID_DS_ABSALIGN }, {DS_SYSMODAL, 0, DID_DS_SYSMODAL }, {DS_LOCALEDIT, 0, DID_DS_LOCALEDIT }, {DS_SETFONT, 0, 0 }, {DS_MODALFRAME, 0, DID_DS_MODALFRAME }, {DS_NOIDLEMSG, 0, DID_DS_NOIDLEMSG }, /* * The following two styles are the same bits as WS_GROUP and * WS_TABSTOP, so they must be in this table and there has * to be special case code for writing the appropriate string * out when writing dialog styles. */ {WS_MINIMIZEBOX, 0, DID_WS_MINIMIZEBOX }, {WS_MAXIMIZEBOX, 0, DID_WS_MAXIMIZEBOX } }; /* * Window styles. */ static CLASSSTYLE acsWindow[] = { {WS_POPUP, 0, DID_WS_POPUP }, {WS_CHILD, 0, DID_WS_CHILD }, {WS_MINIMIZE, 0, DID_WS_MINIMIZE }, {WS_VISIBLE, 0, DID_WS_VISIBLE }, {WS_DISABLED, 0, DID_WS_DISABLED }, {WS_CLIPSIBLINGS, 0, DID_WS_CLIPSIBLINGS }, {WS_CLIPCHILDREN, 0, DID_WS_CLIPCHILDREN }, {WS_MAXIMIZE, 0, DID_WS_MAXIMIZE }, {WS_CAPTION, WS_CAPTIONALL, DID_WS_CAPTION }, {WS_BORDER, WS_CAPTIONALL, DID_WS_BORDER }, {WS_DLGFRAME, WS_CAPTIONALL, DID_WS_DLGFRAME }, {WS_VSCROLL, 0, DID_WS_VSCROLL }, {WS_HSCROLL, 0, DID_WS_HSCROLL }, {WS_SYSMENU, 0, DID_WS_SYSMENU }, {WS_THICKFRAME, 0, DID_WS_THICKFRAME }, {WS_GROUP, 0, DID_WS_GROUP }, {WS_TABSTOP, 0, DID_WS_TABSTOP } }; /* * Resource Flags styles. */ static CLASSSTYLE acsResFlags[] = { {MMF_MOVEABLE, 0, DID_MMF_MOVEABLE }, {MMF_PURE, 0, DID_MMF_PURE }, {MMF_PRELOAD, 0, DID_MMF_PRELOAD }, {MMF_DISCARDABLE, 0, DID_MMF_DISCARDABLE } }; /* * Extended Styles. */ static CLASSSTYLE acsExStyle[] = { {WS_EX_DLGMODALFRAME, 0, 0 }, {0x0002 /*WS_EX_DRAGOBJECT*/, 0, 0 }, {WS_EX_NOPARENTNOTIFY, 0, 0 }, {WS_EX_TOPMOST, 0, 0 }, {WS_EX_ACCEPTFILES, 0, 0 }, {WS_EX_TRANSPARENT, 0, 0 } }; /* * Array of class style description structures. These are indexed by * the IC_* constants and describe each class. They contain pointers * to both the class styles array and the predefined keywords array * for each class. * * The last few entries are included in the table for convenience, * and are used to describe things like the various window (WS_*, WS_EX_*) * and resource memory flags (MMF_*) styles, although they don't exactly * map to an IC_* style that a control will have. */ CLASSSTYLEDESC acsd[] = { /* * IC_BUTTON */ { IDS_WCBUTTON, acsButton, sizeof(acsButton) / sizeof(CLASSSTYLE), IDS_IC_BUTTON, arckwdButton, sizeof(arckwdButton) / sizeof(RCKEYWORD), ORDID_BUTTONCLASS }, /* * IC_SCROLLBAR */ { IDS_WCSCROLLBAR, acsSB, sizeof(acsSB) / sizeof(CLASSSTYLE), IDS_IC_SCROLLBAR, arckwdScrollBar, sizeof(arckwdScrollBar) / sizeof(RCKEYWORD), ORDID_SCROLLBARCLASS }, /* * IC_EDIT */ { IDS_WCEDIT, acsEdit, sizeof(acsEdit) / sizeof(CLASSSTYLE), IDS_IC_EDIT, arckwdEdit, sizeof(arckwdEdit) / sizeof(RCKEYWORD), ORDID_EDITCLASS }, /* * IC_STATIC */ { IDS_WCSTATIC, acsStatic, sizeof(acsStatic) / sizeof(CLASSSTYLE), IDS_IC_STATIC, arckwdStatic, sizeof(arckwdStatic) / sizeof(RCKEYWORD), ORDID_STATICCLASS }, /* * IC_LISTBOX */ { IDS_WCLISTBOX, acsLB, sizeof(acsLB) / sizeof(CLASSSTYLE), IDS_IC_LISTBOX, arckwdLB, sizeof(arckwdLB) / sizeof(RCKEYWORD), ORDID_LISTBOXCLASS }, /* * IC_COMBOBOX */ { IDS_WCCOMBOBOX, acsComboBox, sizeof(acsComboBox) / sizeof(CLASSSTYLE), IDS_IC_COMBOBOX, arckwdComboBox, sizeof(arckwdComboBox) / sizeof(RCKEYWORD), ORDID_COMBOBOXCLASS }, /* * IC_CUSTOM */ { IDS_WCCUSTOM, NULL, 0, 0, NULL, 0, 0 }, /* * IC_DIALOG */ { IDS_WCDIALOG, acsDialog, sizeof(acsDialog) / sizeof(CLASSSTYLE), IDS_IC_DIALOG, NULL, 0, 0 }, /* * IC_WINDOW */ { IDS_NULL, acsWindow, sizeof(acsWindow) / sizeof(CLASSSTYLE), IDS_IC_WINDOW, NULL, 0, 0 }, /* * IC_RESFLAGS */ { IDS_NULL, acsResFlags, sizeof(acsResFlags) / sizeof(CLASSSTYLE), 0, NULL, 0, 0 }, /* * IC_EXSTYLE */ { IDS_NULL, acsExStyle, sizeof(acsExStyle) / sizeof(CLASSSTYLE), IDS_IC_EXSTYLE, NULL, 0, 0 } }; /* * Message box messages, for the Message() function. */ MESSAGEDATA gamdMessages[] = { { IDS_DELETEDIALOG, MB_YESNO | MB_ICONEXCLAMATION }, { IDS_OUTOFMEMORY, MB_OK | MB_ICONHAND }, { IDS_CANTCREATE, MB_OK | MB_ICONEXCLAMATION }, { IDS_SYMNOCHANGE, MB_OK | MB_ICONEXCLAMATION }, { IDS_IDSYMMISMATCH, MB_OK | MB_ICONEXCLAMATION }, { IDS_CLOSING, MB_YESNOCANCEL | MB_ICONEXCLAMATION }, { IDS_BADRESFILE, MB_OK | MB_ICONEXCLAMATION }, { IDS_INCLCLOSING, MB_YESNOCANCEL | MB_ICONEXCLAMATION }, { IDS_SYMEXISTS, MB_OK | MB_ICONEXCLAMATION }, { IDS_BADSYMBOLID, MB_OK | MB_ICONEXCLAMATION }, { IDS_LABELDUPID, MB_OK | MB_ICONEXCLAMATION }, { IDS_SELECTFIRST, MB_OK | MB_ICONEXCLAMATION }, { IDS_CTRLDUPID, MB_OK | MB_ICONEXCLAMATION }, { IDS_BADCUSTDLL, MB_OK | MB_ICONEXCLAMATION }, { IDS_NOCLIP, MB_OK | MB_ICONEXCLAMATION }, { IDS_INTERNAL, MB_OK | MB_ICONEXCLAMATION }, { IDS_NOMOUSE, MB_OK | MB_ICONEXCLAMATION }, { IDS_NOINIT, MB_OK | MB_ICONEXCLAMATION }, { IDS_GTZERO, MB_OK | MB_ICONEXCLAMATION }, { IDS_ICONNAMEHASBLANKS,MB_OK | MB_ICONEXCLAMATION }, { IDS_IDUPIDS, MB_OK | MB_ICONEXCLAMATION }, { IDS_CREATECTRLERROR, MB_OK | MB_ICONEXCLAMATION }, { IDS_CANTOPENRES, MB_OK | MB_ICONEXCLAMATION }, { IDS_CONFIRMDISCARD, MB_YESNO | MB_ICONEXCLAMATION }, { IDS_SYMNOTFOUND, MB_OK | MB_ICONEXCLAMATION }, { IDS_NOCLASS, MB_OK | MB_ICONEXCLAMATION }, { IDS_POSITIVENUM, MB_OK | MB_ICONEXCLAMATION }, { IDS_MEMERROR, MB_OK | MB_ICONHAND }, { IDS_DLGNAMEHASBLANKS, MB_OK | MB_ICONEXCLAMATION }, { IDS_NODLGNAME, MB_OK | MB_ICONEXCLAMATION }, { IDS_CANTINITDLL, MB_OK | MB_ICONEXCLAMATION }, { IDS_NOICONNAME, MB_OK | MB_ICONEXCLAMATION }, { IDS_RESTOREDIALOG, MB_YESNO | MB_ICONEXCLAMATION }, { IDS_ZEROPOINTSIZE, MB_OK | MB_ICONEXCLAMATION }, { IDS_MINGTMAXSPACE, MB_OK | MB_ICONEXCLAMATION }, { IDS_CUSTCNTLINUSE, MB_OK | MB_ICONEXCLAMATION }, { IDS_CUSTALREADYLOADED,MB_OK | MB_ICONEXCLAMATION }, { IDS_CANTLOADDLL, MB_OK | MB_ICONEXCLAMATION }, { IDS_DLLBADEXPORTS, MB_OK | MB_ICONEXCLAMATION }, { IDS_DLLBADCOUNT, MB_OK | MB_ICONEXCLAMATION } }; /* * Table that maps menu items to help context id's for them. */ HELPMAP gahmapMenu[] = { {MENU_NEWRES, HELPID_FILE_NEWRES }, {MENU_OPEN, HELPID_FILE_OPEN }, {MENU_SAVE, HELPID_FILE_SAVE }, {MENU_SAVEAS, HELPID_FILE_SAVEAS }, {MENU_SETINCLUDE, HELPID_FILE_SETINCLUDE }, {MENU_NEWCUST, HELPID_FILE_NEWCUST }, {MENU_OPENCUST, HELPID_FILE_OPENCUST }, {MENU_REMCUST, HELPID_FILE_REMCUST }, {MENU_EXIT, HELPID_FILE_EXIT }, {MENU_RESTOREDIALOG, HELPID_EDIT_RESTOREDIALOG }, {MENU_CUT, HELPID_EDIT_CUT }, {MENU_COPY, HELPID_EDIT_COPY }, {MENU_PASTE, HELPID_EDIT_PASTE }, {MENU_DELETE, HELPID_EDIT_DELETE }, {MENU_DUPLICATE, HELPID_EDIT_DUPLICATE }, {MENU_SYMBOLS, HELPID_EDIT_SYMBOLS }, {MENU_STYLES, HELPID_EDIT_STYLES }, {MENU_SIZETOTEXT, HELPID_EDIT_SIZETOTEXT }, {MENU_NEWDIALOG, HELPID_EDIT_NEWDIALOG }, {MENU_SELECTDIALOG, HELPID_EDIT_SELECTDIALOG }, {MENU_ALIGNLEFT, HELPID_ARRANGE_ALIGNLEFT }, {MENU_ALIGNVERT, HELPID_ARRANGE_ALIGNVERT }, {MENU_ALIGNRIGHT, HELPID_ARRANGE_ALIGNRIGHT }, {MENU_ALIGNTOP, HELPID_ARRANGE_ALIGNTOP }, {MENU_ALIGNHORZ, HELPID_ARRANGE_ALIGNHORZ }, {MENU_ALIGNBOTTOM, HELPID_ARRANGE_ALIGNBOTTOM }, {MENU_SPACEHORZ, HELPID_ARRANGE_SPACEHORZ }, {MENU_SPACEVERT, HELPID_ARRANGE_SPACEVERT }, {MENU_ARRSIZEWIDTH, HELPID_ARRANGE_ARRSIZEWIDTH }, {MENU_ARRSIZEHEIGHT, HELPID_ARRANGE_ARRSIZEHEIGHT }, {MENU_ARRPUSHBOTTOM, HELPID_ARRANGE_ARRPUSHBOTTOM }, {MENU_ARRPUSHRIGHT, HELPID_ARRANGE_ARRPUSHRIGHT }, {MENU_ORDERGROUP, HELPID_ARRANGE_ORDERGROUP }, {MENU_ARRSETTINGS, HELPID_ARRANGE_ARRSETTINGS }, {MENU_TESTMODE, HELPID_OPTIONS_TESTMODE }, {MENU_HEXMODE, HELPID_OPTIONS_HEXMODE }, {MENU_TRANSLATE, HELPID_OPTIONS_TRANSLATE }, {MENU_USENEWKEYWORDS, HELPID_OPTIONS_USENEWKEYWORDS }, {MENU_SHOWTOOLBOX, HELPID_OPTIONS_SHOWTOOLBOX }, {MENU_CONTENTS, HELPID_HELP_CONTENTS }, {MENU_SEARCH, HELPID_HELP_SEARCH }, // No help for the About menu command. {0, 0 } }; /* * Table that maps dialog ids to help context id's for them. */ HELPMAP gahmapDialog[] = { // No help for the About dialog. {DID_ARRSETTINGS, HELPID_ARRSETTINGS }, {DID_CHECKBOXSTYLES, HELPID_CHECKBOXSTYLES }, {DID_COMBOBOXSTYLES, HELPID_COMBOBOXSTYLES }, {DID_CUSTOMSTYLES, HELPID_CUSTOMSTYLES }, {DID_DIALOGSTYLES, HELPID_DIALOGSTYLES }, {DID_EDITSTYLES, HELPID_EDITSTYLES }, {DID_FRAMESTYLES, HELPID_FRAMESTYLES }, {DID_GROUPBOXSTYLES, HELPID_GROUPBOXSTYLES }, {DID_ORDERGROUP, HELPID_ORDERGROUP }, {DID_HORZSCROLLSTYLES, HELPID_HORZSCROLLSTYLES }, {DID_ICONSTYLES, HELPID_ICONSTYLES }, {DID_LISTBOXSTYLES, HELPID_LISTBOXSTYLES }, {DID_NEWCUST, HELPID_NEWCUST }, {DID_PUSHBUTTONSTYLES, HELPID_PUSHBUTTONSTYLES }, {DID_RADIOBUTTONSTYLES, HELPID_RADIOBUTTONSTYLES }, {DID_RECTSTYLES, HELPID_RECTSTYLES }, {DID_REMCUST, HELPID_REMCUST }, {DID_SELECTDIALOG, HELPID_SELECTDIALOG }, {DID_SYMBOLS, HELPID_SYMBOLS }, {DID_TEXTSTYLES, HELPID_TEXTSTYLES }, {DID_VERTSCROLLSTYLES, HELPID_VERTSCROLLSTYLES }, {DID_COMMONFILEOPENINCLUDE, HELPID_COMMONFILEOPENINCLUDE }, {DID_COMMONFILEOPENRES, HELPID_COMMONFILEOPENRES }, {DID_COMMONFILESAVEINCLUDE, HELPID_COMMONFILESAVEINCLUDE }, {DID_COMMONFILESAVERES, HELPID_COMMONFILESAVERES }, {DID_COMMONFILEOPENDLL, HELPID_COMMONFILEOPENDLL }, {DID_TOOLBOX, HELPID_TOOLBOX }, {DID_STATUS, HELPID_PROPERTIESBAR }, {0, 0 } }; /* * Language and Sub Language tables. */ static SUBLANGTABLE aslNeutral[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_DEFAULT, IDS_SUBLANG_DEFAULT, IDS_SL_DEFAULT } }; static SUBLANGTABLE aslChinese[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_CHINESE_SIMPLIFIED, IDS_SUBLANG_CHINESE_SIMPLIFIED, IDS_SL_CHINESE_SIMPLIFIED }, { SUBLANG_CHINESE_TRADITIONAL, IDS_SUBLANG_CHINESE_TRADITIONAL, IDS_SL_CHINESE_TRADITIONAL } }; static SUBLANGTABLE aslDutch[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_DUTCH, IDS_SUBLANG_DUTCH, IDS_SL_DUTCH }, { SUBLANG_DUTCH_BELGIAN,IDS_SUBLANG_DUTCH_BELGIAN, IDS_SL_DUTCH_BELGIAN} }; static SUBLANGTABLE aslEnglish[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_ENGLISH_US, IDS_SUBLANG_ENGLISH_US, IDS_SL_ENGLISH_US }, { SUBLANG_ENGLISH_UK, IDS_SUBLANG_ENGLISH_UK, IDS_SL_ENGLISH_UK }, { SUBLANG_ENGLISH_AUS, IDS_SUBLANG_ENGLISH_AUS, IDS_SL_ENGLISH_AUS }, { SUBLANG_ENGLISH_CAN, IDS_SUBLANG_ENGLISH_CAN, IDS_SL_ENGLISH_CAN } }; static SUBLANGTABLE aslFrench[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_FRENCH, IDS_SUBLANG_FRENCH, IDS_SL_FRENCH }, { SUBLANG_FRENCH_BELGIAN, IDS_SUBLANG_FRENCH_BELGIAN, IDS_SL_FRENCH_BELGIAN }, { SUBLANG_FRENCH_CANADIAN, IDS_SUBLANG_FRENCH_CANADIAN, IDS_SL_FRENCH_CANADIAN }, { SUBLANG_FRENCH_SWISS, IDS_SUBLANG_FRENCH_SWISS, IDS_SL_FRENCH_SWISS } }; static SUBLANGTABLE aslGerman[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_GERMAN, IDS_SUBLANG_GERMAN, IDS_SL_GERMAN }, { SUBLANG_GERMAN_SWISS, IDS_SUBLANG_GERMAN_SWISS, IDS_SL_GERMAN_SWISS } }; static SUBLANGTABLE aslItalian[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_ITALIAN, IDS_SUBLANG_ITALIAN, IDS_SL_ITALIAN }, { SUBLANG_ITALIAN_SWISS, IDS_SUBLANG_ITALIAN_SWISS, IDS_SL_ITALIAN_SWISS } }; static SUBLANGTABLE aslNorwegian[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_NORWEGIAN_BOKMAL, IDS_SUBLANG_NORWEGIAN_BOKMAL, IDS_SL_NORWEGIAN_BOKMAL }, { SUBLANG_NORWEGIAN_NYNORSK, IDS_SUBLANG_NORWEGIAN_NYNORSK, IDS_SL_NORWEGIAN_NYNORSK } }; static SUBLANGTABLE aslPortuguese[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_PORTUGUESE, IDS_SUBLANG_PORTUGUESE, IDS_SL_PORTUGUESE }, { SUBLANG_PORTUGUESE_BRAZILIAN, IDS_SUBLANG_PORTUGUESE_BRAZILIAN, IDS_SL_PORTUGUESE_BRAZILIAN } }; static SUBLANGTABLE aslSpanish[] = { { SUBLANG_NEUTRAL, IDS_SUBLANG_NEUTRAL, IDS_SL_NEUTRAL }, { SUBLANG_SPANISH, IDS_SUBLANG_SPANISH, IDS_SL_SPANISH }, { SUBLANG_SPANISH_MEXICAN, IDS_SUBLANG_SPANISH_MEXICAN, IDS_SL_SPANISH_MEXICAN }, { SUBLANG_SPANISH_MODERN, IDS_SUBLANG_SPANISH_MODERN, IDS_SL_SPANISH_MODERN } }; LANGTABLE gaLangTable[] = { { LANG_NEUTRAL, IDS_LANG_NEUTRAL, IDS_L_NEUTRAL, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_CHINESE, IDS_LANG_CHINESE, IDS_L_CHINESE, sizeof(aslChinese) / sizeof(SUBLANGTABLE), aslChinese }, { LANG_CZECH, IDS_LANG_CZECH, IDS_L_CZECH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_DANISH, IDS_LANG_DANISH, IDS_L_DANISH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_DUTCH, IDS_LANG_DUTCH, IDS_L_DUTCH, sizeof(aslDutch) / sizeof(SUBLANGTABLE), aslDutch }, { LANG_ENGLISH, IDS_LANG_ENGLISH, IDS_L_ENGLISH, sizeof(aslEnglish) / sizeof(SUBLANGTABLE), aslEnglish }, { LANG_FINNISH, IDS_LANG_FINNISH, IDS_L_FINNISH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_FRENCH, IDS_LANG_FRENCH, IDS_L_FRENCH, sizeof(aslFrench) / sizeof(SUBLANGTABLE), aslFrench }, { LANG_GERMAN, IDS_LANG_GERMAN, IDS_L_GERMAN, sizeof(aslGerman) / sizeof(SUBLANGTABLE), aslGerman }, { LANG_GREEK, IDS_LANG_GREEK, IDS_L_GREEK, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_HUNGARIAN, IDS_LANG_HUNGARIAN, IDS_L_HUNGARIAN, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_ICELANDIC, IDS_LANG_ICELANDIC, IDS_L_ICELANDIC, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_ITALIAN, IDS_LANG_ITALIAN, IDS_L_ITALIAN, sizeof(aslItalian) / sizeof(SUBLANGTABLE), aslItalian }, { LANG_JAPANESE, IDS_LANG_JAPANESE, IDS_L_JAPANESE, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_KOREAN, IDS_LANG_KOREAN, IDS_L_KOREAN, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_NORWEGIAN, IDS_LANG_NORWEGIAN, IDS_L_NORWEGIAN, sizeof(aslNorwegian) / sizeof(SUBLANGTABLE), aslNorwegian }, { LANG_POLISH, IDS_LANG_POLISH, IDS_L_POLISH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_PORTUGUESE, IDS_LANG_PORTUGUESE, IDS_L_PORTUGUESE, sizeof(aslPortuguese) / sizeof(SUBLANGTABLE), aslPortuguese }, { LANG_RUSSIAN, IDS_LANG_RUSSIAN, IDS_L_RUSSIAN, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_SLOVAK, IDS_LANG_SLOVAK, IDS_L_SLOVAK, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_SPANISH, IDS_LANG_SPANISH, IDS_L_SPANISH, sizeof(aslSpanish) / sizeof(SUBLANGTABLE), aslSpanish }, { LANG_SWEDISH, IDS_LANG_SWEDISH, IDS_L_SWEDISH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral }, { LANG_TURKISH, IDS_LANG_TURKISH, IDS_L_TURKISH, sizeof(aslNeutral) / sizeof(SUBLANGTABLE), aslNeutral } }; INT gcLanguages = sizeof(gaLangTable) / sizeof(LANGTABLE);