|
|
1.1 ! root 1: ! 2: /******************************************************************************\ ! 3: * This is a part of the Microsoft Source Code Samples. ! 4: * Copyright (C) 1993 Microsoft Corporation. ! 5: * All rights reserved. ! 6: * This source code is only intended as a supplement to ! 7: * Microsoft Development Tools and/or WinHelp documentation. ! 8: * See these sources for detailed information regarding the ! 9: * Microsoft samples programs. ! 10: \******************************************************************************/ ! 11: ! 12: /****************************** Module Header ******************************* ! 13: * Module Name: dlgedit.h ! 14: * ! 15: * Main header file for the dialog box editor. ! 16: * ! 17: ****************************************************************************/ ! 18: ! 19: #define NOMINMAX ! 20: #include <windows.h> ! 21: #include <custcntl.h> ! 22: #include <setjmp.h> ! 23: #include "ids.h" ! 24: ! 25: ! 26: /* ! 27: * For unicode support. ! 28: */ ! 29: LPWSTR itoaw(INT value, LPWSTR string, INT radix); ! 30: INT awtoi(LPWSTR string); ! 31: ! 32: /* ! 33: * temporary define ! 34: */ ! 35: #define BS_PUSHBOX 0x0AL ! 36: ! 37: ! 38: #define STATICFN static ! 39: ! 40: #define WINDOWPROC LONG APIENTRY ! 41: #define DIALOGPROC BOOL APIENTRY ! 42: ! 43: typedef HWND FAR *LPHWND; ! 44: ! 45: /* ! 46: * Used to create a window of "DIALOG" class. ! 47: */ ! 48: #define DIALOGCLASS 0x8002 ! 49: ! 50: #define ORDID_RT_RESOURCE32 0x00 // Aligned res file dummy resource. ! 51: #define ORDID_RT_DIALOG 0x05 // Dialog resource type. ! 52: #define ORDID_RT_DLGINCLUDE 0x11 // Dialog include file resource type. ! 53: ! 54: ! 55: /* ! 56: * The ordinal for the name of the DLGINCLUDE resource. ! 57: */ ! 58: #define ORDID_DLGINCLUDE_NAME 1 ! 59: ! 60: ! 61: /* ! 62: * Macro to pack a point into a long value. ! 63: */ ! 64: #define POINT2LONG(pt, l) (l = MAKELONG(LOWORD((pt).x), LOWORD((pt).y))) ! 65: ! 66: ! 67: /* ! 68: * Macros to simplify working with menus. ! 69: */ ! 70: #define MyEnableMenuItem(hMenu, wIDEnableItem, fEnable) \ ! 71: EnableMenuItem((hMenu),(wIDEnableItem),(fEnable)?MF_ENABLED:MF_GRAYED) ! 72: ! 73: #define MyEnableMenuItemByPos(hMenu, wPosEnableItem, fEnable) \ ! 74: EnableMenuItem((hMenu),(wPosEnableItem),(fEnable)? \ ! 75: MF_ENABLED | MF_BYPOSITION:MF_GRAYED | MF_BYPOSITION) ! 76: ! 77: #define MyCheckMenuItem(hMenu, wIDCheckItem, fCheck) \ ! 78: CheckMenuItem((hMenu),(wIDCheckItem),(fCheck)?MF_CHECKED:MF_UNCHECKED) ! 79: ! 80: /* ! 81: * This macro returns TRUE if the given string is an ordinal. ! 82: */ ! 83: #define IsOrd(psz) (((PORDINAL)(psz))->wReserved == \ ! 84: (WORD)0xffff ? TRUE : FALSE) ! 85: ! 86: /* ! 87: * This macro returns the ordinal id in the specified name/ord field. ! 88: */ ! 89: #define OrdID(psz) (((PORDINAL)(psz))->wOrdID) ! 90: ! 91: ! 92: /* ! 93: * Integer property values. ! 94: */ ! 95: #define PROP_FNCHILD MAKEINTRESOURCE(0x3345) ! 96: ! 97: /* ! 98: * Macro to set/remove an NPCTYPE pointer into a control or dialog hwnd. ! 99: */ ! 100: #define SETPCINTOHWND(hwnd, npc) \ ! 101: SetWindowLong((hwnd), GWL_USERDATA, (DWORD)(npc)) ! 102: ! 103: #define UNSETPCINTOHWND(hwnd) (hwnd) ! 104: ! 105: /* ! 106: * Macro to extract an NPCTYPE from a control or dialog hwnd. ! 107: */ ! 108: #define PCFROMHWND(hwnd) ((NPCTYPE)GetWindowLong(hwnd, GWL_USERDATA)) ! 109: ! 110: /* ! 111: * Macros to set and retrieve the original window proc from ! 112: * a child window that has been subclassed by the editor. ! 113: */ ! 114: #define SETCHILDPROC(hwnd, lpfn) SetProp((hwnd), PROP_FNCHILD, (HANDLE)(lpfn)) ! 115: #define GETCHILDPROC(hwnd) ((WNDPROC)GetProp((hwnd), PROP_FNCHILD)) ! 116: #define UNSETCHILDPROC(hwnd) RemoveProp((hwnd), PROP_FNCHILD) ! 117: ! 118: ! 119: /* ! 120: * Used to indicate an "impossible" file position (offset). ! 121: */ ! 122: #define FPOS_MAX ((DWORD)(-1L)) ! 123: ! 124: ! 125: /* ! 126: * Special flag I place in the resource that goes into the clipboard ! 127: * that means that only the controls in the dialog template in the ! 128: * clipboard are to be copied, not the entire dialog. Because this ! 129: * value is placed into the cx field of the dialog template, it can ! 130: * only be a WORD in size. I use 0xffff (-1) because this would be ! 131: * an impossible value for the width of a dialog. ! 132: */ ! 133: #define CONTROLS_ONLY ((WORD)0xffff) ! 134: ! 135: ! 136: /* ! 137: * Some colors used in the editor. ! 138: */ ! 139: #define LIGHTGRAY RGB(192, 192, 192) ! 140: #define DARKGRAY RGB(128, 128, 128) ! 141: #define REPLACECOLOR1 RGB(255, 255, 255) // White ! 142: #define REPLACECOLOR2 RGB(0, 0, 0) // Black ! 143: ! 144: /* ! 145: * Maximum size of a file name plus path specification. ! 146: */ ! 147: #define CCHMAXPATH 260 ! 148: ! 149: /* ! 150: * Maximum length of a long hex value ("0x" + 8 digits) not counting the null. ! 151: */ ! 152: #define CCHHEXLONGMAX 10 ! 153: ! 154: /* ! 155: * Maximum number of characters in an ID not counting the null character. ! 156: * This allows room for "0xFFFF" or "-32768". ! 157: */ ! 158: #define CCHIDMAX 6 ! 159: ! 160: /* ! 161: * Width and height of a handle in pixels. ! 162: */ ! 163: #define CHANDLESIZE 6 ! 164: ! 165: /* ! 166: * Height in DU's of the edit field of a combobox. ! 167: */ ! 168: #define COMBOEDITHEIGHT 12 ! 169: ! 170: ! 171: /* ! 172: * Character constants. ! 173: */ ! 174: #define CHAR_NULL L'\0' ! 175: #define CHAR_TAB L'\t' ! 176: #define CHAR_NEWLINE L'\n' ! 177: #define CHAR_RETURN L'\r' ! 178: #define CHAR_BACKSLASH L'\\' ! 179: #define CHAR_COLON L':' ! 180: #define CHAR_DOT L'.' ! 181: #define CHAR_UNDERLINE L'_' ! 182: #define CHAR_ASTERISK L'*' ! 183: #define CHAR_SLASH L'/' ! 184: #define CHAR_POUND L'#' ! 185: #define CHAR_ORSYMBOL L'|' ! 186: #define CHAR_COMMA L',' ! 187: #define CHAR_SPACE L' ' ! 188: #define CHAR_DBLQUOTE L'"' ! 189: #define CHAR_MINUS L'-' ! 190: #define CHAR_PLUS L'+' ! 191: #define CHAR_0 L'0' ! 192: #define CHAR_A L'a' ! 193: #define CHAR_CAP_A L'A' ! 194: #define CHAR_F L'f' ! 195: #define CHAR_CAP_F L'F' ! 196: #define CHAR_X L'x' ! 197: #define CHAR_CAP_X L'X' ! 198: #define CHAR_Z L'z' ! 199: #define CHAR_CAP_Z L'Z' ! 200: #define CHAR_DOSEOF L'\x1a' ! 201: ! 202: ! 203: /* ! 204: * Defines for the different drag handles. ! 205: */ ! 206: #define DRAG_CENTER (-1) ! 207: #define DRAG_LEFTBOTTOM 0 ! 208: #define DRAG_BOTTOM 1 ! 209: #define DRAG_RIGHTBOTTOM 2 ! 210: #define DRAG_RIGHT 3 ! 211: #define DRAG_RIGHTTOP 4 ! 212: #define DRAG_TOP 5 ! 213: #define DRAG_LEFTTOP 6 ! 214: #define DRAG_LEFT 7 ! 215: ! 216: /* ! 217: * Count of lines to insert into listbox and combobox controls during ! 218: * test mode. ! 219: */ ! 220: #define CLBTESTLINES 25 ! 221: ! 222: #define CCHTEXTMAX 256 ! 223: #define CCHFILEBUFFER 256 ! 224: ! 225: /* ! 226: * Timer ID for the pre-drag timer. ! 227: */ ! 228: #define TID_PREDRAG 5 ! 229: ! 230: /* ! 231: * The id of the "unused" item. This is the id value for controls ! 232: * that the user creates where they do not care about the value ! 233: * of the id because it will not be referenced in their code. ! 234: */ ! 235: #define IDUNUSED (-1) ! 236: ! 237: /* ! 238: * Defines for the NextID() function. ! 239: */ ! 240: #define NEXTID_DIALOG 0 /* ID for a new dialog. */ ! 241: #define NEXTID_CONTROL 1 /* ID for a new control. */ ! 242: #define NEXTID_LABEL 2 /* ID for a new label. */ ! 243: ! 244: /* ! 245: * Flags for the GridizeRect function. They specify which points in ! 246: * the rectangle to apply gridding to. ! 247: */ ! 248: #define GRIDIZE_LEFT 0x0001 // Gridize the left edge. ! 249: #define GRIDIZE_BOTTOM 0x0002 // Gridize the bottom edge. ! 250: #define GRIDIZE_RIGHT 0x0004 // Gridize the right edge. ! 251: #define GRIDIZE_TOP 0x0008 // Gridize the top edge. ! 252: #define GRIDIZE_SAMESIZE 0x0010 // Don't change cx or cy. ! 253: ! 254: /* ! 255: * Default spacing constants. ! 256: */ ! 257: #define DEFCXGRID 1 // X grid. ! 258: #define DEFCYGRID 1 // Y grid. ! 259: #define DEFXMARGIN 6 // Top/bottom margin. ! 260: #define DEFYMARGIN 6 // Left/right margin. ! 261: #define DEFXMINPUSHSPACE 3 // Min. horizontal button spacing. ! 262: #define DEFXMAXPUSHSPACE 16 // Max. horizontal button spacing. ! 263: #define DEFYPUSHSPACE 3 // Vertical button spacing. ! 264: #define DEFXSPACE 6 // Horizontal control spacing. ! 265: #define DEFYSPACE 0 // Vertical control spacing. ! 266: ! 267: #define IC_UNKNOWN (-1) ! 268: #define IC_BUTTON 0 ! 269: #define IC_SCROLLBAR 1 ! 270: #define IC_EDIT 2 ! 271: #define IC_STATIC 3 ! 272: #define IC_LISTBOX 4 ! 273: #define IC_COMBOBOX 5 ! 274: #define IC_CUSTOM 6 ! 275: #define IC_DIALOG 7 ! 276: #define IC_WINDOW 8 ! 277: #define IC_RESFLAGS 9 ! 278: #define IC_EXSTYLE 10 ! 279: ! 280: #define MSG_DELETEDIALOG 0 ! 281: #define MSG_OUTOFMEMORY 1 ! 282: #define MSG_CANTCREATE 2 ! 283: #define MSG_SYMNOCHANGE 3 ! 284: #define MSG_IDSYMMISMATCH 4 ! 285: #define MSG_CLOSING 5 ! 286: #define MSG_BADRESFILE 6 ! 287: #define MSG_INCLCLOSING 7 ! 288: #define MSG_SYMEXISTS 8 ! 289: #define MSG_BADSYMBOLID 9 ! 290: #define MSG_LABELDUPID 10 ! 291: #define MSG_SELECTFIRST 11 ! 292: #define MSG_CTRLDUPID 12 ! 293: #define MSG_BADCUSTDLL 13 ! 294: #define MSG_NOCLIP 14 ! 295: #define MSG_INTERNAL 15 ! 296: #define MSG_NOMOUSE 16 ! 297: #define MSG_NOINIT 17 ! 298: #define MSG_GTZERO 18 ! 299: #define MSG_ICONNAMEHASBLANKS 19 ! 300: #define MSG_IDUPIDS 20 ! 301: #define MSG_CREATECTRLERROR 21 ! 302: #define MSG_CANTOPENRES 22 ! 303: #define MSG_CONFIRMDISCARD 23 ! 304: #define MSG_SYMNOTFOUND 24 ! 305: #define MSG_NOCLASS 25 ! 306: #define MSG_POSITIVENUM 26 ! 307: #define MSG_MEMERROR 27 ! 308: #define MSG_DLGNAMEHASBLANKS 28 ! 309: #define MSG_NODLGNAME 29 ! 310: #define MSG_CANTINITDLL 30 ! 311: #define MSG_NOICONNAME 31 ! 312: #define MSG_RESTOREDIALOG 32 ! 313: #define MSG_ZEROPOINTSIZE 33 ! 314: #define MSG_MINGTMAXSPACE 34 ! 315: #define MSG_CUSTCNTLINUSE 35 ! 316: #define MSG_CUSTALREADYLOADED 36 ! 317: #define MSG_CANTLOADDLL 37 ! 318: #define MSG_DLLBADEXPORTS 38 ! 319: #define MSG_DLLBADCOUNT 39 ! 320: ! 321: /* ! 322: * The following defines are used as masks in the styles arrays. ! 323: * They each define a set of bits, all of which have to be set ! 324: * properly for any of the individual styles to be considered ! 325: * to be a match. They are used for groups of styles that do ! 326: * not have a single bit set. In other words, these styles ! 327: * depend on having some bits OFF, as well as other bits ON. ! 328: */ ! 329: #define BS_ALL (BS_PUSHBUTTON | BS_DEFPUSHBUTTON | BS_CHECKBOX | \ ! 330: BS_AUTOCHECKBOX | BS_RADIOBUTTON | BS_3STATE | \ ! 331: BS_AUTO3STATE | BS_GROUPBOX | BS_USERBUTTON | \ ! 332: BS_AUTORADIOBUTTON | BS_PUSHBOX | BS_OWNERDRAW) ! 333: #define SS_ALL (SS_LEFT | SS_CENTER | SS_RIGHT | SS_ICON | \ ! 334: SS_BLACKRECT | SS_GRAYRECT | SS_WHITERECT | \ ! 335: SS_BLACKFRAME | SS_GRAYFRAME | SS_WHITEFRAME | \ ! 336: SS_USERITEM | SS_SIMPLE | SS_LEFTNOWORDWRAP) ! 337: #define CBS_ALL (CBS_SIMPLE | CBS_DROPDOWN | CBS_DROPDOWNLIST) ! 338: #define SBS_ALL (SBS_HORZ | SBS_VERT) ! 339: #define ES_ALIGN (ES_LEFT | ES_CENTER | ES_RIGHT) ! 340: #define WS_CAPTIONALL (WS_CAPTION | WS_BORDER | WS_DLGFRAME) ! 341: ! 342: /* ! 343: * Possible values for gState, which tells us about special modes ! 344: * (states) the editor is in. ! 345: */ ! 346: #define STATE_NORMAL 0 // Normal state. ! 347: #define STATE_DRAGGINGNEW 1 // Dragging a new control from the toolbox. ! 348: #define STATE_DRAGGING 2 // Dragging an existing control. ! 349: #define STATE_SELECTING 3 // Outline selecting is in progress. ! 350: #define STATE_PREDRAG 4 // During debounce period before dragging. ! 351: ! 352: /* ! 353: * Control type (W_*) constants. These are used as indexes into the ! 354: * awcd structure that describes each type of class. ! 355: */ ! 356: #define W_NOTHING (-1) ! 357: ! 358: #define W_TEXT 0 ! 359: #define W_EDIT 1 ! 360: #define W_GROUPBOX 2 ! 361: #define W_PUSHBUTTON 3 ! 362: #define W_CHECKBOX 4 ! 363: #define W_RADIOBUTTON 5 ! 364: #define W_COMBOBOX 6 ! 365: #define W_LISTBOX 7 ! 366: #define W_HORZSCROLL 8 ! 367: #define W_VERTSCROLL 9 ! 368: #define W_FRAME 10 ! 369: #define W_RECT 11 ! 370: #define W_ICON 12 ! 371: #define W_CUSTOM 13 ! 372: ! 373: #define W_DIALOG 14 ! 374: ! 375: /* ! 376: * Number of control types. Note that this does NOT count the ! 377: * "W_DIALOG" type, only actual controls like "W_CHECKBOX", etc. ! 378: */ ! 379: #define CCONTROLS 14 ! 380: ! 381: /* ! 382: * The following defines have the location (by zero based position) ! 383: * of popup menu items. If the menu arrangement is changed in the ! 384: * .RC file, these defines MUST be updated! ! 385: */ ! 386: #define MENUPOS_FILE 0 ! 387: #define MENUPOS_EDIT 1 ! 388: #define MENUPOS_ARRANGE 2 ! 389: #define MENUPOS_ARRANGEALIGN 0 ! 390: #define MENUPOS_ARRANGESPACE 1 ! 391: #define MENUPOS_ARRANGESIZE 2 ! 392: #define MENUPOS_ARRANGEPUSH 3 ! 393: ! 394: ! 395: /* ! 396: * Resource memory management flags. ! 397: */ ! 398: #define MMF_MOVEABLE 0x0010 ! 399: #define MMF_PURE 0x0020 ! 400: #define MMF_PRELOAD 0x0040 ! 401: #define MMF_DISCARDABLE 0x1000 ! 402: ! 403: #define DEFDLGMEMFLAGS (MMF_MOVEABLE | MMF_PURE | MMF_DISCARDABLE) ! 404: ! 405: /* ! 406: * Default location of a new dialog. ! 407: */ ! 408: #define DEFDIALOGXPOS 6 ! 409: #define DEFDIALOGYPOS 18 ! 410: ! 411: /* ! 412: * Default point size for a new dialog's font. The default face name ! 413: * is in the string IDS_DEFFONTNAME. ! 414: */ ! 415: #define DEFPOINTSIZE 8 ! 416: ! 417: ! 418: #define FILE_NOSHOW 0x0001 /* Save without prompting for name */ ! 419: #define FILE_INCLUDE 0x0002 /* Save/load include file */ ! 420: #define FILE_RESOURCE 0x0004 /* Save/load resource file */ ! 421: #define FILE_SAVEAS 0x0008 /* Save as (prompt for file name). */ ! 422: #define FILE_DLL 0x0010 /* A custom control DLL file. */ ! 423: ! 424: ! 425: /* ! 426: * Special case ordinal id values for the predefined control classes. ! 427: */ ! 428: #define ORDID_BUTTONCLASS 0x80 ! 429: #define ORDID_EDITCLASS 0x81 ! 430: #define ORDID_STATICCLASS 0x82 ! 431: #define ORDID_LISTBOXCLASS 0x83 ! 432: #define ORDID_SCROLLBARCLASS 0x84 ! 433: #define ORDID_COMBOBOXCLASS 0x85 ! 434: ! 435: /* ! 436: * This structure is used to link resources. ! 437: */ ! 438: typedef struct tagRESLINK { ! 439: struct tagRESLINK *prlNext; /* Next in list. */ ! 440: BOOL fDlgResource; /* TRUE if this is a dialog resource. */ ! 441: INT cbRes; /* Size of the resource. */ ! 442: HANDLE hRes; /* Handle to global memory with the res.*/ ! 443: LPTSTR pszName; /* Name/ord of the resource (if dialog).*/ ! 444: WORD wLanguage; /* Language identifier (if dialog). */ ! 445: } RESLINK, *PRESLINK; ! 446: ! 447: /* ! 448: * Describes a window class. ! 449: * ! 450: * The flStyles field is the default styles that this control type will have ! 451: * when first created. The flStylesBad field is the styles that can cause ! 452: * problems when manipulating the control in work mode, such as *_OWNERDRAW ! 453: * and so forth. Controls with this style can be created with the editor ! 454: * and will be saved as such in the .DLG file, but the actual control created ! 455: * in work mode will not have any of these styles. ! 456: */ ! 457: typedef struct { ! 458: INT iType; /* Control type index, one of the W_ constants. */ ! 459: DWORD flStyles; /* Default control styles for this window class.*/ ! 460: DWORD flStylesBad; /* Styles NOT to use when creating this control.*/ ! 461: DWORD flStylesTestBad; /* Styles NOT to use in Test mode. */ ! 462: DWORD flExtStyle; /* Default extended styles. */ ! 463: INT cxDefault; /* Default x size for this control. */ ! 464: INT cyDefault; /* Default y size for this control. */ ! 465: INT iClass; /* Index to the IC_ class for this window class.*/ ! 466: LPTSTR pszClass; /* Class name (for custom controls). */ ! 467: UINT fEmulated:1; /* TRUE if this is an emulated custom control. */ ! 468: UINT fUnicodeDLL:1; /* TRUE if the DLL functions are UNICODE. */ ! 469: UINT fHasText:1; /* TRUE if this control type can have text. */ ! 470: UINT fSizeable:1; /* TRUE if the control can be sized. */ ! 471: UINT fSizeToText:1; /* TRUE if the control can be sized to its text.*/ ! 472: INT idStylesDialog; /* Styles dialog id for this window class. */ ! 473: WNDPROC pfnStylesDlgProc; /* Styles dialog procedure. */ ! 474: INT HelpContext; /* Help context ID for the styles dialog. */ ! 475: UINT idsTextDefault; /* String id of default text. */ ! 476: LPTSTR pszTextDefault; /* Default text for a new control of this type. */ ! 477: WNDPROC pfnOldWndProc; /* Saves the old window proc when subclassing. */ ! 478: INT idbmCtrlType; /* ID of the bitmap res. for this control type. */ ! 479: HBITMAP hbmCtrlType; /* Handle of the bitmap for this control type. */ ! 480: HBITMAP hbmCtrlTypeSel; /* The selected version of the above. */ ! 481: INT idbmToolBtnUp; /* ID of "up" bmp res. for the Toolbox button. */ ! 482: HBITMAP hbmToolBtnUp; /* hbm of "up" bitmap for the Toolbox button. */ ! 483: INT idbmToolBtnDown; /* ID of "down" bmp res. for the Toolbox button.*/ ! 484: HBITMAP hbmToolBtnDown; /* hbm of "down" bitmap for the Toolbox button. */ ! 485: HANDLE hmod; /* Custom control DLL module handle. */ ! 486: INT cStyleFlags; /* Count of custom control style flags. */ ! 487: LPCCSTYLEFLAG aStyleFlags; /* Ptr to custom control style flag table. */ ! 488: PROC lpfnStyle; /* Custom control Style function. */ ! 489: PROC lpfnSizeToText; /* Custom control SizeToText function. */ ! 490: DWORD flCtrlTypeMask; /* Mask for custom control type styles. */ ! 491: } WINDOWCLASSDESC; ! 492: typedef WINDOWCLASSDESC *PWINDOWCLASSDESC; ! 493: ! 494: typedef struct tagCTYPE { ! 495: struct tagCTYPE *npcNext; /* Next CTYPE in linked list. */ ! 496: PWINDOWCLASSDESC pwcd; /* Points to the window class desc. struct. */ ! 497: HWND hwnd; /* Handle of control window. */ ! 498: HWND hwndDrag; /* Handle of the drag window for this ctrl. */ ! 499: DWORD flStyle; /* Control style. */ ! 500: DWORD flExtStyle; /* Control extended style. */ ! 501: INT id; /* Control window id. */ ! 502: LPTSTR text; /* Text for control window. */ ! 503: RECT rc; /* Location and size of the control. */ ! 504: UINT fSelected:1; /* TRUE if the control is selected. */ ! 505: UINT fGroupEnd:1; /* TRUE if ctrl is the last one in a group. */ ! 506: } CTYPE; ! 507: typedef CTYPE *NPCTYPE; ! 508: ! 509: typedef struct tagLABEL { ! 510: struct tagLABEL *npNext; /* pointer to next in the list */ ! 511: LPTSTR pszLabel; /* Name of the symbol */ ! 512: INT id; /* ID value for this label */ ! 513: INT idOrig; /* Original ID value for this label */ ! 514: DWORD fpos; /* File pointer to "#define" in include file*/ ! 515: INT nValueOffset; /* Offset to id value start from fpos */ ! 516: } LABEL; ! 517: typedef LABEL *NPLABEL; ! 518: ! 519: /* ! 520: * Structure that is used to link together a list of custom controls. ! 521: * Each link points to an associated WINDOWCLASSDESC structure that ! 522: * defines the custom control type in detail. ! 523: */ ! 524: typedef struct tagCUSTLINK { ! 525: struct tagCUSTLINK *pclNext;/* Next CUSTLINK in linked list. */ ! 526: LPTSTR pszFileName; /* Full path to DLL file (NULL if emulated).*/ ! 527: LPTSTR pszDesc; /* Short, descriptive text for the control. */ ! 528: PWINDOWCLASSDESC pwcd; /* Points to the window class desc. struct. */ ! 529: } CUSTLINK, *PCUSTLINK; ! 530: ! 531: typedef struct { ! 532: UINT ids; /* String id for the message text. */ ! 533: UINT fMessageBox; /* Flags for the MessageBox function. */ ! 534: } MESSAGEDATA; ! 535: ! 536: /* ! 537: * Class Style structure. Specifies the style bits that describe ! 538: * each style, along with a mask that specifies the bits to compare ! 539: * when looking for this style. The mask is necessary when more than ! 540: * one bit specifies a style. For example, look at the BS_* styles, ! 541: * which currently use the low 3 bits of the style flag to specify ! 542: * eight different styles. The idControl field is the checkbox or ! 543: * radio button control id in the styles dialogs that corresponds to ! 544: * this particular style, or zero if it is not settable by the user. ! 545: */ ! 546: typedef struct { ! 547: DWORD flStyle; /* Style bits that identify this style. */ ! 548: DWORD flStyleMask; /* Mask with the relevant bits. */ ! 549: INT idControl; /* ID of the control in the styles dlg. */ ! 550: } CLASSSTYLE, *PCLASSSTYLE; ! 551: ! 552: /* ! 553: * RC Keyword structure. This describes a predefined RC keyword, like ! 554: * "RADIOBUTTON" and "LISTBOX". ! 555: * ! 556: * rckwd, prckwd ! 557: */ ! 558: typedef struct { ! 559: DWORD flStyle; /* Style that identifies this keyword. */ ! 560: DWORD flStyleMask; /* Mask with the relevant bits. */ ! 561: DWORD flStyleDefault; /* Other style bits implicitly defined. */ ! 562: UINT idsKeyword; /* The RC keyword. */ ! 563: BOOL fHasText; /* TRUE if this keywd has a text field. */ ! 564: } RCKEYWORD, *PRCKEYWORD; ! 565: ! 566: /* ! 567: * Class style description structure. These contain information on each ! 568: * of the IC_* constants. ! 569: * ! 570: * csd, pcsd ! 571: */ ! 572: typedef struct { ! 573: UINT idsClass; /* Class string for this class. */ ! 574: PCLASSSTYLE pacs; /* Pointer to class styles array. */ ! 575: INT cClassStyles; /* Count of class styles. */ ! 576: UINT idsStylesStart; /* Starting index to style strings. */ ! 577: PRCKEYWORD parckwd; /* Pointer to predefined RC keywords. */ ! 578: INT cKeywords; /* Count of predefined RC keywords. */ ! 579: WORD idOrd; /* Predefined ordinal id for this class. */ ! 580: } CLASSSTYLEDESC; ! 581: ! 582: /* ! 583: * One single entry for an environment setting saved in the ! 584: * profile file. Used by ReadEnv and WriteEnv. ! 585: */ ! 586: typedef struct _INIENTRY { ! 587: LPTSTR pszKeyName; ! 588: PINT pnVar; ! 589: INT nDefault; ! 590: INT nSave; ! 591: } INIENTRY; ! 592: ! 593: /* ! 594: * This structure defines additional information on the dialog being ! 595: * edited that only pertains to dialogs, not controls. This information ! 596: * is therefore in a separate structure rather than the CTYPE structure. ! 597: * Any dialog specific information that can be changed using the Dialog ! 598: * Styles dialog must be contained in this structure. ! 599: */ ! 600: typedef struct { ! 601: WORD fResFlags; /* Dialog resource memory flags. */ ! 602: WORD wLanguage; /* Language identifier for the dialog. */ ! 603: LPTSTR pszClass; /* The dialog's class (or NULL). */ ! 604: LPTSTR pszMenu; /* The dialog's menu (or NULL). */ ! 605: DWORD DataVersion; /* Data Version data for this dialog. */ ! 606: DWORD Version; /* Version data for this dialog. */ ! 607: DWORD Characteristics; /* Characteristics data for this dialog.*/ ! 608: INT nPointSize; /* Point size of the dialog's font. */ ! 609: TCHAR szFontName[LF_FACESIZE]; /* Face name of the dialog's font. */ ! 610: } DIALOGINFO, *PDIALOGINFO; ! 611: ! 612: /* ! 613: * This structure contains the globals that describe the current ! 614: * dialog being edited. ! 615: */ ! 616: typedef struct { ! 617: NPCTYPE npc; /* CTYPE structure for the dialog. */ ! 618: LPTSTR pszDlgName; /* Current dialog's name. */ ! 619: PRESLINK prl; /* NULL or the dlg's resource link. */ ! 620: BOOL fFontSpecified; /* TRUE if a font is set for the dialog.*/ ! 621: HFONT hFont; /* Font handle of the dialog's font. */ ! 622: INT cxChar; /* Pixel width of character box. */ ! 623: INT cyChar; /* Pixel height of character box. */ ! 624: DIALOGINFO di; /* Additional info for current dialog. */ ! 625: } CURRENTDLG; ! 626: ! 627: /* ! 628: * Structure that maps a subject (like a menu id or a dialog id) with ! 629: * a help context to pass in to WinHelp. ! 630: */ ! 631: typedef struct { ! 632: INT idSubject; /* Subject, usually a menu or dialog id.*/ ! 633: INT HelpContext; /* The matching help context. */ ! 634: } HELPMAP; ! 635: typedef HELPMAP *PHELPMAP; ! 636: ! 637: ! 638: /* ! 639: * The aligned ordinal structure. Ordinals start with a word that is ! 640: * always 0xffff, followed by a word that contains the ordinal id. ! 641: */ ! 642: typedef struct { ! 643: WORD wReserved; ! 644: WORD wOrdID; ! 645: } ORDINAL, *PORDINAL; ! 646: ! 647: ! 648: typedef struct { ! 649: DWORD DataSize; // Size of data. ! 650: DWORD HeaderSize; // Size of the resource header. ! 651: } RES, *PRES; ! 652: ! 653: typedef struct { ! 654: DWORD DataVersion; // Predefined resource data version. ! 655: WORD MemoryFlags; // Resource memory flags. ! 656: WORD LanguageId; // UNICODE support for NLS. ! 657: DWORD Version; // Version of the resource data. ! 658: DWORD Characteristics; // Characteristics of the data. ! 659: } RES2, *PRES2; ! 660: ! 661: ! 662: typedef struct { ! 663: DWORD lStyle; // Style for the dialog. ! 664: DWORD lExtendedStyle; // The extended style. ! 665: WORD NumberOfItems; // Number of controls. ! 666: WORD x; // Starting x location. ! 667: WORD y; // Starting y location. ! 668: WORD cx; // Dialog width. ! 669: WORD cy; // Dialog height. ! 670: } *PDIALOGBOXHEADER; ! 671: ! 672: #define SIZEOF_DIALOGBOXHEADER ( \ ! 673: sizeof(DWORD) + /* lStyle */ \ ! 674: sizeof(DWORD) + /* lExtendedStyle */ \ ! 675: sizeof(WORD) + /* NumberOfItems */ \ ! 676: sizeof(WORD) + /* x */ \ ! 677: sizeof(WORD) + /* y */ \ ! 678: sizeof(WORD) + /* cx */ \ ! 679: sizeof(WORD) /* cy */ \ ! 680: ) ! 681: ! 682: ! 683: typedef struct { ! 684: DWORD lStyle; // Style for the control. ! 685: DWORD lExtendedStyle; // The extended style. ! 686: WORD x; // Starting x location. ! 687: WORD y; // Starting y location. ! 688: WORD cx; // Control width. ! 689: WORD cy; // Control height. ! 690: WORD wId; // Control id. ! 691: } *PCONTROLDATA; ! 692: ! 693: #define SIZEOF_CONTROLDATA ( \ ! 694: sizeof(DWORD) + /* lStyle */ \ ! 695: sizeof(DWORD) + /* lExtendedStyle */ \ ! 696: sizeof(WORD) + /* x */ \ ! 697: sizeof(WORD) + /* y */ \ ! 698: sizeof(WORD) + /* cx */ \ ! 699: sizeof(WORD) + /* cy */ \ ! 700: sizeof(WORD)) /* wId */ ! 701: ! 702: ! 703: /* ! 704: * SubLanguage table structure. This structure describes each entry of a ! 705: * sub language table. These tables are pointed to by each entry in ! 706: * the language table. ! 707: */ ! 708: typedef struct { ! 709: WORD wSubLang; // SubLanguage value. ! 710: INT idsSubLang; // String id of SUBLANG_* define. ! 711: INT idsSubLangDesc; // String id of sub-lang description. ! 712: } SUBLANGTABLE, *PSUBLANGTABLE; ! 713: ! 714: /* ! 715: * Language table structure. This structure describes each entry in the ! 716: * language table, which describes each unicode language. ! 717: */ ! 718: typedef struct { ! 719: WORD wPrimary; // Language primary value. ! 720: INT idsLang; // String id of LANG_* define. ! 721: INT idsLangDesc; // String id of language description. ! 722: INT cSubLangs; // Number of sublanguages for this lang. ! 723: PSUBLANGTABLE asl; // Points to table of sublanguages. ! 724: } LANGTABLE; ! 725: ! 726: ! 727:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.