mirror of
https://github.com/reactos/reactos.git
synced 2024-10-31 20:02:55 +00:00
109 lines
3.1 KiB
C
109 lines
3.1 KiB
C
|
/* ------------- sysmenu.c ------------ */
|
||
|
|
||
|
#include "dflat32/dflat.h"
|
||
|
|
||
|
int SystemMenuProc(DFWINDOW wnd, DFMESSAGE msg, PARAM p1, PARAM p2)
|
||
|
{
|
||
|
int mx, my;
|
||
|
DFWINDOW wnd1;
|
||
|
switch (msg) {
|
||
|
case CREATE_WINDOW:
|
||
|
wnd->holdmenu = ActiveMenuBar;
|
||
|
ActiveMenuBar = &SystemMenu;
|
||
|
SystemMenu.PullDown[0].Selection = 0;
|
||
|
break;
|
||
|
case LEFT_BUTTON:
|
||
|
wnd1 = GetParent(wnd);
|
||
|
mx = (int) p1 - GetLeft(wnd1);
|
||
|
my = (int) p2 - GetTop(wnd1);
|
||
|
if (HitControlBox(wnd1, mx, my))
|
||
|
return TRUE;
|
||
|
break;
|
||
|
case LB_CHOOSE:
|
||
|
DfPostMessage(wnd, CLOSE_WINDOW, 0, 0);
|
||
|
break;
|
||
|
case DOUBLE_CLICK:
|
||
|
if (p2 == GetTop(GetParent(wnd))) {
|
||
|
DfPostMessage(GetParent(wnd), msg, p1, p2);
|
||
|
DfSendMessage(wnd, CLOSE_WINDOW, TRUE, 0);
|
||
|
}
|
||
|
return TRUE;
|
||
|
case SHIFT_CHANGED:
|
||
|
return TRUE;
|
||
|
case CLOSE_WINDOW:
|
||
|
ActiveMenuBar = wnd->holdmenu;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
return DefaultWndProc(wnd, msg, p1, p2);
|
||
|
}
|
||
|
|
||
|
/* ------- Build a system menu -------- */
|
||
|
void BuildSystemMenu(DFWINDOW wnd)
|
||
|
{
|
||
|
int lf, tp, ht, wd;
|
||
|
DFWINDOW SystemMenuWnd;
|
||
|
|
||
|
SystemMenu.PullDown[0].Selections[6].Accelerator =
|
||
|
(GetClass(wnd) == APPLICATION) ? ALT_F4 : CTRL_F4;
|
||
|
|
||
|
lf = GetLeft(wnd)+1;
|
||
|
tp = GetTop(wnd)+1;
|
||
|
ht = MenuHeight(SystemMenu.PullDown[0].Selections);
|
||
|
wd = MenuWidth(SystemMenu.PullDown[0].Selections);
|
||
|
|
||
|
if (lf+wd > DfGetScreenWidth()-1)
|
||
|
lf = (DfGetScreenWidth()-1) - wd;
|
||
|
if (tp+ht > DfGetScreenHeight()-2)
|
||
|
tp = (DfGetScreenHeight()-2) - ht;
|
||
|
|
||
|
SystemMenuWnd = DfCreateWindow(POPDOWNMENU, NULL,
|
||
|
lf,tp,ht,wd,NULL,wnd,SystemMenuProc, 0);
|
||
|
|
||
|
#ifdef INCLUDE_RESTORE
|
||
|
if (wnd->condition == ISRESTORED)
|
||
|
DeactivateCommand(&SystemMenu, ID_SYSRESTORE);
|
||
|
else
|
||
|
ActivateCommand(&SystemMenu, ID_SYSRESTORE);
|
||
|
#endif
|
||
|
|
||
|
if (TestAttribute(wnd, MOVEABLE)
|
||
|
#ifdef INCLUDE_MAXIMIZE
|
||
|
&& wnd->condition != ISMAXIMIZED
|
||
|
#endif
|
||
|
)
|
||
|
ActivateCommand(&SystemMenu, ID_SYSMOVE);
|
||
|
else
|
||
|
DeactivateCommand(&SystemMenu, ID_SYSMOVE);
|
||
|
|
||
|
if (wnd->condition != ISRESTORED ||
|
||
|
TestAttribute(wnd, SIZEABLE) == FALSE)
|
||
|
DeactivateCommand(&SystemMenu, ID_SYSSIZE);
|
||
|
else
|
||
|
ActivateCommand(&SystemMenu, ID_SYSSIZE);
|
||
|
|
||
|
#ifdef INCLUDE_MINIMIZE
|
||
|
if (wnd->condition == ISMINIMIZED ||
|
||
|
TestAttribute(wnd, MINMAXBOX) == FALSE)
|
||
|
DeactivateCommand(&SystemMenu, ID_SYSMINIMIZE);
|
||
|
else
|
||
|
ActivateCommand(&SystemMenu, ID_SYSMINIMIZE);
|
||
|
#endif
|
||
|
|
||
|
#ifdef INCLUDE_MAXIMIZE
|
||
|
if (wnd->condition != ISRESTORED ||
|
||
|
TestAttribute(wnd, MINMAXBOX) == FALSE)
|
||
|
DeactivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
|
||
|
else
|
||
|
ActivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
|
||
|
#endif
|
||
|
|
||
|
DfSendMessage(SystemMenuWnd, BUILD_SELECTIONS,
|
||
|
(PARAM) &SystemMenu.PullDown[0], 0);
|
||
|
DfSendMessage(SystemMenuWnd, SETFOCUS, TRUE, 0);
|
||
|
DfSendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
|
||
|
}
|
||
|
|
||
|
/* EOF */
|