|
|
1.1 root 1: /*-------------------------------------
2: CONVMENU.C -- Conventional Menu Use
3: -------------------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7:
8: #include <os2.h>
9: #include <stddef.h>
10: #include "convmenu.h"
11:
12: #define ID_TIMER 1
13:
14: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
15:
16: CHAR szCaption [] = "Conventional Menu" ;
17: HAB hab ;
18:
19: int main (void)
20: {
21: static CHAR szClientClass[] = "ConvMenu" ;
22: HMQ hmq ;
23: HWND hwndClient, hwndFrame ;
24: QMSG qmsg ;
25: ULONG flFrameFlags = FCF_STANDARD ;
26: ULONG flFrameStyle = WS_VISIBLE | FS_ACCELTABLE ;
27:
28: hab = WinInitialize (0) ;
29: hmq = WinCreateMsgQueue (hab, 0) ;
30:
31: WinRegisterClass (hab, szClientClass, ClientWndProc, 0L, 0) ;
32:
33: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, flFrameStyle,
34: &flFrameFlags, szClientClass,
35: szCaption,
36: 0L, NULL, ID_RESOURCE, &hwndClient) ;
37:
38: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
39: WinDispatchMsg (hab, &qmsg) ;
40:
41: WinDestroyWindow (hwndFrame) ;
42: WinDestroyMsgQueue (hmq) ;
43: WinTerminate (hab) ;
44: return 0 ;
45: }
46:
47: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
48: {
49: static BOOL fTimerGoing = FALSE ;
50: static COLOR colBackground [] = {
51: 0xFFFFFFL, 0xC0C0C0L, 0x808080L,
52: 0x404040L, 0x000000L
53: } ;
54: static HWND hwndMenu ;
55: static SHORT sCurrentBackground = IDM_WHITE ;
56: HPS hps ;
57: RECTL rcl ;
58:
59: switch (msg)
60: {
61: case WM_SIZE:
62: if (hwndMenu == NULL)
63: hwndMenu = WinWindowFromID (
64: WinQueryWindow (hwnd, QW_PARENT, FALSE),
65: FID_MENU) ;
66: return 0 ;
67:
68: case WM_INITMENU:
69: switch (SHORT1FROMMP (mp1))
70: {
71: case IDM_TIMER:
72: WinSendMsg (hwndMenu, MM_SETITEMATTR,
73: MPFROM2SHORT (IDM_START, TRUE),
74: MPFROM2SHORT (MIA_DISABLED,
75: !fTimerGoing &&
76: WinQuerySysValue (HWND_DESKTOP, SV_CTIMERS) ?
77: 0 : MIA_DISABLED)) ;
78:
79: WinSendMsg (hwndMenu, MM_SETITEMATTR,
80: MPFROM2SHORT (IDM_STOP, TRUE),
81: MPFROM2SHORT (MIA_DISABLED,
82: fTimerGoing ? 0 : MIA_DISABLED)) ;
83: return 0 ;
84: }
85: break ;
86:
87: case WM_COMMAND:
88: switch (COMMANDMSG(&msg)->cmd)
89: {
90: case IDM_NEW:
91: WinMessageBox (HWND_DESKTOP, hwnd,
92: "Bogus \"New\" Dialog",
93: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
94: return 0 ;
95:
96: case IDM_OPEN:
97: WinMessageBox (HWND_DESKTOP, hwnd,
98: "Bogus \"Open\" Dialog",
99: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
100: return 0 ;
101:
102: case IDM_SAVE:
103: WinMessageBox (HWND_DESKTOP, hwnd,
104: "Bogus \"Save\" Dialog",
105: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
106: return 0 ;
107:
108: case IDM_SAVEAS:
109: WinMessageBox (HWND_DESKTOP, hwnd,
110: "Bogus \"Save As\" Dialog",
111: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
112: return 0 ;
113:
114: case IDM_EXIT:
115: WinSendMsg (hwnd, WM_CLOSE, 0L, 0L) ;
116: return 0 ;
117:
118: case IDM_ABOUT:
119: WinMessageBox (HWND_DESKTOP, hwnd,
120: "Bogus \"About\" Dialog",
121: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
122: return 0 ;
123:
124: case IDM_START:
125: if (WinStartTimer (hab, hwnd, ID_TIMER, 1000))
126: fTimerGoing = TRUE ;
127: else
128: WinMessageBox (HWND_DESKTOP, hwnd,
129: "Too many clocks or timers", szCaption, 0,
130: MB_OK | MB_ICONEXCLAMATION) ;
131: return 0 ;
132:
133: case IDM_STOP:
134: WinStopTimer (hab, hwnd, ID_TIMER) ;
135: fTimerGoing = FALSE ;
136: return 0 ;
137:
138: case IDM_WHITE:
139: case IDM_LTGRAY:
140: case IDM_GRAY:
141: case IDM_DKGRAY:
142: case IDM_BLACK:
143: WinSendMsg (hwndMenu, MM_SETITEMATTR,
144: MPFROM2SHORT (sCurrentBackground, TRUE),
145: MPFROM2SHORT (MIA_CHECKED, 0)) ;
146:
147: sCurrentBackground = COMMANDMSG(&msg)->cmd ;
148:
149: WinSendMsg (hwndMenu, MM_SETITEMATTR,
150: MPFROM2SHORT (sCurrentBackground, TRUE),
151: MPFROM2SHORT (MIA_CHECKED, MIA_CHECKED)) ;
152:
153: WinInvalidateRect (hwnd, NULL, FALSE) ;
154: return 0 ;
155: }
156: break ;
157:
158: case WM_HELP:
159: WinMessageBox (HWND_DESKTOP, hwnd,
160: "Help not yet implemented",
161: szCaption, 0, MB_OK | MB_ICONEXCLAMATION) ;
162: return 0 ;
163:
164: case WM_TIMER:
165: WinAlarm (HWND_DESKTOP, WA_NOTE) ;
166: return 0 ;
167:
168: case WM_PAINT:
169: hps = WinBeginPaint (hwnd, NULL, NULL) ;
170: GpiSavePS (hps) ;
171:
172: GpiCreateLogColorTable (hps, 0L, LCOLF_RGB, 0L, 0L, NULL) ;
173:
174: WinQueryWindowRect (hwnd, &rcl) ;
175:
176: WinFillRect (hps, &rcl,
177: colBackground [sCurrentBackground - IDM_WHITE]) ;
178:
179: GpiRestorePS (hps, -1L) ;
180: WinEndPaint (hps) ;
181: return 0 ;
182:
183: case WM_CLOSE:
184: if (MBID_OK == WinMessageBox (HWND_DESKTOP, hwnd,
185: "Really want to end program?",
186: szCaption, 0,
187: MB_OKCANCEL | MB_ICONQUESTION))
188: break ;
189:
190: return 0 ;
191:
192: case WM_DESTROY:
193: if (fTimerGoing)
194: {
195: WinStopTimer (hab, hwnd, ID_TIMER) ;
196: fTimerGoing = FALSE ;
197: }
198: return 0 ;
199: }
200: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
201: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.