|
|
1.1 root 1: #define INCL_DOS
2: #define INCL_WIN
3: #define INCL_GPI
4: #include "os2.h"
5: #include "pmbind1.h"
6:
7:
8: /*********************************************************************/
9: /* Windows/PM Cardfile Shared Code */
10: /* */
11: /* (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved */
12: /*********************************************************************/
13:
14:
15: /*********************************************************************/
16: /* Internal variables used by binding system. */
17: /*********************************************************************/
18:
19: extern HAB hAB; /* Holds the anchor block handle */
20: extern HMQ hMQ; /* Holds the message queue handle */
21: extern int temp; /* Temp Var, used for many mappings */
22: extern POINTL Point; /* Temp Var, used for many mappings */
23: extern WPOINT pt; /* Temp Var, used for many mappings */
24: extern HHEAP hLocalHeap; /* Holds the cardfile's local heap */
25: extern int WinHeight; /* Holds the current translate value */
26: extern int b_CharHeight; /* Character height, default is 0 */
27: extern WRECT TempRect; /* Temp Var, used for many mappings */
28: extern PWRECT lTempRect; /* Temp Var, used for many mappings */
29: extern HWND hwndTemp; /* Temp Var, used for many mappings */
30: extern POINTL PointArray[]; /* Temp Var, used for many mappings */
31:
32:
33:
34: /*********************************************************************/
35: /* Internal functions called by binding system. */
36: /*********************************************************************/
37:
38: int FAR PASCAL lstrlen( PSZ );
39: PSZ FAR PASCAL lstrcpy( PSZ, PSZ );
40: PSZ FAR PASCAL lstrcat( PSZ, PSZ );
41: PSZ FAR PASCAL lmemcpy( PSZ, PSZ, unsigned );
42: int CheckScrollBars( HWND, unsigned, int );
43:
44:
45: /*********************************************************************/
46: /* Internal defines accessed only in binding system */
47: /*********************************************************************/
48:
49: /* These resolve type conflicts with the MPARAM type */
50:
51: #define NewSendMsg( a, b, c, d ) \
52: LONGFROMMR( WinSendMsg( a, b, MPFROMLONG(c), MPFROMLONG(d) ))
53:
54: #define NewSendDlgItemMsg( a, b, c, d, e ) \
55: LONGFROMMR(WinSendDlgItemMsg( a, b, c, \
56: MPFROMLONG(d), MPFROMLONG(e) ))
57:
58: #define NewDefWindowProc( a, b, c, d ) \
59: LONGFROMMR( WinDefWindowProc( a, b, MPFROMLONG(c), MPFROMLONG(d) ))
60:
61:
62: /*********************************************************************/
63: /* Exeternal functions available to the application */
64: /*********************************************************************/
65:
66: int DlgDirList( HWND, PSZ, unsigned, unsigned, unsigned );
67: unsigned DlgDirSelect( HWND, PSZ, unsigned );
68: int OpenFile( PSZ, LPOFSTRUCT, WORD );
69:
70:
71: /********************************************************************/
72: /* Various symbol defines */
73: /********************************************************************/
74:
75:
76: /* Message box id's */
77:
78: #define IDOK MBID_OK
79: #define IDCANCEL MBID_CANCEL
80: #define IDABORT MBID_ABORT
81: #define IDRETRY MBID_RETRY
82: #define IDIGNORE MBID_IGNORE
83: #define IDYES MBID_YES
84: #define IDNO MBID_NO
85:
86: /* Scroll bar notification messages */
87:
88: #define SB_THUMBTRACK SB_SLIDERTRACK
89: #define SB_THUMBPOSITION SB_SLIDERPOSITION
90:
91:
92: /* Window styles (CreateWindow mapping) */
93:
94: #define WS_HSCROLL FCF_HORZSCROLL
95: #define WS_VSCROLL FCF_VERTSCROLL
96:
97: /* At last check, FCF_STANDARD included: title bar, sys menu, min-max, */
98: /* and sizeborder. */
99:
100: #define WS_TILEDWINDOW FCF_STANDARD
101:
102: /* GetWindowLong indices */
103:
104: #define GWL_WNDPROC QWP_PFNWP
105:
106: /* Mix Modes, raster ops */
107:
108: #define R2_NOTXORPEN FM_NOTXORSRC
109:
110: #define TRANSPARENT FM_LEAVEALONE
111: #define OPAQUE FM_OVERPAINT
112:
113: #define WHITENESS ROP_ONE
114:
115: /* Cursors. Use POINTER_FLAG to indicate */
116: /* that a PM constant is a system pointer */
117: /* When calling Cursor functions, strip off */
118: /* flag. */
119:
120: #define POINTER_FLAG 0x4000
121: #define POINTER_MASK ~POINTER_FLAG
122:
123: #define IDC_ARROW SPTR_ARROW | POINTER_FLAG
124: #define IDC_WAIT SPTR_WAIT | POINTER_FLAG
125:
126: /* Menu flags */
127:
128: #define MF_CHECKED MIA_CHECKED
129: #define MF_UNCHECKED 0
130:
131: #define MF_ENABLED 0
132: #define MF_GRAYED MIA_DISABLED
133:
134: /* Scroll bar id's */
135:
136: #define SB_HORZ FID_HORZSCROLL
137: #define SB_VERT FID_VERTSCROLL
138:
139: /* Show Window commands */
140:
141: #define SHOW_OPENWINDOW TRUE
142: #define HIDE_WINDOW FALSE
143:
144: /* GetSysColor constant */
145:
146: #define COLOR_WINDOW SYSCLR_WINDOW
147:
148: /* Virtual Keys */
149:
150: #define VK_NEXT VK_PAGEDOWN
151: #define VK_PRIOR VK_PAGEUP
152: #define VK_LBUTTON VK_BUTTON1
153:
154:
155: /********************************************************************/
156: /* Messages */
157: /********************************************************************/
158:
159: #define WM_KEYFIRST WM_CHAR
160: #define WM_KEYLAST WM_CHAR
161:
162: #define WM_INITDIALOG WM_INITDLG
163:
164: #define WM_LBUTTONUP WM_BUTTON1UP
165: #define WM_LBUTTONDOWN WM_BUTTON1DOWN
166: #define WM_LBUTTONDBLCLK WM_BUTTON1DBLCLK
167:
168: /* This message is will cause problems if applications try to use */
169: /* it in the same way as the Windows message. Should probably */
170: /* take it out. */
171:
172: #define WM_ERASEBKGND WM_ERASEBACKGROUND
173:
174: #define WM_CUT EM_CUT
175: #define WM_COPY EM_COPY
176: #define WM_PASTE EM_PASTE
177:
178: #define EM_LIMITTEXT EM_SETTEXTLIMIT
179: #define EM_GETMODIFY EM_QUERYCHANGED
180: #define EM_GETSEL EM_QUERYSEL
181:
182: #define LBN_SELCHANGE LN_SELECT
183: #define LBN_DBLCLK LN_ENTER
184:
185:
186:
187: /********************************************************************/
188: /* General Utility Defines */
189: /********************************************************************/
190:
191: #define BLUE_COLOR CLR_BLUE
192: #define RED_COLOR CLR_RED
193: #define WHITE_COLOR CLR_WHITE
194: #define BLACK_COLOR CLR_BLACK
195:
196: /* Min/Max may not be in the PM include files */
197: #ifndef min
198: #define min( x, y ) ((x) < (y) ? x : y )
199: #endif
200:
201: #ifndef max
202: #define max( x, y ) ((x) > (y) ? x : y )
203: #endif
204:
205:
206: /********************************************************************/
207: /* Translations */
208: /********************************************************************/
209:
210:
211: /* The RGB format is reversed in PM */
212:
213: #define CONVERT_RGB( x ) ((((DWORD)(x) & 0xff) << 16) | \
214: ((DWORD)(x) & 0x00ff00) | \
215: ((DWORD)(x) >> 16))
216:
217:
218: /* This define sets up main to initialize and call WinMain */
219:
220: #define ENTRYPROCEDURE() int cdecl main( void ); \
221: int cdecl main() { \
222: hAB = WinInitialize( NULL ); \
223: INIT_APP(); \
224: WinMain( hAB, 0, "", SHOW_OPENWINDOW ); \
225: TERMINATE_APP(); \
226: WinTerminate( hAB ); \
227: return( 0 ); \
228: }
229:
230: /* Create message queue, local heap. Internal to pmbind.h */
231:
232: #define INIT_APP() hMQ = WinCreateMsgQueue( hAB, 0 ); \
233: hLocalHeap = WinCreateHeap( 0, 0, 0, \
234: 0, 0, HM_MOVEABLE )
235:
236: /* Destroy message queue, local heap. Internal to pmbind.h */
237:
238: #define TERMINATE_APP() WinDestroyHeap( hLocalHeap ); \
239: WinDestroyMsgQueue( hMQ )
240:
241: /* Get frame from window */
242:
243: #define FRAME( a ) WinQueryWindow( a, QW_PARENT, FALSE )
244:
245:
246: /**********************************************************/
247: /* Defines used for coordinate transformations */
248: /**********************************************************/
249:
250: /* External defines */
251:
252: #define TRANSLATE_Y( x ) (WinHeight - x)
253: #define TRANSLATE_RECT( x ) x.yTop = WinHeight - x.yTop; \
254: x.yBottom = WinHeight - x.yBottom;
255:
256: #define SET_CHARHEIGHT( x ) b_CharHeight = x
257:
258: #define TRANSLATE_COORDS( x ) WinHeight = x
259:
260: #define MAKEPOINT( a ) (pt.x = LOUSHORT( a ), \
261: pt.y = HIUSHORT( a ), pt)
262:
263: /* Internal defines */
264:
265: #define TRANSY( y ) (WinHeight ? (WinHeight - (y)) : (y))
266:
267: #define STUFFPOINT( a, b ) Point.x = (long) a; \
268: Point.y = (long) TRANSY(b)
269:
270:
271: /*********************************************************************/
272: /* Control Window Mappings */
273: /* */
274: /* Mappings: */
275: /* GetMenu( hWnd ) */
276: /* EnableMenuItem( hMenu, wId, fEnableOn ) */
277: /* CheckMenuItem( hMenu, wId, fCheckOn ) */
278: /* SROLL_RANGE( hWnd, wId, wPos, wHigh, wLow ) */
279: /* SetScrollPos( hWnd, wId, wPos, fRedraw ) */
280: /*********************************************************************/
281:
282: /*********/
283: /* Menus */
284: /*********/
285:
286: #define GetMenu( a ) WinWindowFromID( FRAME( a ), FID_MENU )
287:
288: #define EnableMenuItem( a, b, c ) NewSendMsg( a, MM_SETITEMATTR, \
289: MAKELONG( b, TRUE ), \
290: MAKELONG( MIA_DISABLED, c ) )
291:
292: #define CheckMenuItem( a, b, c ) NewSendMsg( a, MM_SETITEMATTR, \
293: MAKELONG( b, TRUE ), \
294: MAKELONG( MIA_CHECKED, c ) )
295: /***************/
296: /* Scroll Bars */
297: /***************/
298:
299: /* Scroll_Range( hwnd, Id value, Pos, First, Last ) */
300:
301: #define SCROLL_RANGE( a, b, c, d, e ) { if \
302: (CheckScrollBars( FRAME(a), b, d != e )) \
303: NewSendDlgItemMsg( FRAME(a), b, SBM_SETSCROLLBAR, \
304: c, MAKELONG( d, e ) ); }
305:
306: #define SetScrollPos( a, b, c, d ) \
307: NewSendDlgItemMsg( FRAME(a), b, SBM_SETPOS, \
308: c, 0 )
309:
310:
311: /*********************************************************************/
312: /* Window DC Mappings */
313: /* */
314: /* In most cases that an IC should be created, the app. just */
315: /* wants system font information. In PM, just return PS of the */
316: /* desktop. */
317: /* */
318: /* Mappings: */
319: /* GetDC( hWnd ) */
320: /* ReleaseDC( hDC ) */
321: /* CreateIC( lpDriv, lpDevice, lpOutput, lpInit ) */
322: /* DeleteDC( hDC ) */
323: /*********************************************************************/
324:
325: #define GetDC( x ) WinGetPS( x )
326: #define ReleaseDC( x, y ) WinReleasePS( (HPS) y )
327: #define CreateIC( a, b, c, d ) WinGetPS( HWND_DESKTOP )
328: #define DeleteDC( x ) WinReleasePS( (HPS) x )
329:
330:
331:
332:
333: /*********************************************************************/
334: /* Memory Management Mappings */
335: /* */
336: /* */
337: /* Here's a good chance to test the flexibility of this system. */
338: /* GlobalAlloc maps to DosAllocSeg which creates a Global ID for */
339: /* each call. For applications making many global allocs of a */
340: /* small size (like Cardfile), it's probably better to use */
341: /* DosSubAlloc for some of these. */
342: /* */
343: /* Mappings: */
344: /* LocalAlloc( wFlags, wSize ) */
345: /* LocalFree( wBlock ) */
346: /* GlobalAlloc( wFlags, wSize ) */
347: /* GlobalReAlloc( wHandle, wSize, wFlags ) */
348: /* GlobalUnlock( wHandle ); */
349: /* GlobalFree( wHandle ); */
350: /* GlobalLock( wHandle ); */
351: /*********************************************************************/
352:
353: #define LocalAlloc( x, y ) WinAllocMem( hLocalHeap, y )
354: #define LocalFree( x ) WinFreeMem( hLocalHeap, (char *) x, 0 )
355:
356: #define GlobalAlloc( x, y ) (DosAllocSeg( (unsigned) y, \
357: (PSEL)&temp, 0 ), temp)
358: #define GlobalReAlloc( Han, Size, x ) !DosReallocSeg( \
359: (USHORT) Size, (SEL)Han )
360: #define GlobalUnlock( x )
361: #define GlobalFree( x ) DosFreeSeg( (SEL) x )
362: #define GlobalLock( x ) MAKEP( x, 0 )
363:
364:
365:
366: /*********************************************************************/
367: /* Dialog Management Mappings */
368: /* */
369: /* MAKEINTRESOURCE is not needed because PM resources are always */
370: /* ints. The mapping for GetDlgItemInt doesn't take lpfSuccess */
371: /* into account. */
372: /* */
373: /* Mappings: */
374: /* MAKEINTRESOURCE( x ) */
375: /* MessageBeep( wBeepType ) */
376: /* MessageBox( hWnd, lpText, lpCaption, wType ) */
377: /* DialogBox( hInst, lpTemplate, hParent, lpFunc ) */
378: /* EndDialog( hDlg, wResult ) */
379: /* SendDlgItemMessage( hDlg, wId, wMsg, wParam, lParam ) */
380: /* GetDlgItem( hDlg, wId ) */
381: /* SetDlgItemText( hDlg, wId, lpBuf ) */
382: /* GetDlgItemText( hDlg, wId, lpBuf, wMax ) */
383: /* GetDlgItemInt( hDlg, wId, lpfSuccess, fSigned ) */
384: /* SetDlgItemInt( hDlg, wId, wValue, fSigned ) */
385: /*********************************************************************/
386:
387: /*******************************/
388: /* Dialog Creation/Destruction */
389: /*******************************/
390:
391: #define MAKEINTRESOURCE( x ) x
392: #define MessageBeep( a ) WinAlarm( HWND_DESKTOP, WA_WARNING )
393: #define MessageBox( a, b, c, d ) WinMessageBox( HWND_DESKTOP, a, b, \
394: c, 0, d )
395: #define DialogBox( a, b, c, d ) WinDlgBox( HWND_DESKTOP, c, d, \
396: NULL, b, NULL )
397: #define EndDialog( x, y ) WinDismissDlg( x, y )
398:
399: /*******************/
400: /* Dialog messages */
401: /*******************/
402:
403: #define SendDlgItemMessage( a, b, c, d, e ) \
404: NewSendDlgItemMsg( a, b, c, d, e )
405:
406: /***************************************/
407: /* Dialog: Setting/Getting information */
408: /***************************************/
409:
410: #define GetDlgItem( x, y ) WinWindowFromID( x, y )
411:
412: #define GetDlgItemText( a, b, c, d ) \
413: WinQueryDlgItemText( a, b , d, c )
414:
415: #define SetDlgItemText( x, y, z ) \
416: WinSetDlgItemText( x, y , z )
417:
418: #define GetDlgItemInt( a, b, c, d ) \
419: ( WinQueryDlgItemShort( a, b, &temp, d ), temp )
420:
421: #define SetDlgItemInt( a, b, c, d ) WinSetDlgItemShort( a, b, c, d )
422:
423:
424:
425: /*********************************************************************/
426: /* Rectangle Mappings */
427: /* */
428: /* Application should call TRANSLATE_RECT after most SetRect's. */
429: /* */
430: /* Mappings: */
431: /* SetRect( lpRect, left, top, right, bottom ) */
432: /* InflateRect( lpRect, dx, dy ) */
433: /* PtInRect( lpRect, pt ) */
434: /*********************************************************************/
435:
436: #define SetRect( a, b, c, d, e ) WinSetRect( hAB, a, b, e, d, c )
437: #define InflateRect( a, b, c ) WinInflateRect( hAB, a, b, c )
438: #define PtInRect( a, b ) WinPtInRect( hAB, a, (PPOINTL) &b )
439:
440:
441: /*********************************************************************/
442: /* Window Attribute Mappings */
443: /* */
444: /* GetWindowLong is available for a minimal number of indices. */
445: /* */
446: /* Mappings: */
447: /* SetWindowText( hWnd, lpText ) */
448: /* GetWindowText( hWnd, lpBuf, wMax ) */
449: /* GetWindowTextLength( hWnd ) */
450: /* GetClientRect( hWnd, lpRect ) */
451: /* GetWindowLong( hWnd, wIndex ) */
452: /* SetWindowLong( hWnd, wIndex, lValue ) */
453: /*********************************************************************/
454:
455: #define SetWindowText( x, y ) WinSetWindowText( x, y )
456: #define GetWindowText( x, y, z ) WinQueryWindowText( x, z, y )
457: #define GetWindowTextLength( a ) WinQueryWindowTextLength( a )
458: #define GetClientRect( x, y ) WinQueryWindowRect( x, y )
459: #define GetWindowLong( a, b ) WinQueryWindowULong( a, b )
460: #define SetWindowLong( a, b, c ) WinSetWindowULong( a, b, c )
461:
462:
463:
464:
465: /*********************************************************************/
466: /* Window Painting Mappings */
467: /* */
468: /* For the time being, punt on the issues of brushes. Treat */
469: /* brushes as colors in PM version. This should eventually be */
470: /* changed to treat a brush as a pointer to some BUNDLESTRUCT */
471: /* */
472: /* Mappings: */
473: /* BeginPaint( hWnd, lpPaintStruct ) */
474: /* EndPaint( hWnd, lpPaintStruct ) */
475: /* UpdateWindow( hWnd ) */
476: /* InvalidateRect( hWnd, lpRect, fErase ) */
477: /* ShowWindow( hWnd, fShow ) */
478: /* FillRect( hWnd, lpRect, hBrush ) */
479: /* InvertRect( hWnd, lpRect ) */
480: /* FrameRect( hWnd, lpRect, hBrush ) */
481: /* ScrollWindow( hWnd, dx, dy, lpRect, lpClipRect ) */
482: /*********************************************************************/
483:
484:
485: /* The BeginPaint mapping utilizes the PAINTSTRUCT defined in */
486: /* PmBind.h. This is not valid for applications which own the */
487: /* PS. */
488:
489: #define BeginPaint( a, b ) \
490: (b)->hdc = WinBeginPaint( a, (HPS) NULL, (PRECTL) &(b)->rcPaint )
491:
492: #define EndPaint( a, b ) WinEndPaint( (b)->hdc )
493:
494:
495: #define UpdateWindow( x ) WinUpdateWindow( x )
496: #define InvalidateRect( x, y, z ) WinInvalidateRect( x, y, TRUE )
497: #define ShowWindow( x, y ) WinShowWindow( x, y )
498:
499: #define FillRect( x, y, z ) WinFillRect( x, y, z )
500: #define InvertRect( a, b ) WinInvertRect( a, b )
501:
502: /* Assume with is 5 units for PM mapping */
503: #define FrameRect( a, b, c ) \
504: WinDrawBorder( a, b, 1, 1, c, 0L, DB_PATCOPY )
505:
506: #define ScrollWindow( a, b, c, d, e ) \
507: WinScrollWindow( a, b, - c, d, e, NULL, NULL, SW_INVALIDATERGN )
508:
509:
510: /*********************************************************************/
511: /* Window Manipulation Mappings */
512: /* */
513: /* CreateWindow only works for the Main Window! When creating */
514: /* child windows, use separate compilation. None of these */
515: /* routines operate automatically on the frame. In the source */
516: /* code, use the frame macro (I think ScrollWindow is the only */
517: /* routine which retrieves the frame window automatically). */
518: /* */
519: /* Mappings: */
520: /* CreateWindow( lpClass, lpCaption, dwStyle, x, y, width, height,*/
521: /* hParent, hMenu, hInst, lpParam ) */
522: /* DestroyWindow( hWnd ) */
523: /* MoveWindow( hWnd, x, y, Width, Height, fRePaint ) */
524: /* GetFocus() */
525: /* SetFocus( hWnd ) */
526: /* IsWindowEnabled( hWnd ) */
527: /* EnableWindow( hWnd, fEnable ) */
528: /*********************************************************************/
529:
530: #define CreateWindow( a, b, c, d, e, f, g, h, i, j, k ) \
531: (ctlData=c, \
532: WinCreateStdWindow( HWND_DESKTOP, WS_VISIBLE | FS_ICON, \
533: &ctlData, a, b, 0L, NULL, 1, \
534: (HWND FAR *) &hwndTemp ), \
535: hwndTemp )
536:
537: #define DestroyWindow( a ) WinDestroyWindow( a )
538:
539: #define MoveWindow( a, b, c, d, e, f ) \
540: WinSetWindowPos( a, NULL, b, TRANSY(c) - e, d, \
541: e, SWP_SIZE | SWP_MOVE )
542:
543:
544: #define GetFocus() WinQueryFocus( HWND_DESKTOP, FALSE )
545: #define SetFocus( x ) WinSetFocus( hAB, x )
546:
547:
548: #define IsWindowEnabled( a ) WinIsWindowEnabled( a )
549: #define EnableWindow( a, b ) WinEnableWindow( a, b )
550:
551:
552:
553: /*********************************************************************/
554: /* Ansi Mappings */
555: /* */
556: /* Another chance to prove the system flexibility! These */
557: /* functions will eventually accept call the functions with the */
558: /* code pages. */
559: /* */
560: /* Mappings: */
561: /* AnsiNext( lpStr ) */
562: /* AnsiPrev( lpStr ) */
563: /* AnsiUpper( lpStr ) */
564: /* ANSICHARUP( lpStr ) - (High word is 0) */
565: /*********************************************************************/
566:
567: #define LOWERCHAR( a ) ( (a <= 'z') && (a >= 'a') )
568:
569: #define AnsiNext( a ) (a + 1)
570: #define AnsiPrev( a, b ) (b - 1)
571: #define AnsiUpper( Str ) \
572: { for (temp = 0; (Str)[temp]; temp++ ) \
573: if (LOWERCHAR((Str)[temp])) \
574: (Str)[temp] = (Str)[temp] & 0xdf; }
575:
576: #define ANSICHARUP( a ) ( ((BYTE)((DWORD)(a))) & 0xdf)
577:
578:
579:
580: /*********************************************************************/
581: /* Clipboard Mappings */
582: /* */
583: /* Mappings: */
584: /* EnumClipbrdFmts( wFormat ) */
585: /* OpenClipboard( hWnd ) */
586: /* CloseClipboard( hWnd ) */
587: /* EnumClipboardFormats( hWnd ) */
588: /*********************************************************************/
589:
590: #define EnumClipbrdFmts( x ) WinEnumClipbrdFmts( hAB, x )
591: #define OpenClipboard( a ) WinOpenClipbrd( hAB )
592: #define CloseClipboard() WinCloseClipbrd( hAB )
593: #define EnumClipboardFormats( a ) WinEnumClipbrdFmts( hAB, a )
594:
595:
596:
597: /*********************************************************************/
598: /* Messaging Mappings */
599: /* */
600: /* The accelerator mapping may need to be changed. */
601: /* */
602: /* Mappings: */
603: /* SendMessage( hWnd, wMsg, wParam, lParam ) */
604: /* GetMessage( lpMsg, hWnd, wMin, wMax ) */
605: /* DispatchMessage( lpMsg ) */
606: /* TranslateAccelerator( hWnd, hAccel, lpMsg ) */
607: /* TranslateMessage( lpMsg ) */
608: /* PeekMessage( lpMsg, hWnd, wMin, wMax, fRemove ) */
609: /*********************************************************************/
610:
611: #define SendMessage( a, b, c, d ) \
612: NewSendMsg( a, b, c, d )
613:
614: #define GetMessage( a, b, c, d ) WinGetMsg( hAB, a, b, c, d )
615: #define DispatchMessage( a ) WinDispatchMsg( hAB, a )
616: #define TranslateAccelerator( a, b, c ) FALSE
617: #define TranslateMessage( a )
618:
619: #define PeekMessage( a, b, c, d, e ) \
620: WinPeekMsg( hAB, a, b, c, d, e ? PM_REMOVE : PM_NOREMOVE )
621:
622:
623: /*********************************************************************/
624: /* Cursor Mappings */
625: /* */
626: /* The LoadCursor mapping must distinguish between the system */
627: /* pointer and a resource. Therefore, the constants used for the */
628: /* system pointers include a bit, POINTER_FLAG. If this is found */
629: /* in the index, it is masked off and the system pointer is */
630: /* retrieved. This method runs the risk of collision of */
631: /* POINTER_FLAG with the constants used for the system pointers */
632: /* (they may change) as well as the values in the user resource */
633: /* file. */
634: /* */
635: /* Mappings: */
636: /* SetCapture( hWnd ) */
637: /* ReleaseCapture( hWnd ) */
638: /* SetCursor( hCurs ) */
639: /* LoadCursor( hCurs ) */
640: /*********************************************************************/
641:
642: #define SetCapture( a ) WinSetCapture( hAB, a )
643: #define ReleaseCapture() WinSetCapture( hAB, NULL )
644:
645: #define SetCursor( a ) WinSetPointer( HWND_DESKTOP, a )
646: #define LoadCursor( a, b ) \
647: ( b & POINTER_FLAG ? \
648: WinQuerySysPointer( HWND_DESKTOP, b & ~POINTER_MASK, TRUE ) : \
649: WinLoadPointer( HWND_DESKTOP, NULL, b ) )
650:
651:
652: /*********************************************************************/
653: /* Misc Mappings */
654: /*********************************************************************/
655:
656:
657:
658: #define LoadString( a, b, c, d ) \
659: WinLoadString( hAB, NULL, b, (SHORT) d, c )
660:
661: #define DefWindowProc( a, b, c, d ) NewDefWindowProc( a, b, c, d )
662:
663: /* Originally, there was a problem is GpiCharStringAt was called */
664: /* with 0 chars to write. Hence the if statement. */
665:
666: #define TextOut( a, b, c, d, e ) \
667: { if (e) { STUFFPOINT( b, c ); \
668: Point.y -= b_CharHeight; \
669: GpiCharStringAt( a, &Point, (LONG) e, d ); } }
670:
671: #define SetBkMode( a, b ) GpiSetBackMix( a, b )
672:
673: #define LoadAccelerators( a, b ) NULL
674: #define LoadIcon( a, b ) NULL
675:
676: /* For the time being, don't worry about this one */
677: #define GetTempFileName( a, b, c, d ) (lstrcpy( d, "cardfile.tmp" ), 1)
678:
679: /* Neither of these functions is available or necessary in PM */
680: #define MakeProcInstance( a, b ) (PFNWP) (a)
681: #define GetInstanceData( a, b, c )
682:
683: #define MoveTo( a, b, c ) {STUFFPOINT( b, c ); GpiMove( a, &Point );}
684: #define LineTo( a, b, c ) {STUFFPOINT( b, c ); GpiLine( a, &Point );}
685:
686: #define SetROP2( a, b ) GpiSetMix( a, b )
687:
688: #define PatBlt( a, b, c, d, e, f ) \
689: { PointArray[0].x = b; \
690: PointArray[0].y = TRANSY( c + e ); \
691: PointArray[1].x = b + d; \
692: PointArray[1].y = TRANSY( c ); \
693: GpiBitBlt( a, a, 2L, PointArray, f, BLTMODE_NOSCALE ); }
694:
695: #define DPtoLP( a, b, c ) \
696: GpiConvert( a, CVTC_DEVICE, CVTC_WORLD, (long) c, (PPOINTL) b );
697:
698: /* Only a few of the fields in the TEXTMETRICS structure are mapped */
699: /* onto the FONTMETRICS structure (see pmbind1.h) */
700:
701: #define GetTextMetrics( a, b ) \
702: GpiQueryFontMetrics( a, (LONG) sizeof( FONTMETRICS ), b )
703:
704: #define CallWindowProc( a, b, c, d, e ) \
705: LONGFROMMR(a( b, c, MPFROMLONG(d), MPFROMLONG(e) ))
706:
707: #define GetKeyState( a ) WinGetKeyState( HWND_DESKTOP, a )
708:
709: #define GetSysColor( a ) WinQuerySysColor( HWND_DESKTOP, a, 0L )
710:
711: #define CreateSolidBrush( a ) a
712:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.