|
|
1.1 root 1: /*----------------------------------------------------
2: BUTTONS3.C -- Square Button Demonstration with DLL
3: ----------------------------------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7: #include <os2.h>
8: #include "sqbtnlib.h"
9:
10: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
11:
12: HAB hab ;
13:
14: int main (void)
15: {
16: static CHAR szClientClass[] = "Buttons3" ;
17: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
18: FCF_SIZEBORDER | FCF_MINMAX |
19: FCF_SHELLPOSITION | FCF_TASKLIST ;
20: HMQ hmq ;
21: HWND hwndFrame, hwndClient ;
22: QMSG qmsg ;
23:
24: hab = WinInitialize (0) ;
25: hmq = WinCreateMsgQueue (hab, 0) ;
26:
27: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
28:
29: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
30: &flFrameFlags, szClientClass, NULL,
31: 0L, NULL, 0, &hwndClient) ;
32:
33: WinSendMsg (hwndFrame, WM_SETICON,
34: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
35: NULL) ;
36:
37: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
38: WinDispatchMsg (hab, &qmsg) ;
39:
40: WinDestroyWindow (hwndFrame) ;
41: WinDestroyMsgQueue (hmq) ;
42: WinTerminate (hab) ;
43: return 0 ;
44: }
45:
46: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
47: {
48: static CHAR szSqBtnClass [] = "SqBtn",
49: *szButtonLabel [] = { "Smaller", "Larger" } ;
50: static HWND hwndFrame, hwndButton [2] ;
51: static SHORT cxClient, cyClient, cxChar, cyChar ;
52: FONTMETRICS fm ;
53: HPS hps ;
54: SHORT id ;
55: RECTL rcl ;
56:
57: switch (msg)
58: {
59: case WM_CREATE :
60: hwndFrame = WinQueryWindow (hwnd, QW_PARENT, FALSE) ;
61:
62: hps = WinGetPS (hwnd) ;
63: GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
64: cxChar = (SHORT) fm.lAveCharWidth ;
65: cyChar = (SHORT) fm.lMaxBaselineExt ;
66: WinReleasePS (hps) ;
67:
68: RegisterSqBtnClass (hab) ;
69:
70: for (id = 0 ; id < 2 ; id++)
71: hwndButton [id] = WinCreateWindow (
72: hwnd, // Parent
73: "SqBtn", // Class
74: szButtonLabel [id], // Text
75: WS_VISIBLE, // Style
76: 0, 0, // Position
77: 12 * cxChar, // Width
78: 2 * cyChar, // Height
79: hwnd, // Owner
80: HWND_BOTTOM, // Placement
81: id, // ID
82: NULL, // Ctrl Data
83: NULL) ; // Pres Params
84: return 0 ;
85:
86: case WM_SIZE :
87: cxClient = SHORT1FROMMP (mp2) ;
88: cyClient = SHORT2FROMMP (mp2) ;
89:
90: for (id = 0 ; id < 2 ; id++)
91: WinSetWindowPos (hwndButton [id], NULL,
92: cxClient / 2 + (14 * id - 13) * cxChar,
93: (cyClient - 2 * cyChar) / 2,
94: 0, 0, SWP_MOVE) ;
95: return 0 ;
96:
97: case WM_COMMAND:
98: WinQueryWindowRect (hwnd, &rcl) ;
99: WinMapWindowPoints (hwnd, HWND_DESKTOP, (PPOINTL) &rcl, 2) ;
100:
101: switch (COMMANDMSG(&msg)->cmd) // Child ID
102: {
103: case 0: // "Smaller"
104: rcl.xLeft += cxClient / 20 ;
105: rcl.xRight -= cxClient / 20 ;
106: rcl.yBottom += cyClient / 20 ;
107: rcl.yTop -= cyClient / 20 ;
108: break ;
109:
110: case 1: // "Larger"
111: rcl.xLeft -= cxClient / 20 ;
112: rcl.xRight += cxClient / 20 ;
113: rcl.yBottom -= cyClient / 20 ;
114: rcl.yTop += cyClient / 20 ;
115: break ;
116: }
117: WinCalcFrameRect (hwndFrame, &rcl, FALSE) ;
118:
119: WinSetWindowPos (hwndFrame, NULL,
120: (SHORT) rcl.xLeft, (SHORT) rcl.yBottom,
121: (SHORT) rcl.xRight - (SHORT) rcl.xLeft,
122: (SHORT) rcl.yTop - (SHORT) rcl.yBottom,
123: SWP_MOVE | SWP_SIZE) ;
124: return 0 ;
125:
126: case WM_ERASEBACKGROUND:
127: return 1 ;
128: }
129: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
130: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.