home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
tolkit45.zip
/
os2tk45
/
samples
/
pm
/
porting
/
img_pnt.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-11
|
11KB
|
309 lines
/**************************************************************************
* File name : img_pnt.c
*
* Description: This module contains the code for the main client window
* painting. It contains these functions:
*
* PaintUnSizedImage()
* PaintSizedImage()
* PaintDrawImage()
*
* Concepts : bitmaps
*
* API's : GpiDeleteBitmap
* GpiAssociate
* GpiDestroyPS
* DevCloseDC
* DevOpenDC
* GpiCreatePS
* GpiCreateBitmap
* GpiSetBitmap
* GpiErase
* GpiSetBackColor
* GpiSetColor
* GpiSetBackMix
* GpiSetCurrentPosition
* WinMessageBox
* GpiImage
* WinInvalidateRect
* WinSetPointer
* WinQueryWindowRect
* WinDrawBitmap
*
* Required
* Files : OS2.H, STRING.H, STDIO.H, IMG_MAIN.H, IMG_XTRN.H
*
* Copyright (C) 1991-1993 IBM Corporation
*
* DISCLAIMER OF WARRANTIES. The following [enclosed] code is
* sample code created by IBM Corporation. This sample code is not
* part of any standard or IBM product and is provided to you solely
* for the purpose of assisting you in the development of your
* applications. The code is provided "AS IS", without
* warranty of any kind. IBM shall not be liable for any damages
* arising out of your use of the sample code, even if they have been
* advised of the possibility of such damages. *
*************************************************************************/
/*
* Include files, macros, defined constants, and externs
*/
#define INCL_DOSMEMMGR
#define INCL_DOSPROCESS
#define INCL_WINMENUS
#define INCL_WINFRAMEMGR
#define INCL_WINPOINTERS
#define INCL_WINSTDFILE
#define INCL_GPIPRIMITIVES
#define INCL_GPIBITMAPS
#include <os2.h>
#include <string.h>
#include <stdio.h>
#include "img_main.h"
#include "img_xtrn.h"
/**************************************************************************
*
* Name : PaintDrawImage()
*
* Description: Draws the image data into the bitmap
*
* Concepts : Routine is called from LoadImage()
* - creates a memory device context
* - defines a memory presentation space
* - associates the memory DC with the memory PS
* - creates a bitmap
* - Selects bitmap into memory DC
* - draws the image data into the bitmap
*
* API's : GpiDeleteBitmap
* GpiAssociate
* GpiDestroyPS
* DevCloseDC
* DevOpenDC
* GpiCreatePS
* GpiCreateBitmap
* GpiSetBitmap
* GpiErase
* GpiSetBackMix
* GpiSetBackColor
* GpiSetColor
* GpiSetCurrentPosition
* WinMessageBox
* GpiImage
* WinInvalidateRect
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID PaintDrawImage(void)
{
POINTL ptl;
DEVOPENSTRUC dop;
#ifdef PORT_16
BITMAPINFOHEADER BmapInfo;
#endif
#ifdef PORT_32
BITMAPINFOHEADER2 BmapInfo;
#endif
if (vfImgLoaded)
{
/*
* The memory presentation space is defined to accommodate a
* particular file of image data. If an image has already been
* loaded, its resources must be deleted before a new set can be
* defined.
*/
GpiDeleteBitmap(vhbm);
GpiAssociate(vhpsMem, (HDC)NULLHANDLE);
GpiDestroyPS(vhpsMem);
DevCloseDC(vhdcMem);
}
/*
* define the memory device context
*/
dop.pszLogAddress = (PSZ)NULL;
dop.pszDriverName = "DISPLAY";
vhdcMem = DevOpenDC(vhab,
OD_MEMORY,
"*",
2L, /* number of valid elements */
(PDEVOPENDATA)&dop,
(HDC)NULLHANDLE);
/*
* The memory presentation space is defined and associated with the
* memory device context. The presentation page is the same size in
* pels as the image.
*/
vhpsMem = GpiCreatePS(vhab,
vhdcMem,
&vsizlImg,
(LONG)PU_PELS | GPIT_NORMAL | GPIA_ASSOC);
/*
* Create a bit map in a format compatible with the memory device
* context.
*/
/*
* Define the bitmap information header.
*/
BmapInfo.cbFix = 16; /* bit-map header length */
BmapInfo.cx = vsizlImg.cx;
BmapInfo.cy = vsizlImg.cy;
BmapInfo.cPlanes = 1L; /* number of bit planes */
BmapInfo.cBitCount = 1L; /* number of bits per pel */
/*
* The bit map is defined and selected into the memory device
* context. The output display is cleared.
*/
vhbm = GpiCreateBitmap(vhpsMem,
&BmapInfo,
0L, /* no options */
(PBYTE)NULL, /* no initial data */
(PBITMAPINFO2)NULL);
GpiSetBitmap(vhpsMem, vhbm);
GpiErase(vhpsMem);
GpiSetBackColor(vhpsMem, vlBackClr);
GpiSetColor(vhpsMem, vlForeClr);
GpiSetBackMix(vhpsMem, BM_OVERPAINT);
/*
* The current position is set to the top-left corner of the memory
* presentation page before GpiImage is issued to draw the image
* into it.
*/
ptl.x = 0L;
ptl.y = vsizlImg.cy;
GpiSetCurrentPosition(vhpsMem, &ptl);
#ifdef PORT_32
{
BYTE acInform[50];
PBYTE pbFileName;
WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
sprintf (acInform, "Press OK to display this image.");
pbFileName = strrchr(vfdg.szFullFile, '\\'); /* the last backslash */
if(pbFileName)
pbFileName++;
WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (PSZ)acInform, (PSZ)pbFileName,
0L, MB_OK | MB_INFORMATION | MB_APPLMODAL | MB_MOVEABLE);
}
#endif
WinEnableWindowUpdate(vhwndClient, TRUE);
GpiImage(vhpsMem,
0L,
&vsizlImg, /* image size */
(LONG)((vsizlImg.cx * vsizlImg.cy)/8), /* data length in bytes */
vpbImgBuf); /* image data */
GpiSetBitmap(vhpsMem, (HBITMAP)NULLHANDLE); /* free bit map in memory DC */
WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
} /* End of PaintDrawImage */
/**************************************************************************
*
* Name : PaintUnSizedImage()
*
* Description: Paints the image in the client window
*
* Concepts : Routine is called from MainWndProc()
*
* API's : WinSetPointer
* GpiImage
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID PaintUnSizedImage(void)
{
WinSetPointer(HWND_DESKTOP, vhptrWait);
GpiImage(vhps,
0L,
&vsizlImg, /* size in pels */
(LONG)(vsizlImg.cx * vsizlImg.cy/8), /* data length in bytes */
vpbImgBuf); /* image data */
WinSetPointer(HWND_DESKTOP, vhptrArrow);
} /* End of PaintUnSizedImage */
/**************************************************************************
*
* Name : PaintSizedImage()
*
* Description: Paints the image in the client window, sizes
* it so that the whole of the image is visible
* (i.e. scaled as necessary)
*
* Concepts : Routine is called from MainWndProc()
*
* API's : WinQueryWindowRect
* WinSetPointer
* WinDrawBitmap
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID PaintSizedImage(void)
{
RECTL rcl; /* client window rectangle */
POINTL aptl[5]; /* array of x,y pairs */
/*
* The dimensions of the target rectangle are obtained using the
* WinQueryWindowRect() call.
*/
WinQueryWindowRect(vhwndClient, &rcl); /* query client window size */
aptl[0].x = 0; /* bottom left, in */
aptl[0].y = 0; /* device coordinates */
aptl[1].x = rcl.xRight - rcl.xLeft; /* top right, in */
aptl[1].y = rcl.yTop - rcl.yBottom; /* device coordinates */
/*
* The dimensions of the source rectangle are those of the source
* image.
*/
aptl[2].x = 0; /* bottom left, in */
aptl[2].y = 0; /* window coordinates */
aptl[3].x = vsizlImg.cx; /* top right, in */
aptl[3].y = vsizlImg.cy; /* device coordinates */
WinSetPointer(HWND_DESKTOP, vhptrWait);
/*
* Draw the image.
*/
WinDrawBitmap(vhps,
vhbm,
(PRECTL)NULL, /* draw whole bit map */
(PPOINTL)&rcl, /* bit-map destination */
/* is client window */
/* rectangle. */
0L,
0L,
DBM_STRETCH | DBM_IMAGEATTRS);
/* stretch or compress */
/* to suit, and use */
/* image attributes */
/* for color. */
WinSetPointer(HWND_DESKTOP, vhptrArrow);
} /* End of PaintSizedImage */
/*************************** End of img_pnt.c *************************/