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