mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 12:40:33 +00:00
added "hide on minimize" feature and added context menu to the tray icon
svn path=/trunk/; revision=10318
This commit is contained in:
parent
61430b7b65
commit
26ecba1c13
8 changed files with 89 additions and 16 deletions
|
@ -117,10 +117,13 @@ END
|
|||
|
||||
IDR_TRAY_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
MENUITEM "&Restore", ID_RESTORE
|
||||
MENUITEM "&Close", ID_FILE_EXIT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Always On Top", ID_OPTIONS_ALWAYSONTOP, CHECKED
|
||||
POPUP "DUMMY"
|
||||
BEGIN
|
||||
MENUITEM "&Restore", ID_RESTORE
|
||||
MENUITEM "&Close", ID_FILE_EXIT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Always On Top", ID_OPTIONS_ALWAYSONTOP
|
||||
END
|
||||
END
|
||||
|
||||
IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE
|
||||
|
|
|
@ -133,11 +133,13 @@ END
|
|||
|
||||
IDR_TRAY_POPUP MENU DISCARDABLE
|
||||
BEGIN
|
||||
MENUITEM "&Restaurar", ID_RESTORE
|
||||
MENUITEM "&Cerrar", ID_FILE_EXIT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP,
|
||||
CHECKED
|
||||
POPUP "DUMMY"
|
||||
BEGIN
|
||||
MENUITEM "&Restaurar", ID_RESTORE
|
||||
MENUITEM "&Cerrar", ID_FILE_EXIT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP
|
||||
END
|
||||
END
|
||||
|
||||
IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE
|
||||
|
|
|
@ -39,8 +39,6 @@
|
|||
#include "optnmenu.h"
|
||||
#include "procpage.h"
|
||||
|
||||
#define OPTIONS_MENU_INDEX 1
|
||||
|
||||
void TaskManager_OnOptionsAlwaysOnTop(void)
|
||||
{
|
||||
HMENU hMenu;
|
||||
|
@ -53,7 +51,7 @@ void TaskManager_OnOptionsAlwaysOnTop(void)
|
|||
* Check or uncheck the always on top menu item
|
||||
* and update main window.
|
||||
*/
|
||||
if (GetMenuState(hOptionsMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND) & MF_CHECKED)
|
||||
if ((GetWindowLong(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0)
|
||||
{
|
||||
CheckMenuItem(hOptionsMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_UNCHECKED);
|
||||
TaskManagerSettings.AlwaysOnTop = FALSE;
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#ifndef __OPTNMENU_H
|
||||
#define __OPTNMENU_H
|
||||
|
||||
#define OPTIONS_MENU_INDEX 1
|
||||
|
||||
void TaskManager_OnOptionsAlwaysOnTop(void);
|
||||
void TaskManager_OnOptionsMinimizeOnUse(void);
|
||||
void TaskManager_OnOptionsHideWhenMinimized(void);
|
||||
|
|
|
@ -84,7 +84,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
|
||||
CloseHandle(hProcess);
|
||||
|
||||
/* Now lets get the SE_DEBUG_NAME priviledge
|
||||
/* Now lets get the SE_DEBUG_NAME privilege
|
||||
* so that we can debug processes
|
||||
*/
|
||||
|
||||
|
@ -155,6 +155,9 @@ LRESULT CALLBACK TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||
case ID_OPTIONS_SHOW16BITTASKS:
|
||||
TaskManager_OnOptionsShow16BitTasks();
|
||||
break;
|
||||
case ID_RESTORE:
|
||||
TaskManager_OnRestoreMainWindow();
|
||||
break;
|
||||
case ID_VIEW_LARGE:
|
||||
ApplicationPage_OnViewLargeIcons();
|
||||
break;
|
||||
|
@ -260,6 +263,48 @@ LRESULT CALLBACK TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||
}
|
||||
break;
|
||||
|
||||
case WM_ONTRAYICON:
|
||||
switch(lParam)
|
||||
{
|
||||
case WM_RBUTTONDOWN:
|
||||
{
|
||||
POINT pt;
|
||||
BOOL OnTop;
|
||||
HMENU hMenu, hPopupMenu;
|
||||
|
||||
GetCursorPos(&pt);
|
||||
|
||||
OnTop = ((GetWindowLong(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0);
|
||||
|
||||
hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_TRAY_POPUP));
|
||||
hPopupMenu = GetSubMenu(hMenu, 0);
|
||||
|
||||
if(IsWindowVisible(hMainWnd))
|
||||
{
|
||||
DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
|
||||
}
|
||||
|
||||
if(OnTop)
|
||||
{
|
||||
CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_CHECKED);
|
||||
}
|
||||
|
||||
SetForegroundWindow(hMainWnd);
|
||||
TrackPopupMenuEx(hPopupMenu, 0, pt.x, pt.y, hMainWnd, NULL);
|
||||
|
||||
DestroyMenu(hMenu);
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONDBLCLK:
|
||||
TaskManager_OnRestoreMainWindow();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
idctrl = (int)wParam;
|
||||
pnmh = (LPNMHDR)lParam;
|
||||
|
@ -606,7 +651,13 @@ void OnSize( UINT nType, int cx, int cy )
|
|||
RECT rc;
|
||||
|
||||
if (nType == SIZE_MINIMIZED)
|
||||
{
|
||||
if(TaskManagerSettings.HideWhenMinimized)
|
||||
{
|
||||
ShowWindow(hMainWnd, SW_HIDE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
nXDifference = cx - nOldWidth;
|
||||
nYDifference = cy - nOldHeight;
|
||||
|
@ -777,6 +828,20 @@ void SaveSettings(void)
|
|||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
void TaskManager_OnRestoreMainWindow(void)
|
||||
{
|
||||
HMENU hMenu, hOptionsMenu;
|
||||
BOOL OnTop;
|
||||
|
||||
hMenu = GetMenu(hMainWnd);
|
||||
hOptionsMenu = GetSubMenu(hMenu, OPTIONS_MENU_INDEX);
|
||||
OnTop = ((GetWindowLong(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0);
|
||||
|
||||
OpenIcon(hMainWnd);
|
||||
SetForegroundWindow(hMainWnd);
|
||||
SetWindowPos(hMainWnd, (OnTop ? HWND_TOPMOST : HWND_TOP), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
||||
}
|
||||
|
||||
void TaskManager_OnEnterMenuLoop(HWND hWnd)
|
||||
{
|
||||
int nParts;
|
||||
|
|
|
@ -135,6 +135,7 @@ void Draw3dRect(HDC hDC, int x, int y, int cx, int cy, COLORREF clrTopLeft, COLO
|
|||
void Draw3dRect2(HDC hDC, LPRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight);
|
||||
void LoadSettings(void);
|
||||
void SaveSettings(void);
|
||||
void TaskManager_OnRestoreMainWindow(void);
|
||||
void TaskManager_OnEnterMenuLoop(HWND hWnd);
|
||||
void TaskManager_OnExitMenuLoop(HWND hWnd);
|
||||
void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu);
|
||||
|
|
|
@ -156,7 +156,7 @@ BOOL TrayIcon_ShellAddTrayIcon(void)
|
|||
nid.hWnd = hMainWnd;
|
||||
nid.uID = 0;
|
||||
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
|
||||
/* nid.uCallbackMessage = ??; */
|
||||
nid.uCallbackMessage = WM_ONTRAYICON;
|
||||
nid.hIcon = hIcon;
|
||||
wsprintf(nid.szTip, _T("CPU Usage: %d%%"), PerfDataGetProcessorUsage());
|
||||
|
||||
|
@ -179,7 +179,7 @@ BOOL TrayIcon_ShellRemoveTrayIcon(void)
|
|||
nid.hWnd = hMainWnd;
|
||||
nid.uID = 0;
|
||||
nid.uFlags = 0;
|
||||
/* nid.uCallbackMessage = ??; */
|
||||
nid.uCallbackMessage = WM_ONTRAYICON;
|
||||
|
||||
bRetVal = Shell_NotifyIcon(NIM_DELETE, &nid);
|
||||
|
||||
|
@ -200,7 +200,7 @@ BOOL TrayIcon_ShellUpdateTrayIcon(void)
|
|||
nid.hWnd = hMainWnd;
|
||||
nid.uID = 0;
|
||||
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
|
||||
/* nid.uCallbackMessage = ??; */
|
||||
nid.uCallbackMessage = WM_ONTRAYICON;
|
||||
nid.hIcon = hIcon;
|
||||
wsprintf(nid.szTip, _T("CPU Usage: %d%%"), PerfDataGetProcessorUsage());
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#ifndef __TRAYICON_H
|
||||
#define __TRAYICON_H
|
||||
|
||||
#define WM_ONTRAYICON WM_USER + 5
|
||||
|
||||
HICON TrayIcon_GetProcessorUsageIcon(void);
|
||||
BOOL TrayIcon_ShellAddTrayIcon(void);
|
||||
BOOL TrayIcon_ShellRemoveTrayIcon(void);
|
||||
|
|
Loading…
Reference in a new issue