home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 06 / dflat3 / sysmenu.c < prev    next >
Text File  |  1991-05-19  |  2KB  |  88 lines

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