home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 05 / d_flat / sysmenu.c < prev    next >
Text File  |  1991-02-18  |  2KB  |  78 lines

  1. /* ------------- sysmenu.c ------------ */
  2.  
  3. #include <stdio.h>
  4. #include "dflat.h"
  5.  
  6. extern MENU SystemMenu[];
  7. extern MENU *ActiveMenu;
  8. static MENU *holdmenu;
  9.  
  10. WINDOW SystemMenuWnd = NULL;
  11.  
  12. int SystemMenuProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  13. {
  14.     switch (msg)    {
  15.         case CREATE_WINDOW:
  16.             holdmenu = ActiveMenu;
  17.             ActiveMenu = SystemMenu;
  18.             SystemMenu[0].Selection = 0;
  19.             break;
  20.         case CLOSE_WINDOW:
  21.             ActiveMenu = holdmenu;
  22.             SystemMenuWnd = NULL;
  23.             break;
  24.         default:
  25.             break;
  26.     }
  27.     return DefaultWndProc(wnd, msg, p1, p2);
  28. }
  29.  
  30. void BuildSystemMenu(WINDOW wnd)
  31. {
  32.     int lf = GetLeft(wnd)+1;
  33.     int tp = GetTop(wnd)+1;
  34.     int ht = MenuHeight(SystemMenu[0].Selections);
  35.     int wd = MenuWidth(SystemMenu[0].Selections);
  36.  
  37.     if (lf+wd > SCREENWIDTH-1)
  38.         lf = SCREENWIDTH-1 - wd;
  39.     if (tp+ht > 23)
  40.         tp = 23 - ht;
  41.  
  42.     SystemMenuWnd = CreateWindow(POPDOWNMENU, NULL,
  43.                     lf,    tp,    ht,    wd,    NULL, wnd, SystemMenuProc, 0);
  44.  
  45.     if (wnd->condition == ISRESTORED)
  46.         DeactivateCommand(ID_SYSRESTORE);
  47.     else
  48.         ActivateCommand(ID_SYSRESTORE);
  49.  
  50.     if (TestAttribute(wnd, MOVEABLE) && wnd->condition != ISMAXIMIZED)
  51.         ActivateCommand(ID_SYSMOVE);
  52.     else
  53.         DeactivateCommand(ID_SYSMOVE);
  54.  
  55.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, SIZEABLE) == FALSE)
  56.         DeactivateCommand(ID_SYSSIZE);
  57.     else
  58.         ActivateCommand(ID_SYSSIZE);
  59.  
  60.     if (wnd->condition == ISMINIMIZED || TestAttribute(wnd, MINMAXBOX) == FALSE)
  61.         DeactivateCommand(ID_SYSMINIMIZE);
  62.     else
  63.         ActivateCommand(ID_SYSMINIMIZE);
  64.  
  65.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, MINMAXBOX) == FALSE)
  66.         DeactivateCommand(ID_SYSMAXIMIZE);
  67.     else
  68.         ActivateCommand(ID_SYSMAXIMIZE);
  69.  
  70.  
  71.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  72.                 (PARAM) SystemMenu, 0);
  73.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  74. }
  75.  
  76.  
  77.  
  78.