home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pmcolour.zip / PMCOLOUR.C < prev    next >
Text File  |  1998-02-12  |  5KB  |  172 lines

  1. #define    INCL_WIN
  2. #include <os2.h>
  3. #include <stdio.h>
  4. #include <malloc.h>
  5. #include "pmcolour.h"
  6.  
  7. #define    CWN_CHANGE    0x601
  8. #define    CWM_SETCOLOUR    0x602
  9.  
  10. typedef struct _RGB {
  11.     BYTE    bBlue;
  12.     BYTE    bGreen;
  13.     BYTE    bRed;
  14. } RGB;
  15.  
  16. typedef    struct CWPARAM {
  17.     USHORT    cb;
  18.     RGB        rgb;
  19. } CWPARAM;
  20.  
  21. typedef    struct CWDATA {
  22.     USHORT    updatectl;
  23.     HWND    hwndCol;
  24.     HWND    hwndSpinR;
  25.     HWND    hwndSpinG;
  26.     HWND    hwndSpinB;
  27.     RGB        *rgb;
  28.     RGB        rgbold;
  29. } CWDATA;
  30.  
  31. MRESULT EXPENTRY DlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
  32.  
  33.  
  34. main(void)
  35. {
  36.     HAB        hab;
  37.     HMQ        hmq;
  38.     HLIB    hlib;
  39.     HWND    hwndDlg;
  40.     CWPARAM    cwparam;
  41.     char    msgbuf[64];
  42.  
  43.     hmq = WinCreateMsgQueue (hab = WinInitialize(0), 0);
  44.     hlib = WinLoadLibrary (hab, "WPCONFIG.DLL");
  45.     cwparam.cb = sizeof(CWPARAM);
  46.     cwparam.rgb.bRed = 63;
  47.     cwparam.rgb.bGreen = 127;
  48.     cwparam.rgb.bBlue = 255;
  49.     hwndDlg = WinLoadDlg (HWND_DESKTOP, HWND_DESKTOP, DlgProc, NULLHANDLE,
  50.     ID_DLG, &cwparam);
  51.     WinProcessDlg(hwndDlg);
  52.     WinDestroyWindow(hwndDlg);
  53.     sprintf (msgbuf, "Returned values are:\n  R = %u, G = %u, B = %u",
  54.     cwparam.rgb.bRed, cwparam.rgb.bGreen, cwparam.rgb.bBlue);
  55.     WinMessageBox (HWND_DESKTOP, HWND_DESKTOP, msgbuf, "Edit Colour", 0,
  56.     MB_INFORMATION | MB_OK);
  57.     WinDeleteLibrary (hab, hlib);
  58.     WinDestroyMsgQueue(hmq);
  59.     WinTerminate(hab);
  60.     return(0);
  61. }
  62.  
  63.  
  64. MRESULT EXPENTRY DlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  65. {
  66.     CWDATA    *cwdata;
  67.     HWND    hwndSpin;
  68.     ULONG    newval;
  69.  
  70.     cwdata = (CWDATA *) WinQueryWindowULong (hwnd, QWL_USER);
  71.     switch(msg)
  72.     {
  73.     case WM_INITDLG:
  74.         if (!(cwdata = malloc(sizeof(CWDATA))) ||
  75.         !mp2 || !(cwdata->rgb = &(((CWPARAM *) mp2)->rgb)))
  76.         {
  77.         WinPostMsg (hwnd, WM_CLOSE, MPVOID, MPVOID);
  78.         break;
  79.         }
  80.  
  81.         WinSetWindowULong (hwnd, QWL_USER, (ULONG) cwdata);
  82.         cwdata->rgbold = *cwdata->rgb;
  83.         cwdata->hwndCol = WinWindowFromID (hwnd, ID_COL);
  84.         cwdata->hwndSpinR = WinWindowFromID (hwnd, ID_SPINR);
  85.         cwdata->hwndSpinG = WinWindowFromID (hwnd, ID_SPING);
  86.         cwdata->hwndSpinB = WinWindowFromID (hwnd, ID_SPINB);
  87.         cwdata->updatectl = FALSE;
  88.         WinSendMsg (cwdata->hwndSpinR, SPBM_SETLIMITS,
  89.         MPFROMSHORT(255), MPFROMSHORT(0));
  90.         WinSendMsg (cwdata->hwndSpinG, SPBM_SETLIMITS,
  91.         MPFROMSHORT(255), MPFROMSHORT(0));
  92.         WinSendMsg (cwdata->hwndSpinB, SPBM_SETLIMITS,
  93.         MPFROMSHORT(255), MPFROMSHORT(0));
  94.         WinSendMsg (hwnd, CWN_CHANGE,
  95.         MPFROMLONG(*((ULONG *) cwdata->rgb) & 0xFFFFFF), MPVOID);
  96.         WinSendMsg (cwdata->hwndCol, CWM_SETCOLOUR,
  97.         MPFROMLONG(*((ULONG *) cwdata->rgb) & 0xFFFFFF), MPVOID);
  98.         break;
  99.  
  100.     case WM_COMMAND:
  101.         switch(SHORT1FROMMP(mp1))
  102.         {
  103.         case ID_UNDO:
  104.             WinSendMsg (hwnd, CWN_CHANGE,
  105.             MPFROMLONG(*((ULONG *) &cwdata->rgbold) & 0xFFFFFF),
  106.             MPVOID);
  107.             WinSendMsg (cwdata->hwndCol, CWM_SETCOLOUR,
  108.             MPFROMLONG(*((ULONG *) &cwdata->rgbold) & 0xFFFFFF),
  109.             MPVOID);
  110.             return ((MPARAM) 0);
  111.         }
  112.  
  113.         break;
  114.  
  115.     case CWN_CHANGE:
  116.         *cwdata->rgb = *((RGB *) &mp1);
  117.         cwdata->updatectl = FALSE;
  118.         WinSendMsg (cwdata->hwndSpinR, SPBM_SETCURRENTVALUE,
  119.         MPFROMSHORT(cwdata->rgb->bRed), MPVOID);
  120.         WinSendMsg (cwdata->hwndSpinG, SPBM_SETCURRENTVALUE,
  121.         MPFROMSHORT(cwdata->rgb->bGreen), MPVOID);
  122.         WinSendMsg (cwdata->hwndSpinB, SPBM_SETCURRENTVALUE,
  123.         MPFROMSHORT(cwdata->rgb->bBlue), MPVOID);
  124.         cwdata->updatectl = TRUE;
  125.         break;
  126.  
  127.     case WM_CONTROL:
  128.             switch(SHORT1FROMMP(mp1))
  129.             {
  130.                 case ID_SPINR:
  131.                 case ID_SPING:
  132.                 case ID_SPINB:
  133.             hwndSpin = WinWindowFromID (hwnd, SHORT1FROMMP(mp1));
  134.                     switch(SHORT2FROMMP(mp1))
  135.                     {
  136.                         case SPBN_CHANGE:
  137.                         case SPBN_KILLFOCUS:
  138.                 if (cwdata->updatectl)
  139.                             {
  140.                 WinSendMsg (hwndSpin, SPBM_QUERYVALUE,
  141.                     (MPARAM) &newval,
  142.                     MPFROM2SHORT(0, SPBQ_ALWAYSUPDATE));
  143.                 switch(SHORT1FROMMP(mp1))
  144.                 {
  145.                     case ID_SPINR:
  146.                     cwdata->rgb->bRed = (BYTE) newval;
  147.                     break;
  148.  
  149.                     case ID_SPING:
  150.                     cwdata->rgb->bGreen = (BYTE) newval;
  151.                     break;
  152.  
  153.                     case ID_SPINB:
  154.                     cwdata->rgb->bBlue = (BYTE) newval;
  155.                 }
  156.  
  157.                 WinSendMsg (cwdata->hwndCol, CWM_SETCOLOUR,
  158.                     MPFROMLONG(*((ULONG *) cwdata->rgb) &
  159.                     0xFFFFFF), MPVOID);
  160.                 }
  161.                     }
  162.         }
  163.  
  164.         break;
  165.  
  166.     case WM_DESTROY:
  167.         free(cwdata);
  168.     }
  169.  
  170.     return (WinDefDlgProc (hwnd, msg, mp1, mp2));
  171. }
  172.