home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 215 / DDJ9206.ZIP / DFLT12.ZIP / SYSMENU.C < prev    next >
Text File  |  1992-01-21  |  3KB  |  104 lines

  1. /* ------------- sysmenu.c ------------ */
  2.  
  3. #include "dflat.h"
  4.  
  5. int SystemMenuProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  6. {
  7.     int mx, my;
  8.     WINDOW wnd1;
  9.     switch (msg)    {
  10.         case CREATE_WINDOW:
  11.             wnd->holdmenu = ActiveMenuBar;
  12.             ActiveMenuBar = &SystemMenu;
  13.             SystemMenu.PullDown[0].Selection = 0;
  14.             break;
  15.         case LEFT_BUTTON:
  16.             wnd1 = GetParent(wnd);
  17.             mx = (int) p1 - GetLeft(wnd1);
  18.             my = (int) p2 - GetTop(wnd1);
  19.             if (HitControlBox(wnd1, mx, my))
  20.                 return TRUE;
  21.             break;
  22.         case LB_CHOOSE:
  23.             PostMessage(wnd, CLOSE_WINDOW, 0, 0);
  24.             break;
  25.         case DOUBLE_CLICK:
  26.             if (p2 == GetTop(GetParent(wnd)))    {
  27.                 PostMessage(GetParent(wnd), msg, p1, p2);
  28.                 SendMessage(wnd, CLOSE_WINDOW, TRUE, 0);
  29.             }
  30.             return TRUE;
  31.         case SHIFT_CHANGED:
  32.             return TRUE;
  33.         case CLOSE_WINDOW:
  34.             ActiveMenuBar = wnd->holdmenu;
  35.             break;
  36.         default:
  37.             break;
  38.     }
  39.     return DefaultWndProc(wnd, msg, p1, p2);
  40. }
  41.  
  42. /* ------- Build a system menu -------- */
  43. void BuildSystemMenu(WINDOW wnd)
  44. {
  45.     int lf = GetLeft(wnd)+1;
  46.     int tp = GetTop(wnd)+1;
  47.     int ht = MenuHeight(SystemMenu.PullDown[0].Selections);
  48.     int wd = MenuWidth(SystemMenu.PullDown[0].Selections);
  49.     WINDOW SystemMenuWnd;
  50.  
  51.     SystemMenu.PullDown[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. #ifdef INCLUDE_RESTORE
  63.     if (wnd->condition == ISRESTORED)
  64.         DeactivateCommand(&SystemMenu, ID_SYSRESTORE);
  65.     else
  66.         ActivateCommand(&SystemMenu, ID_SYSRESTORE);
  67. #endif
  68.  
  69.     if (TestAttribute(wnd, MOVEABLE)
  70. #ifdef INCLUDE_MAXIMIZE
  71.             && wnd->condition != ISMAXIMIZED
  72. #endif
  73.                 )
  74.         ActivateCommand(&SystemMenu, ID_SYSMOVE);
  75.     else
  76.         DeactivateCommand(&SystemMenu, ID_SYSMOVE);
  77.  
  78.     if (wnd->condition != ISRESTORED ||
  79.             TestAttribute(wnd, SIZEABLE) == FALSE)
  80.         DeactivateCommand(&SystemMenu, ID_SYSSIZE);
  81.     else
  82.         ActivateCommand(&SystemMenu, ID_SYSSIZE);
  83.  
  84. #ifdef INCLUDE_MINIMIZE
  85.     if (wnd->condition == ISMINIMIZED ||
  86.             TestAttribute(wnd, MINMAXBOX) == FALSE)
  87.         DeactivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  88.     else
  89.         ActivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  90. #endif
  91.  
  92. #ifdef INCLUDE_MAXIMIZE
  93.     if (wnd->condition != ISRESTORED ||
  94.             TestAttribute(wnd, MINMAXBOX) == FALSE)
  95.         DeactivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  96.     else
  97.         ActivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  98. #endif
  99.  
  100.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  101.                 (PARAM) &SystemMenu.PullDown[0], 0);
  102.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  103. }
  104.