|
|
1.1 root 1: /*----------------------------------
2: POORMENU.C -- Poor Person's Menu
3: ----------------------------------*/
4:
5: #define INCL_WIN
6:
7: #include <os2.h>
8: #include <stddef.h>
9:
10: #define IDM_ABOUT 10
11: #define IDM_HELP 11
12:
13: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
14:
15: CHAR szCaption [] = "Poor Person\'s Menu" ;
16:
17: int main (void)
18: {
19: static CHAR szClientClass[] = "PoorMenu" ;
20: HAB hab ;
21: HMQ hmq ;
22: HWND hwndClient, hwndFrame ;
23: QMSG qmsg ;
24: ULONG flFrameFlags = FCF_STANDARD & ~FCF_MENU ;
25: ULONG flFrameStyle = WS_VISIBLE ;
26:
27: hab = WinInitialize (0) ;
28: hmq = WinCreateMsgQueue (hab, 0) ;
29:
30: WinRegisterClass (hab, szClientClass, ClientWndProc, 0L, 0) ;
31:
32: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, flFrameStyle,
33: &flFrameFlags, szClientClass,
34: szCaption,
35: 0L, NULL, 0, &hwndClient) ;
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 *szMenuText [3] = { NULL, "About PoorMenu...", "Help" } ;
49: static MENUITEM mi [3] = {
50: MIT_END, MIS_SEPARATOR, 0, NULL, NULL,
51: MIT_END, MIS_TEXT, IDM_ABOUT, NULL, NULL,
52: MIT_END, MIS_TEXT, IDM_HELP, NULL, NULL
53: } ;
54: HWND hwndSysMenu, hwndSysSubMenu ;
55: MENUITEM miSysMenu ;
56: SHORT sItem, idSysMenu ;
57:
58: switch (msg)
59: {
60: case WM_CREATE:
61: hwndSysMenu = WinWindowFromID (
62: WinQueryWindow (hwnd, QW_PARENT, FALSE),
63: FID_SYSMENU) ;
64:
65: idSysMenu = (SHORT) WinSendMsg (hwndSysMenu,
66: MM_ITEMIDFROMPOSITION,
67: NULL, NULL) ;
68:
69: WinSendMsg (hwndSysMenu, MM_QUERYITEM,
70: MPFROM2SHORT (idSysMenu, FALSE),
71: MPFROMP (&miSysMenu)) ;
72:
73: hwndSysSubMenu = miSysMenu.hwndSubMenu ;
74:
75: for (sItem = 0 ; sItem < 3 ; sItem++)
76: WinSendMsg (hwndSysSubMenu, MM_INSERTITEM,
77: MPFROMP (mi + sItem),
78: MPFROMP (szMenuText [sItem])) ;
79: return 0 ;
80:
81: case WM_COMMAND:
82: switch (COMMANDMSG(&msg)->cmd)
83: {
84: case IDM_ABOUT:
85: WinMessageBox (HWND_DESKTOP, hwnd,
86: "(C) Charles Petzold, 1988",
87: szCaption, 0, MB_OK | MB_ICONASTERISK) ;
88: return 0 ;
89:
90: case IDM_HELP:
91: WinMessageBox (HWND_DESKTOP, hwnd,
92: "Help not yet implemented",
93: szCaption, 0, MB_OK | MB_ICONEXCLAMATION) ;
94: return 0 ;
95: }
96: break ;
97:
98: case WM_ERASEBACKGROUND:
99: return 1 ;
100: }
101: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.