|
|
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.