home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / bmp3.zip / VIEWDLG.C < prev    next >
C/C++ Source or Header  |  1995-11-10  |  7KB  |  194 lines

  1. #pragma    title("Icon/Pointer Viewer  --  Version 1  --  (ViewDlg.C)")
  2. #pragma    subtitle("   Module Purpose - Interface Definitions")
  3.  
  4. #define    INCL_GPI           /* Include OS/2 PM GPI Interface    */
  5. #define    INCL_WIN           /* Include OS/2 PM Windows Interface    */
  6.  
  7. #include <malloc.h>
  8. #include <os2.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #include "appdefs.h"
  14. #include "viewico.h"
  15.  
  16. /* This    module contains    routine    used to    handle the main    application    */
  17. /* client window.                            */
  18.  
  19. /* Filename:   ViewDlg.C                        */
  20.  
  21. /*  Version:   1                            */
  22. /*  Created:   1995-10-18                        */
  23. /*  Revised:   1995-10-18                        */
  24.  
  25. /* Routines:   MRESULT EXPENTRY    ViewDlgProc(HWND hWnd, ULONG msg,    */
  26. /*                        MPARAM mp1,    MPARAM mp2);    */
  27.  
  28.  
  29. /************************************************************************/
  30. /************************************************************************/
  31. /************************************************************************/
  32. /* DISCLAIMER OF WARRANTIES:                        */
  33. /* -------------------------                        */
  34. /* The following [enclosed] code is sample code    created    by IBM        */
  35. /* Corporation and Prominare Inc.  This    sample code is not part    of any    */
  36. /* standard IBM    product    and is provided    to you solely for the purpose    */
  37. /* of assisting    you in the development of your applications.  The code    */
  38. /* is provided "AS IS",    without    warranty of any    kind.  Neither IBM nor    */
  39. /* Prominare shall be liable for any damages arising out of your    */
  40. /* use of the sample code, even    if they    have been advised of the    */
  41. /* possibility of such damages.                        */
  42. /************************************************************************/
  43. /************************************************************************/
  44. /************************************************************************/
  45. /*               D I S C L A I M E R                */
  46. /* This    code is    provided on an as is basis with    no implied support.    */
  47. /* It should be    considered freeware that cannot    be rebundled as        */
  48. /* part    of a larger "*ware" offering without our consent.        */
  49. /************************************************************************/
  50. /************************************************************************/
  51. /************************************************************************/
  52.  
  53. /* Copyright ╕ International Business Machines Corp., 1995.        */
  54. /* Copyright ╕ 1995  Prominare Inc.  All Rights    Reserved.        */
  55.  
  56. /* --------------------------------------------------------------------    */
  57.  
  58.  
  59. POINTL         ptlSRCAND;
  60. POINTL         ptlSRCPAINT;
  61. POINTL         ptlSRCINVERT;
  62.  
  63. #pragma    subtitle("   Module Purpose - Dialog Procedure")
  64. #pragma    page( )
  65.  
  66. /* --- ViewROPDlgProc ---------------------------------- [ Public ] ---    */
  67. /*                                    */
  68. /*     This function is    used to    process    the messages for the dialog    */
  69. /*     procedure.                            */
  70. /*                                    */
  71. /*     Upon Entry:                            */
  72. /*                                    */
  73. /*     HWND   hWnd; = Dialog Window Handle                */
  74. /*     ULONG  msg;  = PM Message                    */
  75. /*     MPARAM mp1;  = Message Parameter    1                */
  76. /*     MPARAM mp2;  = Message Parameter    2                */
  77. /*                                    */
  78. /*     Upon Exit:                            */
  79. /*                                    */
  80. /*     ViewROPDlgProc =    Message    Handling Result                */
  81. /*                                    */
  82. /* --------------------------------------------------------------------    */
  83.  
  84. MRESULT    EXPENTRY ViewDlgProc(HWND hWnd,    ULONG msg, MPARAM mp1, MPARAM mp2)
  85.  
  86. {
  87. HPS    hPS;               /* Presentation Space Handle        */
  88. MRESULT    mr;               /* Message Return            */
  89. RECTL    rcl;               /* Window Rectangle            */
  90. POINTL    aptl[4];           /* Display Points            */
  91.  
  92. switch ( msg )
  93.    {
  94. /************************************************************************/
  95. /* Perform dialog initialization                    */
  96. /************************************************************************/
  97.  
  98.    case    WM_INITDLG :
  99.        WinQueryWindowRect(hWnd,    &rcl);
  100.        if ( abm[iBitmap].hbmImage )
  101.        {
  102.        ptlSRCAND.x      = (rcl.xRight    - rcl.xLeft) / 2L - abm[iBitmap].cx / 2L - 5L -    abm[iBitmap].cx;
  103.        ptlSRCPAINT.x  = (rcl.xRight    - rcl.xLeft) / 2L - abm[iBitmap].cx / 2L;
  104.        ptlSRCINVERT.x = (rcl.xRight    - rcl.xLeft) / 2L + abm[iBitmap].cx / 2L + 5L;
  105.  
  106.        ptlSRCAND.y = ptlSRCPAINT.y = ptlSRCINVERT.y    = (rcl.yTop - rcl.yBottom) / 2L    - (abm[iBitmap].cy * 2L    + 10L) / 2L;
  107.        }
  108.        else
  109.        {
  110.        ptlSRCAND.x      = (rcl.xRight    - rcl.xLeft) / 2L - 5L - abm[iBitmap].cx;
  111.        ptlSRCINVERT.x = (rcl.xRight    - rcl.xLeft) / 2L + 5L;
  112.  
  113.        ptlSRCAND.y = ptlSRCINVERT.y    = (rcl.yTop - rcl.yBottom) / 2L    - (abm[iBitmap].cy * 2L    + 10L) / 2L;
  114.        }
  115.        break;
  116.  
  117. /************************************************************************/
  118. /* Process push    button selections                    */
  119. /************************************************************************/
  120.  
  121.    case    WM_COMMAND :
  122.        switch (    SHORT1FROMMP(mp1) )
  123.        {
  124.        case    DID_OK :
  125.            WinDismissDlg(hWnd, TRUE);
  126.            break;
  127.  
  128.        }
  129.        break;
  130.  
  131.    case    WM_PAINT :
  132.        mr = WinDefDlgProc(hWnd,    msg, mp1, mp2);
  133.  
  134.        memset(aptl, 0, sizeof(POINTL) *    4);
  135.  
  136.        aptl[1].x = (aptl[0].x =    ptlSRCAND.x) + abm[iBitmap].cx;
  137.        aptl[1].y = (aptl[0].y =    ptlSRCAND.y) + abm[iBitmap].cy;
  138.  
  139.        aptl[3].x = abm[iBitmap].cx;
  140.        aptl[3].y = abm[iBitmap].cy;
  141.        GpiSetBackColor(hPS = WinGetPS(hWnd), CLR_WHITE);
  142.  
  143.        GpiWCBitBlt(hPS,    abm[iBitmap].hbmMask, 4L, aptl,    ROP_SRCAND, BBO_OR);
  144.  
  145.        aptl[0].y += (abm[iBitmap].cy + 10L);
  146.        aptl[1].y += (abm[iBitmap].cy + 10L);
  147.        GpiSetBackColor(hPS, CLR_WHITE);
  148.        GpiWCBitBlt(hPS,    abm[iBitmap].hbmMask, 4L, aptl,    ROP_SRCCOPY, BBO_OR);
  149.        if ( abm[iBitmap].hbmImage )
  150.        {
  151.        aptl[1].x = (aptl[0].x = ptlSRCPAINT.x) + abm[iBitmap].cx;
  152.        aptl[1].y = (aptl[0].y = ptlSRCPAINT.y) + abm[iBitmap].cy;
  153.        GpiWCBitBlt(hPS, abm[iBitmap].hbmMask, 4L, aptl, ROP_SRCAND,    BBO_OR);
  154.        GpiWCBitBlt(hPS, abm[iBitmap].hbmImage, 4L, aptl, ROP_SRCPAINT, BBO_OR);
  155.  
  156.        aptl[0].y +=    (abm[iBitmap].cy + 10L);
  157.        aptl[1].y +=    (abm[iBitmap].cy + 10L);
  158.        GpiWCBitBlt(hPS, abm[iBitmap].hbmImage, 4L, aptl, ROP_SRCCOPY, BBO_OR);
  159.        }
  160.  
  161.        aptl[1].x = (aptl[0].x =    ptlSRCINVERT.x)    + abm[iBitmap].cx;
  162.        aptl[1].y = (aptl[0].y =    ptlSRCINVERT.y)    + abm[iBitmap].cy;
  163.  
  164.        GpiSetBackColor(hPS, CLR_WHITE);
  165.        GpiWCBitBlt(hPS,    abm[iBitmap].hbmMask, 4L, aptl,    ROP_SRCAND, BBO_OR);
  166.  
  167.        if ( abm[iBitmap].hbmImage )
  168.        GpiWCBitBlt(hPS, abm[iBitmap].hbmImage, 4L, aptl, ROP_SRCPAINT, BBO_OR);
  169.        aptl[3].y = (aptl[2].y =    abm[iBitmap].cy) << 1UL;
  170.        GpiSetBackColor(hPS, CLR_BLACK);
  171.        GpiWCBitBlt(hPS,    abm[iBitmap].hbmMask, 4L, aptl,    ROP_SRCINVERT, BBO_OR);
  172.  
  173.        aptl[0].y += (abm[iBitmap].cy + 10L);
  174.        aptl[1].y += (abm[iBitmap].cy + 10L);
  175.        GpiSetBackColor(hPS, CLR_WHITE);
  176.        GpiWCBitBlt(hPS,    abm[iBitmap].hbmMask, 4L, aptl,    ROP_SRCCOPY, BBO_OR);
  177.        WinReleasePS(hPS);
  178.        return(mr);
  179.  
  180. /************************************************************************/
  181. /* Close requested, exit dialogue                    */
  182. /************************************************************************/
  183.  
  184.    case    WM_CLOSE :
  185.        WinDismissDlg(hWnd, FALSE);
  186.        break;
  187.  
  188.             /* Pass    through    unhandled messages        */
  189.    default :
  190.        return(WinDefDlgProc(hWnd, msg, mp1, mp2));
  191.    }
  192. return(0L);
  193. }
  194.