home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 08 / dflat5 / sysmenu.c < prev    next >
Text File  |  1991-06-27  |  2KB  |  94 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. int SystemMenuProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  10. {
  11.     int mx, my;
  12.     WINDOW wnd1;
  13.     switch (msg)    {
  14.         case CREATE_WINDOW:
  15.             wnd->holdmenu = ActiveMenu;
  16.             ActiveMenu = SystemMenu;
  17.             SystemMenu[0].Selection = 0;
  18.             break;
  19.         case LEFT_BUTTON:
  20.             wnd1 = GetParent(wnd);
  21.             mx = (int) p1 - GetLeft(wnd1);
  22.             my = (int) p2 - GetTop(wnd1);
  23.             if (HitControlBox(wnd1, mx, my))
  24.                 return TRUE;
  25.             break;
  26.         case DOUBLE_CLICK:
  27.             if (p2 == GetTop(GetParent(wnd)))    {
  28.                 PostMessage(GetParent(wnd), msg, p1, p2);
  29.                 SendMessage(wnd, CLOSE_WINDOW, TRUE, 0);
  30.             }
  31.             return TRUE;
  32.         case SHIFT_CHANGED:
  33.             return TRUE;
  34.         case CLOSE_WINDOW:
  35.             ActiveMenu = wnd->holdmenu;
  36.             break;
  37.         default:
  38.             break;
  39.     }
  40.     return DefaultWndProc(wnd, msg, p1, p2);
  41. }
  42.  
  43. void BuildSystemMenu(WINDOW wnd)
  44. {
  45.     int lf = GetLeft(wnd)+1;
  46.     int tp = GetTop(wnd)+1;
  47.     int ht = MenuHeight(SystemMenu[0].Selections);
  48.     int wd = MenuWidth(SystemMenu[0].Selections);
  49.     WINDOW SystemMenuWnd;
  50.  
  51.     SystemMenu[0].Selections[6].Accelerator = 
  52.         (GetClass(wnd) == APPLICATION) ? ALT_F4 : CTRL_F4;
  53.  
  54.     if (lf+wd > SCREENWIDTH-1)
  55.         lf = (SCREENWIDTH-1) - wd;
  56.     if (tp+ht > SCREENHEIGHT-2)
  57.         tp = (SCREENHEIGHT-2) - ht;
  58.  
  59.     SystemMenuWnd = CreateWindow(POPDOWNMENU, NULL,
  60.                     lf,    tp,    ht,    wd,    NULL, wnd, SystemMenuProc, 0);
  61.  
  62.     if (wnd->condition == ISRESTORED)
  63.         DeactivateCommand(SystemMenu, ID_SYSRESTORE);
  64.     else
  65.         ActivateCommand(SystemMenu, ID_SYSRESTORE);
  66.  
  67.     if (TestAttribute(wnd, MOVEABLE) && wnd->condition != ISMAXIMIZED)
  68.         ActivateCommand(SystemMenu, ID_SYSMOVE);
  69.     else
  70.         DeactivateCommand(SystemMenu, ID_SYSMOVE);
  71.  
  72.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, SIZEABLE) == FALSE)
  73.         DeactivateCommand(SystemMenu, ID_SYSSIZE);
  74.     else
  75.         ActivateCommand(SystemMenu, ID_SYSSIZE);
  76.  
  77.     if (wnd->condition == ISMINIMIZED || TestAttribute(wnd, MINMAXBOX) == FALSE)
  78.         DeactivateCommand(SystemMenu, ID_SYSMINIMIZE);
  79.     else
  80.         ActivateCommand(SystemMenu, ID_SYSMINIMIZE);
  81.  
  82.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, MINMAXBOX) == FALSE)
  83.         DeactivateCommand(SystemMenu, ID_SYSMAXIMIZE);
  84.     else
  85.         ActivateCommand(SystemMenu, ID_SYSMAXIMIZE);
  86.  
  87.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  88.                 (PARAM) SystemMenu, 0);
  89.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  90. }
  91.  
  92. #endif
  93.  
  94.