home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mltcol.zip / MCOL.C < prev    next >
C/C++ Source or Header  |  1993-05-27  |  5KB  |  137 lines

  1. /*----------------------------------------------------------------------*/
  2. /*  Defines and Include Files                                           */
  3. /*----------------------------------------------------------------------*/
  4. #define INCL_PM
  5. #include <os2.h>
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <malloc.h>
  10.  
  11. #include  "mcol.h"
  12.  
  13. /*----------------------------------------------------------------------*/
  14. /*  Holds the widths of each individual column                          */
  15. /*----------------------------------------------------------------------*/
  16. LONG        alWidth[3];
  17.  
  18. /*----------------------------------------------------------------------*/
  19. /*  Prototypes                                                          */
  20. /*----------------------------------------------------------------------*/
  21.  
  22. void    main        ( int argc, char *argv[] );
  23. MRESULT EXPENTRY MColDlgProc  ( HWND, USHORT, MPARAM, MPARAM );
  24.  
  25. LONG EXPENTRY LBMeasure(HWND hwnd, USHORT idListBox, USHORT idItem,
  26.                 LONG alColWidth[], USHORT usMaxCols, USHORT idHdg,
  27.                 PSZ pszHdgTop, PSZ pszHdgBottom);
  28.  
  29. VOID EXPENTRY LBDraw(HWND hwnd, USHORT idListBox, POWNERITEM poi,
  30.                 LONG alColWidth[], USHORT usMaxCols, USHORT idHdg,
  31.                 BOOL fGrid);
  32.  
  33. void ExtractCols ( char *pszText, ... );
  34. MRESULT EXPENTRY EditWndProc    ( HWND, USHORT, MPARAM, MPARAM );
  35. MRESULT EXPENTRY HeadingWndProc ( HWND, USHORT, MPARAM, MPARAM );
  36.  
  37. PFNWP       pfnEntryWndProc;
  38.  
  39. void main ( int argc, char *argv[] )
  40. {
  41.  
  42.     HAB          hab;
  43.     HMQ          hmq;
  44.     CLASSINFO    clsInfo;
  45.  
  46.     hab = WinInitialize ( 0 );
  47.     hmq = WinCreateMsgQueue ( hab, 0 );
  48.  
  49.     WinQueryClassInfo ( hab, WC_ENTRYFIELD, &clsInfo );
  50.  
  51.     WinRegisterClass ( hab, "Heading",  HeadingWndProc,  0, 18 );
  52.     WinRegisterClass ( hab, "9", EditWndProc, CS_SIZEREDRAW, clsInfo.cbWindowData );
  53.     WinRegisterClass ( hab, "a", EditWndProc, CS_SIZEREDRAW, clsInfo.cbWindowData );
  54.     WinRegisterClass ( hab, "N", EditWndProc, CS_SIZEREDRAW, clsInfo.cbWindowData );
  55.  
  56.     pfnEntryWndProc = clsInfo.pfnWindowProc;
  57.  
  58.     WinDlgBox ( HWND_DESKTOP, HWND_DESKTOP, MColDlgProc, 0, IDD_MCOL, 0 );
  59.  
  60.     WinDestroyMsgQueue ( hmq );
  61.     WinTerminate       ( hab );
  62. }
  63.  
  64.  
  65. MRESULT EXPENTRY MColDlgProc  ( HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2 ) {
  66.  
  67.     char    szLine[100], szField1[33], szField2[33], szField3[33];
  68.     USHORT  usId;
  69.  
  70.     switch ( msg )  {
  71.  
  72.     case WM_CONTROL      :
  73.         switch ( SHORT1FROMMP ( mp1 ) )  {
  74.         case DID_LISTBOX :
  75.             usId = SHORT1FROMMR ( WinSendDlgItemMsg ( hwnd, DID_LISTBOX,
  76.                     LM_QUERYSELECTION, MPFROMSHORT ( LIT_FIRST ), 0 ) );
  77.  
  78.             if ( usId == LIT_NONE )  {
  79.                 break;
  80.             }
  81.             WinSendDlgItemMsg ( hwnd, DID_LISTBOX, LM_QUERYITEMTEXT,
  82.                 MPFROM2SHORT ( usId, sizeof ( szLine ) ), szLine );
  83.  
  84.             ExtractCols ( szLine, szField1, szField2, szField3 );
  85.             WinSetDlgItemText ( hwnd, DID_FIELD1, szField1 );
  86.             WinSetDlgItemText ( hwnd, DID_FIELD2, szField2 );
  87.             WinSetDlgItemText ( hwnd, DID_FIELD3, szField3 );
  88.         }
  89.         break;
  90.  
  91.     case WM_COMMAND      :
  92.         switch ( SHORT1FROMMP ( mp1 ) )  {
  93.         case DID_CANCEL               :
  94.             WinDismissDlg ( hwnd, 0 );
  95.             break;
  96.  
  97.         case DID_ADD                  :
  98.             WinQueryDlgItemText ( hwnd, DID_FIELD1, 33, szField1 );
  99.             WinQueryDlgItemText ( hwnd, DID_FIELD2, 33, szField2 );
  100.             WinQueryDlgItemText ( hwnd, DID_FIELD3, 33, szField3 );
  101.  
  102.             sprintf ( szLine, "%s\t%s\t%s", szField1, szField2, szField3 );
  103.  
  104.             WinEnableWindowUpdate ( WinWindowFromID ( hwnd, DID_LISTBOX ), FALSE );
  105.             WinSendDlgItemMsg ( hwnd, DID_LISTBOX, LM_INSERTITEM, (MPARAM) LIT_END,
  106.                     (MPARAM) szLine );
  107.             WinShowWindow ( WinWindowFromID ( hwnd, DID_LISTBOX ), TRUE );
  108.  
  109.             break;
  110.         }
  111.         break;
  112.  
  113.     case WM_MEASUREITEM          :
  114.         switch ( SHORT1FROMMP ( mp1 ) )  {
  115.         case   DID_LISTBOX       :
  116.             return (MRESULT) ( LBMeasure ( hwnd, SHORT1FROMMP ( mp1 ),
  117.                     SHORT1FROMMP ( mp2 ), alWidth, 3, DID_HEADING,
  118.                     "column\tcolumn\tcolumn", "1\t2\t3" ) );
  119.         }
  120.         break;
  121.  
  122.     case WM_DRAWITEM             :
  123.         switch ( SHORT1FROMMP ( mp1 ) )  {
  124.         case   DID_LISTBOX       :
  125.             LBDraw ( hwnd, SHORT1FROMMP ( mp1 ), (POWNERITEM) mp2,
  126.                      alWidth, 3, DID_HEADING, FALSE );
  127.             return (MRESULT) TRUE;
  128.  
  129.         }
  130.         break;
  131.  
  132.     default                     :
  133.         return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  134.     }
  135.     return  0;
  136. }
  137.