mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
Fix creating the console system menu items
svn path=/trunk/; revision=23878
This commit is contained in:
parent
c2d18fb0b6
commit
dbf97f3b50
2 changed files with 132 additions and 86 deletions
|
@ -53,8 +53,104 @@ typedef struct GUI_CONSOLE_DATA_TAG
|
||||||
static BOOL ConsInitialized = FALSE;
|
static BOOL ConsInitialized = FALSE;
|
||||||
static HWND NotifyWnd;
|
static HWND NotifyWnd;
|
||||||
|
|
||||||
|
typedef struct _GUICONSOLE_MENUITEM
|
||||||
|
{
|
||||||
|
UINT uID;
|
||||||
|
const struct _GUICONSOLE_MENUITEM *SubMenu;
|
||||||
|
WORD wCmdID;
|
||||||
|
} GUICONSOLE_MENUITEM, *PGUICONSOLE_MENUITEM;
|
||||||
|
|
||||||
|
static const GUICONSOLE_MENUITEM GuiConsoleEditMenuItems[] =
|
||||||
|
{
|
||||||
|
{ IDS_MARK, NULL, ID_SYSTEM_EDIT_MARK },
|
||||||
|
{ IDS_COPY, NULL, ID_SYSTEM_EDIT_COPY },
|
||||||
|
{ IDS_PASTE, NULL, ID_SYSTEM_EDIT_PASTE },
|
||||||
|
{ IDS_SELECTALL, NULL, ID_SYSTEM_EDIT_SELECTALL },
|
||||||
|
{ IDS_SCROLL, NULL, ID_SYSTEM_EDIT_SCROLL },
|
||||||
|
{ IDS_FIND, NULL, ID_SYSTEM_EDIT_FIND },
|
||||||
|
|
||||||
|
{ 0, NULL, 0 } /* End of list */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const GUICONSOLE_MENUITEM GuiConsoleMainMenuItems[] =
|
||||||
|
{
|
||||||
|
{ (UINT)-1, NULL, 0 }, /* Separator */
|
||||||
|
{ IDS_EDIT, GuiConsoleEditMenuItems, 0 },
|
||||||
|
{ IDS_DEFAULTS, NULL, ID_SYSTEM_DEFAULTS },
|
||||||
|
{ IDS_PROPERTIES, NULL, ID_SYSTEM_PROPERTIES },
|
||||||
|
|
||||||
|
{ 0, NULL, 0 } /* End of list */
|
||||||
|
};
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
static VOID FASTCALL
|
||||||
|
GuiConsoleAppendMenuItems(HMENU hMenu,
|
||||||
|
const GUICONSOLE_MENUITEM *Items)
|
||||||
|
{
|
||||||
|
UINT i;
|
||||||
|
WCHAR szMenuString[255];
|
||||||
|
HMENU hSubMenu;
|
||||||
|
|
||||||
|
for (i = 0; Items[i].uID != 0; i++)
|
||||||
|
{
|
||||||
|
if (Items[i].uID != (UINT)-1)
|
||||||
|
{
|
||||||
|
if (LoadStringW(Win32CsrDllHandle,
|
||||||
|
Items[i].uID,
|
||||||
|
szMenuString,
|
||||||
|
sizeof(szMenuString) / sizeof(szMenuString[0])) > 0)
|
||||||
|
{
|
||||||
|
if (Items[i].SubMenu != NULL)
|
||||||
|
{
|
||||||
|
hSubMenu = CreatePopupMenu();
|
||||||
|
if (hSubMenu != NULL)
|
||||||
|
{
|
||||||
|
GuiConsoleAppendMenuItems(hSubMenu,
|
||||||
|
Items[i].SubMenu);
|
||||||
|
|
||||||
|
if (!AppendMenuW(hMenu,
|
||||||
|
MF_STRING | MF_POPUP,
|
||||||
|
(UINT_PTR)hSubMenu,
|
||||||
|
szMenuString))
|
||||||
|
{
|
||||||
|
DestroyMenu(hSubMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppendMenuW(hMenu,
|
||||||
|
MF_STRING,
|
||||||
|
Items[i].wCmdID,
|
||||||
|
szMenuString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppendMenuW(hMenu,
|
||||||
|
MF_SEPARATOR,
|
||||||
|
0,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID FASTCALL
|
||||||
|
GuiConsoleCreateSysMenu(PCSRSS_CONSOLE Console)
|
||||||
|
{
|
||||||
|
HMENU hMenu;
|
||||||
|
|
||||||
|
hMenu = GetSystemMenu(Console->hWindow,
|
||||||
|
FALSE);
|
||||||
|
if (hMenu != NULL)
|
||||||
|
{
|
||||||
|
GuiConsoleAppendMenuItems(hMenu,
|
||||||
|
GuiConsoleMainMenuItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static VOID FASTCALL
|
static VOID FASTCALL
|
||||||
GuiConsoleGetDataPointers(HWND hWnd, PCSRSS_CONSOLE *Console, PGUI_CONSOLE_DATA *GuiData)
|
GuiConsoleGetDataPointers(HWND hWnd, PCSRSS_CONSOLE *Console, PGUI_CONSOLE_DATA *GuiData)
|
||||||
{
|
{
|
||||||
|
@ -338,6 +434,8 @@ GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create)
|
||||||
PCSRSS_PROCESS_DATA ProcessData;
|
PCSRSS_PROCESS_DATA ProcessData;
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
|
|
||||||
|
Console->hWindow = hWnd;
|
||||||
|
|
||||||
if (NULL == GuiData)
|
if (NULL == GuiData)
|
||||||
{
|
{
|
||||||
DPRINT1("GuiConsoleNcCreate: HeapAlloc failed\n");
|
DPRINT1("GuiConsoleNcCreate: HeapAlloc failed\n");
|
||||||
|
@ -432,6 +530,8 @@ GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create)
|
||||||
SetTimer(hWnd, 1, CURSOR_BLINK_TIME, NULL);
|
SetTimer(hWnd, 1, CURSOR_BLINK_TIME, NULL);
|
||||||
SetEvent(GuiData->hGuiInitEvent);
|
SetEvent(GuiData->hGuiInitEvent);
|
||||||
|
|
||||||
|
GuiConsoleCreateSysMenu(Console);
|
||||||
|
|
||||||
return (BOOL) DefWindowProcW(hWnd, WM_NCCREATE, 0, (LPARAM) Create);
|
return (BOOL) DefWindowProcW(hWnd, WM_NCCREATE, 0, (LPARAM) Create);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1137,97 +1237,35 @@ GuiConsoleShowConsoleProperties(HWND hWnd, BOOL Defaults)
|
||||||
// then exchange this info with console.dll in
|
// then exchange this info with console.dll in
|
||||||
// some private way
|
// some private way
|
||||||
}
|
}
|
||||||
static LRESULT FASTCALL
|
static BOOL FASTCALL
|
||||||
GuiConsoleHandleSysMenuCommand(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
GuiConsoleHandleSysMenuCommand(HWND hWnd, WPARAM wParam)
|
||||||
{
|
{
|
||||||
DPRINT1("GuiConsoleHandleSysMenuCommand entered %d\n", wParam);
|
BOOL Ret = TRUE;
|
||||||
|
|
||||||
switch(wParam)
|
switch(wParam)
|
||||||
{
|
{
|
||||||
case IDS_MARK:
|
case ID_SYSTEM_EDIT_MARK:
|
||||||
case IDS_COPY:
|
case ID_SYSTEM_EDIT_COPY:
|
||||||
case IDS_PASTE:
|
case ID_SYSTEM_EDIT_PASTE:
|
||||||
case IDS_SELECTALL:
|
case ID_SYSTEM_EDIT_SELECTALL:
|
||||||
case IDS_SCROLL:
|
case ID_SYSTEM_EDIT_SCROLL:
|
||||||
case IDS_FIND:
|
case ID_SYSTEM_EDIT_FIND:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDS_DEFAULTS:
|
case ID_SYSTEM_DEFAULTS:
|
||||||
GuiConsoleShowConsoleProperties(hWnd, TRUE);
|
GuiConsoleShowConsoleProperties(hWnd, TRUE);
|
||||||
break;
|
break;
|
||||||
case IDS_PROPERTIES:
|
|
||||||
|
case ID_SYSTEM_PROPERTIES:
|
||||||
GuiConsoleShowConsoleProperties(hWnd, FALSE);
|
GuiConsoleShowConsoleProperties(hWnd, FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProcW(hWnd, Msg, wParam, lParam);
|
Ret = FALSE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return Ret;
|
||||||
}
|
|
||||||
static BOOLEAN FASTCALL
|
|
||||||
InsertItem(HMENU hMenu, INT fType, INT fMask, INT fState, HMENU hSubMenu, INT ResourceId)
|
|
||||||
{
|
|
||||||
MENUITEMINFO MenuItemInfo;
|
|
||||||
TCHAR szBuffer[MAX_PATH];
|
|
||||||
|
|
||||||
memset(&MenuItemInfo, 0x0, sizeof(MENUITEMINFO));
|
|
||||||
MenuItemInfo.cbSize = sizeof (MENUITEMINFO);
|
|
||||||
MenuItemInfo.fMask = fMask;
|
|
||||||
MenuItemInfo.fType = fType;
|
|
||||||
MenuItemInfo.fState = fState;
|
|
||||||
MenuItemInfo.hSubMenu = hSubMenu;
|
|
||||||
MenuItemInfo.wID = ResourceId;
|
|
||||||
|
|
||||||
if (fType != MFT_SEPARATOR)
|
|
||||||
{
|
|
||||||
MenuItemInfo.cch = LoadString(Win32CsrDllHandle, ResourceId, szBuffer, MAX_PATH);
|
|
||||||
if (!MenuItemInfo.cch)
|
|
||||||
{
|
|
||||||
DPRINT("LoadString failed ResourceId %d Error %x\n", ResourceId, GetLastError());
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
MenuItemInfo.dwTypeData = szBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (InsertMenuItem(hMenu, ResourceId, FALSE, &MenuItemInfo))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
DPRINT("InsertMenuItem failed Last error %x\n", GetLastError());
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static VOID FASTCALL
|
|
||||||
GuiConsoleCreateSysMenu(HWND hWnd)
|
|
||||||
{
|
|
||||||
HMENU hMenu;
|
|
||||||
HMENU hSubMenu;
|
|
||||||
|
|
||||||
|
|
||||||
hMenu = GetSystemMenu(hWnd, FALSE);
|
|
||||||
if (hMenu == NULL)
|
|
||||||
{
|
|
||||||
DPRINT("GetSysMenu failed\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* insert seperator */
|
|
||||||
InsertItem(hMenu, MFT_SEPARATOR, MIIM_FTYPE, 0, NULL, -1);
|
|
||||||
|
|
||||||
/* create submenu */
|
|
||||||
hSubMenu = CreatePopupMenu();
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_MARK);
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING | MIIM_STATE, MFS_GRAYED, NULL, IDS_COPY);
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_PASTE);
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SELECTALL);
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_SCROLL);
|
|
||||||
InsertItem(hSubMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_FIND);
|
|
||||||
InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING | MIIM_SUBMENU, 0, hSubMenu, IDS_EDIT);
|
|
||||||
|
|
||||||
/* create default/properties item */
|
|
||||||
InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_DEFAULTS);
|
|
||||||
InsertItem(hMenu, MIIM_STRING, MIIM_ID | MIIM_FTYPE | MIIM_STRING, 0, NULL, IDS_PROPERTIES);
|
|
||||||
DrawMenuBar(hWnd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK
|
static LRESULT CALLBACK
|
||||||
|
@ -1272,7 +1310,9 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
GuiConsoleMouseMove(hWnd, wParam, lParam);
|
GuiConsoleMouseMove(hWnd, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
return GuiConsoleHandleSysMenuCommand(hWnd, msg, wParam, lParam);
|
if (!GuiConsoleHandleSysMenuCommand(hWnd, wParam))
|
||||||
|
Result = DefWindowProcW(hWnd, msg, wParam, lParam);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Result = DefWindowProcW(hWnd, msg, wParam, lParam);
|
Result = DefWindowProcW(hWnd, msg, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
@ -1325,10 +1365,8 @@ GuiConsoleNotifyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HeapFree(Win32CsrApiHeap, 0, Buffer);
|
HeapFree(Win32CsrApiHeap, 0, Buffer);
|
||||||
}
|
}
|
||||||
Console->hWindow = NewWindow;
|
|
||||||
if (NULL != NewWindow)
|
if (NULL != NewWindow)
|
||||||
{
|
{
|
||||||
GuiConsoleCreateSysMenu(NewWindow);
|
|
||||||
//ShowScrollBar(NewWindow, SB_VERT, FALSE);
|
//ShowScrollBar(NewWindow, SB_VERT, FALSE);
|
||||||
//ShowScrollBar(NewWindow, SB_HORZ, FALSE);
|
//ShowScrollBar(NewWindow, SB_HORZ, FALSE);
|
||||||
SetWindowLongW(hWnd, GWL_USERDATA, GetWindowLongW(hWnd, GWL_USERDATA) + 1);
|
SetWindowLongW(hWnd, GWL_USERDATA, GetWindowLongW(hWnd, GWL_USERDATA) + 1);
|
||||||
|
|
|
@ -15,6 +15,14 @@
|
||||||
#define IDC_PROGRESS 101
|
#define IDC_PROGRESS 101
|
||||||
#define IDC_END_NOW 102
|
#define IDC_END_NOW 102
|
||||||
|
|
||||||
|
#define ID_SYSTEM_EDIT_MARK 1001
|
||||||
|
#define ID_SYSTEM_EDIT_COPY 1002
|
||||||
|
#define ID_SYSTEM_EDIT_PASTE 1003
|
||||||
|
#define ID_SYSTEM_EDIT_SELECTALL 1004
|
||||||
|
#define ID_SYSTEM_EDIT_SCROLL 1005
|
||||||
|
#define ID_SYSTEM_EDIT_FIND 1006
|
||||||
|
#define ID_SYSTEM_DEFAULTS 1007
|
||||||
|
#define ID_SYSTEM_PROPERTIES 1008
|
||||||
|
|
||||||
#define NCPOPUP_MENU 103
|
#define NCPOPUP_MENU 103
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue