|
|
1.1 root 1: /*---------------------------------------------------
2: SYSVALS2.C -- System Values Display Program No. 2
3: ---------------------------------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7:
8: #include <os2.h>
9: #include <stdlib.h>
10: #include <stdio.h>
11: #include "sysvals.h"
12:
13: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
14:
15: int main (void)
16: {
17: static CHAR szClientClass [] = "SysVals2" ;
18: HAB hab ;
19: HMQ hmq ;
20: HWND hwndClient, hwndFrame ;
21: QMSG qmsg ;
22: ULONG flFrameFlags = FCF_STANDARD & ~FCF_MENU | FCF_VERTSCROLL ;
23: ULONG flFrameStyle = WS_VISIBLE ;
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, flFrameStyle,
31: &flFrameFlags, szClientClass,
32: "Presentation Manager System Values",
33: 0L, NULL, 0, &hwndClient) ;
34:
35: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
36: WinDispatchMsg (hab, &qmsg) ;
37:
38: WinDestroyWindow (hwndFrame) ;
39: WinDestroyMsgQueue (hmq) ;
40: WinTerminate (hab) ;
41:
42: return 0 ;
43: }
44:
45: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
46: {
47: static HWND hwndVscroll ;
48: static SHORT sVscrollPos, cxChar, cyChar, cyDesc, cxClient, cyClient ;
49: CHAR szBuffer [80] ;
50: FONTMETRICS fm ;
51: HPS hps ;
52: POINTL ptl ;
53: SHORT sLine ;
54:
55: switch (msg)
56: {
57: case WM_CREATE:
58: hps = WinGetPS (hwnd) ;
59:
60: GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
61:
62: cxChar = (SHORT) fm.lAveCharWidth ;
63: cyChar = (SHORT) fm.lMaxBaselineExt ;
64: cyDesc = (SHORT) fm.lMaxDescender ;
65:
66: WinReleasePS (hps) ;
67:
68: hwndVscroll = WinWindowFromID (
69: WinQueryWindow (hwnd, QW_PARENT, FALSE),
70: FID_VERTSCROLL) ;
71:
72: WinSendMsg (hwndVscroll, SBM_SETSCROLLBAR,
73: MPFROM2SHORT (sVscrollPos, 0),
74: MPFROM2SHORT (0, NUMLINES - 1)) ;
75: return 0 ;
76:
77: case WM_SIZE:
78: cxClient = SHORT1FROMMP (mp2) ;
79: cyClient = SHORT2FROMMP (mp2) ;
80: return 0 ;
81:
82: case WM_VSCROLL:
83: switch (SHORT2FROMMP (mp2))
84: {
85: case SB_LINEUP:
86: sVscrollPos -= 1 ;
87: break ;
88:
89: case SB_LINEDOWN:
90: sVscrollPos += 1 ;
91: break ;
92:
93: case SB_PAGEUP:
94: sVscrollPos -= cyClient / cyChar ;
95: break ;
96:
97: case SB_PAGEDOWN:
98: sVscrollPos += cyClient / cyChar ;
99: break ;
100:
101: case SB_SLIDERPOSITION:
102: sVscrollPos = SHORT1FROMMP (mp2) ;
103: break ;
104: }
105: sVscrollPos = max (0, min (sVscrollPos, NUMLINES - 1)) ;
106:
107: if (sVscrollPos != (SHORT) WinSendMsg (hwndVscroll,
108: SBM_QUERYPOS, 0L, 0L))
109: {
110: WinSendMsg (hwndVscroll, SBM_SETPOS,
111: MPFROM2SHORT (sVscrollPos, 0), NULL) ;
112: WinInvalidateRect (hwnd, NULL, FALSE) ;
113: }
114: return 0 ;
115:
116: case WM_PAINT:
117: hps = WinBeginPaint (hwnd, NULL, NULL) ;
118:
119: GpiErase (hps) ;
120:
121: for (sLine = 0 ; sLine < NUMLINES ; sLine++)
122: {
123: ptl.x = cxChar ;
124: ptl.y = cyClient - cyChar *
125: (sLine + 1 - sVscrollPos) + cyDesc ;
126:
127: GpiCharStringAt (hps, &ptl,
128: (LONG) sprintf (szBuffer, "%-20s%-34s%6ld",
129: sysvals[sLine].szIdentifier,
130: sysvals[sLine].szDescription,
131: WinQuerySysValue (HWND_DESKTOP,
132: sysvals[sLine].sIndex)),
133: szBuffer) ;
134: }
135:
136: WinEndPaint (hps) ;
137: return 0 ;
138: }
139: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.