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