home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lstbx4.zip / Entryfld.H < prev    next >
Text File  |  1994-07-05  |  10KB  |  223 lines

  1.  
  2. /* Program name: Entryfld.C    Title: A    List Box Replacement        */
  3. /*                                    */
  4. /* OS/2    Developer Magazine, Issue:  Jan    '94, page 66                    */
  5. /* Author:  Mark Benge       IBM Corp.                    */
  6. /*        Matt Smith       Prominare Inc.                */
  7. /* Description:     Replacement for OS/2 List Box,    first of a series.    */
  8. /*                                    */
  9. /* Program Requirements:  OS/2 2.x                    */
  10. /*              IBM C    Set/2                    */
  11. /*              WATCOM C 386/9.0                */
  12. /*              Borland C++ for OS/2                */
  13. /*              OS/2 Toolkit                    */
  14.  
  15. /* Copyright ╕ International Business Machines Corp. 1991-1994        */
  16. /* Copyright ╕ 1989-1994  Prominare Inc.  All Rights Reserved.        */
  17.  
  18. /* Entryfld.h       Created:    1993-10-08  Revised:    1994-07-05    */
  19.  
  20. /* Entry Field Control Constant    Definition Header            */
  21.  
  22. /* Functions are defined with strong typing to insure correct usage    */
  23. /* within the final program and    correct    linkage                */
  24.  
  25.  
  26. /* --- Internal    Structures --------------------------------------------    */
  27.  
  28. typedef    struct _ENTRYFWIN
  29.    {
  30.          /***********************************************************/
  31.          /*    Window Management                    */
  32.          /***********************************************************/
  33.    ULONG     hHeap;           /* Heap Handle            */
  34.    HAB         hAB;           /* Anchor Block Handle        */
  35.    HWND         hWnd;           /* Control Window Handle        */
  36.    HWND         hwndOwner;           /* Owner Window Handle        */
  37.    HWND         hwndParent;       /* Parent Window Handle        */
  38.    HPOINTER  hptr;           /* Selection    Mouse Pointer        */
  39.    HWND         hwndPopupEdit;       /* Popup Menu Window    Handle        */
  40.          /***********************************************************/
  41.          /*    Styles/ID                        */
  42.          /***********************************************************/
  43.    ULONG     flStyle;           /* Style Flags            */
  44.    ULONG     id;           /* Window ID                */
  45.          /***********************************************************/
  46.          /*    Flags                            */
  47.          /***********************************************************/
  48.    BOOL         fFocus;           /* Focus Flag            */
  49.    BOOL         fBtnDown;           /* Mouse Button Down    Flag        */
  50.    BOOL         fDblClk;           /* Mouse Double Click Flag        */
  51.    BOOL         fCapture;           /* Mouse Capture Flag        */
  52.    BOOL         fTimer;           /* Mouse Capture Flag        */
  53.    BOOL         fVisible;           /* List Box Visible Flag        */
  54.    BOOL         fScrollStart;       /* Scrolling    Start Flag        */
  55.    BOOL         fOvertype;           /* Overtype Flag            */
  56.    BOOL         fChanged;           /* Text Changed Flag            */
  57.    BOOL         fReadOnly;           /* Read Only    Flag            */
  58.    BOOL         fWordSelect;       /* Word Select Flag            */
  59.          /***********************************************************/
  60.          /*    Scrolling Rates                        */
  61.          /***********************************************************/
  62.    ULONG     ulScrollRateStart;       /* Starting Scroll Rate        */
  63.    ULONG     ulScrollRate;       /* Standard Scroll Rate        */
  64.    LONG         cScroll;           /* Character    Scroll Count        */
  65.          /***********************************************************/
  66.          /*    Window Display                        */
  67.          /***********************************************************/
  68.    LONG         cx;           /* List Box Width            */
  69.    LONG         cy;           /* List Box Height            */
  70.    LONG         lClrBackground;       /* Background Colour            */
  71.    LONG         lClrBorder;       /* Border Colour            */
  72.    LONG         lClrHilite;       /* Hilite Colour            */
  73.    LONG         lClrHiliteBackground; /* Hilite Background    Colour        */
  74.    LONG         lClrText;           /* Text Colour            */
  75.    RECTL     rcl;           /* Window Rectangle            */
  76.    POINTL    aptlOutside[5];       /* Border Points Array        */
  77.    POINTL    aptlInside[5];       /* Border Points Array        */
  78.    PPOINTL   aptl;           /* Text Display Points Array        */
  79.    LONG         xScrollLimit;       /* Scrolling    Display    Limit        */
  80.          /***********************************************************/
  81.          /*    Indices                            */
  82.          /***********************************************************/
  83.    LONG         iAnchor;           /* Anchor Item Index            */
  84.    LONG         iSelStart;           /* Selection    Start            */
  85.    LONG         iSelEnd;           /* Selection    End            */
  86.    LONG         iSel;           /* Selection    Point            */
  87.    LONG         iOffset;           /* Offset Index            */
  88.          /***********************************************************/
  89.          /*    Cursor Management                    */
  90.          /***********************************************************/
  91.    LONG         xCursor;           /* Selection    Point            */
  92.    LONG         yCursor;           /* Selection    Point            */
  93.    LONG         cyCursor;           /* Cursor Height            */
  94.    BOOL         fCursorShown;       /* Cursor Shown Flag            */
  95.          /***********************************************************/
  96.          /*    Text Holder                        */
  97.          /***********************************************************/
  98.    CHAR         szText[1024];       /* Text Holder            */
  99.    CHAR         szPassword[1024];       /* Display Holder            */
  100.    CHAR         szUndo[1024];       /* Undo Buffer Text Holder        */
  101.    CHAR         szInput[4];       /* Simple Input Buffer        */
  102.    LONG         yBaseline;           /* Text Baseline Measurement        */
  103.    LONG         cText;           /* Text Length            */
  104.    LONG         cLimit;           /* Text Length Limit            */
  105.    LONG         cUndo;           /* Undo Buffer Text Length        */
  106.    RECTL     rclText;           /* Text Rectangle            */
  107.    RECTL     rclDraw;           /* Text Drawing Rectangle        */
  108.    POINTL    ptlDraw;           /* Text Display Point        */
  109.    LONG         yDesc;           /* Descender    Height            */
  110.    LONG         yChar;           /* Character    Height            */
  111.    LONG         cxChar;           /* Character    Width            */
  112.    LONG         cxMargin;           /* Character    Margin Buffer Width    */
  113.    HPS         hPS;           /* Temporary    Presentation Space    */
  114.    } ENTRYFWIN ;
  115.  
  116. typedef    ENTRYFWIN *PENTRYFWIN;
  117.  
  118. typedef    struct _ENTRYFDATA2    /* efd */
  119.    {
  120.    ULONG   cb;
  121.    ULONG   cchEditLimit;
  122.    ULONG   ichMinSel;
  123.    ULONG   ichMaxSel;
  124.    } ENTRYFDATA2 ;
  125.  
  126. typedef    ENTRYFDATA2 *PENTRYFDATA2;
  127.  
  128. typedef    union _ENTRYFCDATA    /* efcd */
  129.    {
  130.    ENTRYFDATA    efd;
  131.    ENTRYFDATA2    efd2;
  132.    } ENTRYFCDATA ;
  133.  
  134. typedef    ENTRYFCDATA *PENTRYFCDATA;
  135.  
  136. /************************************************************************/
  137. /************************************************************************/
  138. /*                                    */
  139. /*     Class Definition                            */
  140. /*                                    */
  141. /************************************************************************/
  142. /************************************************************************/
  143.  
  144. #define    CLASS_ENTRYFIELD  "EntryFieldWindow"
  145.  
  146. /************************************************************************/
  147. /************************************************************************/
  148. /*                                    */
  149. /*     Margins                                */
  150. /*                                    */
  151. /************************************************************************/
  152. /************************************************************************/
  153.  
  154. #define    EFMARGIN_LEFT     4L
  155. #define    EFMARGIN_TOP     2L
  156. #define    EFMARGIN_BOTTOM     3L
  157. #define    EFMARGIN_RIGHT     3L
  158.  
  159. /************************************************************************/
  160. /************************************************************************/
  161. /*                                    */
  162. /*     Move Direction                            */
  163. /*                                    */
  164. /************************************************************************/
  165. /************************************************************************/
  166.  
  167. #define    EFMOVE_LEFT       0L
  168. #define    EFMOVE_RIGHT       1L
  169.  
  170. /************************************************************************/
  171. /************************************************************************/
  172. /*                                    */
  173. /*     Highlight Flags                            */
  174. /*                                    */
  175. /************************************************************************/
  176. /************************************************************************/
  177.  
  178. #define    EFDISPLAY_NORMAL    0L
  179. #define    EFDISPLAY_HIGHLIGHT    1L
  180.  
  181. /************************************************************************/
  182. /************************************************************************/
  183. /*                                    */
  184. /*     Helper Macros                            */
  185. /*                                    */
  186. /************************************************************************/
  187. /************************************************************************/
  188.  
  189. #define    VALIDATERIGHTMARGIN(x) ((x) > pefw->ptlText.xRight ? pefw->ptlText.xRight : (x))
  190. #define    FINDCHARACTER(xClick) (pefw->xCursor = pefw->aptl[pefw->iSel = lFindCharacterIndex(pefw, (xClick))].x +    EFMARGIN_LEFT)
  191. #define    FALLOWSCROLLRIGHT(z) (((pefw->aptl[pefw->cText].x - pefw->aptl[pefw->iOffset].x) < (pefw->rclText.xRight / 3L))    ?\
  192.                   FALSE : TRUE)
  193.  
  194. /************************************************************************/
  195. /************************************************************************/
  196. /*                                    */
  197. /*     Prototypes                            */
  198. /*                                    */
  199. /************************************************************************/
  200. /************************************************************************/
  201.  
  202. #define    IDM_POPUPEDIT  1024
  203. #define    IDM_CUT           1025
  204. #define    IDM_COPY       1026
  205. #define    IDM_PASTE      1027
  206.  
  207. /************************************************************************/
  208. /************************************************************************/
  209. /*                                    */
  210. /*     Prototypes                            */
  211. /*                                    */
  212. /************************************************************************/
  213. /************************************************************************/
  214.  
  215. /* --- EventMgr.C Prototype Definitions    -------------------------------    */
  216.  
  217. MRESULT    mrNotifyEFOwner(PENTRYFWIN pefw, ULONG ulNotification);
  218.  
  219. /* --- EntryFld.C Prototype Definitions    -------------------------------    */
  220.  
  221. BOOL EXPENTRY fRegisterEntryField(HAB hAB);
  222. MRESULT    EXPENTRY EntryWndProc(HWND hWnd, ULONG msg, MPARAM mp1,    MPARAM mp2);
  223.