home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / cprog / dflt14.zip / SYSMENU.C < prev    next >
Text File  |  1992-07-29  |  3KB  |  107 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, tp, ht, wd;
  46.     WINDOW SystemMenuWnd;
  47.  
  48.     SystemMenu.PullDown[0].Selections[6].Accelerator = 
  49.         (GetClass(wnd) == APPLICATION) ? ALT_F4 : CTRL_F4;
  50.  
  51.     lf = GetLeft(wnd)+1;
  52.     tp = GetTop(wnd)+1;
  53.     ht = MenuHeight(SystemMenu.PullDown[0].Selections);
  54.     wd = MenuWidth(SystemMenu.PullDown[0].Selections);
  55.  
  56.     if (lf+wd > SCREENWIDTH-1)
  57.         lf = (SCREENWIDTH-1) - wd;
  58.     if (tp+ht > SCREENHEIGHT-2)
  59.         tp = (SCREENHEIGHT-2) - ht;
  60.  
  61.     SystemMenuWnd = CreateWindow(POPDOWNMENU, NULL,
  62.                 lf,tp,ht,wd,NULL,wnd,SystemMenuProc, 0);
  63.  
  64. #ifdef INCLUDE_RESTORE
  65.     if (wnd->condition == ISRESTORED)
  66.         DeactivateCommand(&SystemMenu, ID_SYSRESTORE);
  67.     else
  68.         ActivateCommand(&SystemMenu, ID_SYSRESTORE);
  69. #endif
  70.  
  71.     if (TestAttribute(wnd, MOVEABLE)
  72. #ifdef INCLUDE_MAXIMIZE
  73.             && wnd->condition != ISMAXIMIZED
  74. #endif
  75.                 )
  76.         ActivateCommand(&SystemMenu, ID_SYSMOVE);
  77.     else
  78.         DeactivateCommand(&SystemMenu, ID_SYSMOVE);
  79.  
  80.     if (wnd->condition != ISRESTORED ||
  81.             TestAttribute(wnd, SIZEABLE) == FALSE)
  82.         DeactivateCommand(&SystemMenu, ID_SYSSIZE);
  83.     else
  84.         ActivateCommand(&SystemMenu, ID_SYSSIZE);
  85.  
  86. #ifdef INCLUDE_MINIMIZE
  87.     if (wnd->condition == ISMINIMIZED ||
  88.             TestAttribute(wnd, MINMAXBOX) == FALSE)
  89.         DeactivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  90.     else
  91.         ActivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  92. #endif
  93.  
  94. #ifdef INCLUDE_MAXIMIZE
  95.     if (wnd->condition != ISRESTORED ||
  96.             TestAttribute(wnd, MINMAXBOX) == FALSE)
  97.         DeactivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  98.     else
  99.         ActivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  100. #endif
  101.  
  102.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  103.                 (PARAM) &SystemMenu.PullDown[0], 0);
  104.     SendMessage(SystemMenuWnd, SETFOCUS, TRUE, 0);
  105.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  106. }
  107.