|
|
1.1 root 1: /*------------------------------------------
2: BITCAT2.C -- Bitmap Creation and Display
3: ------------------------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7: #include <os2.h>
8: #include <stdlib.h>
9: #include "bitcat.h"
10:
11: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
12:
13: HAB hab ;
14:
15: int main (void)
16: {
17: static CHAR szClientClass [] = "BitCat2" ;
18: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
19: FCF_SIZEBORDER | FCF_MINMAX |
20: FCF_SHELLPOSITION | FCF_TASKLIST ;
21: HMQ hmq ;
22: HWND hwndFrame, hwndClient ;
23: QMSG qmsg ;
24:
25: hab = WinInitialize (0) ;
26: hmq = WinCreateMsgQueue (hab, 0) ;
27:
28: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
29:
30: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
31: &flFrameFlags, szClientClass, NULL,
32: 0L, NULL, 0, &hwndClient) ;
33:
34: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
35: WinDispatchMsg (hab, &qmsg) ;
36:
37: WinDestroyWindow (hwndFrame) ;
38: WinDestroyMsgQueue (hmq) ;
39: WinTerminate (hab) ;
40: return 0 ;
41: }
42:
43: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
44: {
45: static HBITMAP hbm ;
46: static HDC hdcMemory ;
47: static HPS hpsMemory ;
48: static SHORT cxClient, cyClient ;
49: BITMAPINFO *pbmi ;
50: BITMAPINFOHEADER bmp ;
51: HPS hps ;
52: POINTL aptl [4] ;
53: SIZEL sizl ;
54:
55: switch (msg)
56: {
57: case WM_CREATE:
58:
59: /*-------------------------------------------------
60: Open memory DC and create PS associated with it
61: -------------------------------------------------*/
62:
63: hdcMemory = DevOpenDC (hab, OD_MEMORY, "*", 0L, NULL, NULL) ;
64:
65: sizl.cx = 0 ;
66: sizl.cy = 0 ;
67:
68: hpsMemory = GpiCreatePS (hab, hdcMemory, &sizl,
69: PU_PELS | GPIF_DEFAULT |
70: GPIT_MICRO | GPIA_ASSOC) ;
71:
72: /*------------------------
73: Create 32 by 32 bitmap
74: ------------------------*/
75:
76: bmp.cbFix = sizeof bmp ;
77: bmp.cx = 32 ;
78: bmp.cy = 32 ;
79: bmp.cPlanes = 1 ;
80: bmp.cBitCount = 1 ;
81:
82: hbm = GpiCreateBitmap (hpsMemory, &bmp, 0L, NULL, NULL) ;
83:
84: /*------------------------------
85: Select bitmap into memory PS
86: ------------------------------*/
87:
88: GpiSetBitmap (hpsMemory, hbm) ;
89:
90: /*-------------------------------------
91: Set bitmap bits from abBitCat array
92: -------------------------------------*/
93:
94: pbmi = malloc (sizeof (BITMAPINFO) + sizeof (RGB)) ;
95:
96: pbmi->cbFix = sizeof bmp ;
97: pbmi->cx = 32 ;
98: pbmi->cy = 32 ;
99: pbmi->cPlanes = 1 ;
100: pbmi->cBitCount = 1 ;
101:
102: pbmi->argbColor[0].bBlue = 0 ;
103: pbmi->argbColor[0].bGreen = 0 ;
104: pbmi->argbColor[0].bRed = 0 ;
105: pbmi->argbColor[1].bBlue = 0xFF ;
106: pbmi->argbColor[1].bGreen = 0xFF ;
107: pbmi->argbColor[1].bRed = 0xFF ;
108:
109: GpiSetBitmapBits (hpsMemory, 0L, 32L, abBitCat, pbmi) ;
110:
111: free (pbmi) ;
112: return 0 ;
113:
114: case WM_SIZE:
115: cxClient = SHORT1FROMMP (mp2) ;
116: cyClient = SHORT2FROMMP (mp2) ;
117: return 0 ;
118:
119: case WM_PAINT:
120: hps = WinBeginPaint (hwnd, NULL, NULL) ;
121:
122: aptl[0].x = 0 ; // target lower left
123: aptl[0].y = 0 ;
124:
125: aptl[1].x = cxClient ; // target upper right
126: aptl[1].y = cyClient ;
127:
128: aptl[2].x = 0 ; // source lower left
129: aptl[2].y = 0 ;
130:
131: aptl[3].x = 32 ; // source upper right
132: aptl[3].y = 32 ;
133:
134: GpiBitBlt (hps, hpsMemory, 4L, aptl, ROP_SRCCOPY, BBO_AND) ;
135:
136: aptl[1] = aptl[3] ; // target upper right
137:
138: GpiBitBlt (hps, hpsMemory, 3L, aptl, ROP_SRCCOPY, BBO_AND) ;
139:
140: WinEndPaint (hps) ;
141: return 0 ;
142:
143: case WM_DESTROY:
144: GpiDestroyPS (hpsMemory) ;
145: DevCloseDC (hdcMemory) ;
146: GpiDeleteBitmap (hbm) ;
147: return 0 ;
148: }
149: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.