reactos/rosapps/dflat32/sysmenu.c
2003-06-19 02:48:13 +00:00

109 lines
3.3 KiB
C

/* ------------- sysmenu.c ------------ */
#include "dflat.h"
int DfSystemMenuProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
{
int mx, my;
DFWINDOW wnd1;
switch (msg) {
case DFM_CREATE_WINDOW:
wnd->holdmenu = DfActiveMenuBar;
DfActiveMenuBar = &DfSystemMenu;
DfSystemMenu.PullDown[0].Selection = 0;
break;
case DFM_LEFT_BUTTON:
wnd1 = DfGetParent(wnd);
mx = (int) p1 - DfGetLeft(wnd1);
my = (int) p2 - DfGetTop(wnd1);
if (DfHitControlBox(wnd1, mx, my))
return TRUE;
break;
case DFM_LB_CHOOSE:
DfPostMessage(wnd, DFM_CLOSE_WINDOW, 0, 0);
break;
case DOUBLE_CLICK:
if (p2 == DfGetTop(DfGetParent(wnd))) {
DfPostMessage(DfGetParent(wnd), msg, p1, p2);
DfSendMessage(wnd, DFM_CLOSE_WINDOW, TRUE, 0);
}
return TRUE;
case DFM_SHIFT_CHANGED:
return TRUE;
case DFM_CLOSE_WINDOW:
DfActiveMenuBar = wnd->holdmenu;
break;
default:
break;
}
return DfDefaultWndProc(wnd, msg, p1, p2);
}
/* ------- Build a system menu -------- */
void DfBuildSystemMenu(DFWINDOW wnd)
{
int lf, tp, ht, wd;
DFWINDOW SystemMenuWnd;
DfSystemMenu.PullDown[0].Selections[6].Accelerator =
(DfGetClass(wnd) == DF_APPLICATION) ? DF_ALT_F4 : DF_CTRL_F4;
lf = DfGetLeft(wnd)+1;
tp = DfGetTop(wnd)+1;
ht = DfMenuHeight(DfSystemMenu.PullDown[0].Selections);
wd = DfMenuWidth(DfSystemMenu.PullDown[0].Selections);
if (lf+wd > DfGetScreenWidth()-1)
lf = (DfGetScreenWidth()-1) - wd;
if (tp+ht > DfGetScreenHeight()-2)
tp = (DfGetScreenHeight()-2) - ht;
SystemMenuWnd = DfDfCreateWindow(DF_POPDOWNMENU, NULL,
lf,tp,ht,wd,NULL,wnd,DfSystemMenuProc, 0);
#ifdef INCLUDE_RESTORE
if (wnd->condition == DF_SRESTORED)
DfDeactivateCommand(&DfSystemMenu, DF_ID_SYSRESTORE);
else
DfActivateCommand(&DfSystemMenu, DF_ID_SYSRESTORE);
#endif
if (DfTestAttribute(wnd, DF_MOVEABLE)
#ifdef INCLUDE_MAXIMIZE
&& wnd->condition != DF_ISMAXIMIZED
#endif
)
DfActivateCommand(&DfSystemMenu, DF_ID_SYSMOVE);
else
DfDeactivateCommand(&DfSystemMenu, DF_ID_SYSMOVE);
if (wnd->condition != DF_SRESTORED ||
DfTestAttribute(wnd, DF_SIZEABLE) == FALSE)
DfDeactivateCommand(&DfSystemMenu, DF_ID_SYSSIZE);
else
DfActivateCommand(&DfSystemMenu, DF_ID_SYSSIZE);
#ifdef INCLUDE_MINIMIZE
if (wnd->condition == DF_ISMINIMIZED ||
DfTestAttribute(wnd, DF_MINMAXBOX) == FALSE)
DfDeactivateCommand(&DfSystemMenu, DF_ID_SYSMINIMIZE);
else
DfActivateCommand(&DfSystemMenu, DF_ID_SYSMINIMIZE);
#endif
#ifdef INCLUDE_MAXIMIZE
if (wnd->condition != DF_SRESTORED ||
DfTestAttribute(wnd, DF_MINMAXBOX) == FALSE)
DfDeactivateCommand(&DfSystemMenu, DF_ID_SYSMAXIMIZE);
else
DfActivateCommand(&DfSystemMenu, DF_ID_SYSMAXIMIZE);
#endif
DfSendMessage(SystemMenuWnd, DFM_BUILD_SELECTIONS,
(DF_PARAM) &DfSystemMenu.PullDown[0], 0);
DfSendMessage(SystemMenuWnd, DFM_SETFOCUS, TRUE, 0);
DfSendMessage(SystemMenuWnd, DFM_SHOW_WINDOW, 0, 0);
}
/* EOF */