home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk11 / petzold / chap13 / poormenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-20  |  3.8 KB  |  107 lines

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