Author: weiden Date: Fri Oct 12 00:23:26 2007 New Revision: 29517
URL: http://svn.reactos.org/svn/reactos?rev=29517&view=rev Log: Display a context menu for the selected monitor
Modified: trunk/reactos/dll/cpl/desk/desk.c trunk/reactos/dll/cpl/desk/desk.h trunk/reactos/dll/cpl/desk/lang/bg-BG.rc trunk/reactos/dll/cpl/desk/lang/cs-CZ.rc trunk/reactos/dll/cpl/desk/lang/de-DE.rc trunk/reactos/dll/cpl/desk/lang/el-GR.rc trunk/reactos/dll/cpl/desk/lang/en-US.rc trunk/reactos/dll/cpl/desk/lang/es-ES.rc trunk/reactos/dll/cpl/desk/lang/fr-FR.rc trunk/reactos/dll/cpl/desk/lang/hu-HU.rc trunk/reactos/dll/cpl/desk/lang/id-ID.rc trunk/reactos/dll/cpl/desk/lang/it-IT.rc trunk/reactos/dll/cpl/desk/lang/ja-JP.rc trunk/reactos/dll/cpl/desk/lang/nl-NL.rc trunk/reactos/dll/cpl/desk/lang/pl-PL.rc trunk/reactos/dll/cpl/desk/lang/ru-RU.rc trunk/reactos/dll/cpl/desk/lang/sk-SK.rc trunk/reactos/dll/cpl/desk/lang/sv-SE.rc trunk/reactos/dll/cpl/desk/lang/uk-UA.rc trunk/reactos/dll/cpl/desk/monslctl.c trunk/reactos/dll/cpl/desk/monslctl.h trunk/reactos/dll/cpl/desk/resource.h trunk/reactos/dll/cpl/desk/settings.c
Modified: trunk/reactos/dll/cpl/desk/desk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/desk.c?rev=295... ============================================================================== --- trunk/reactos/dll/cpl/desk/desk.c (original) +++ trunk/reactos/dll/cpl/desk/desk.c Fri Oct 12 00:23:26 2007 @@ -33,6 +33,33 @@ DisplayApplet } }; + +HMENU +LoadPopupMenu(IN HINSTANCE hInstance, + IN LPCTSTR lpMenuName) +{ + HMENU hMenu, hSubMenu = NULL; + + hMenu = LoadMenu(hInstance, + lpMenuName); + + if (hMenu != NULL) + { + hSubMenu = GetSubMenu(hMenu, + 0); + if (hSubMenu != NULL && + !RemoveMenu(hMenu, + 0, + MF_BYPOSITION)) + { + hSubMenu = NULL; + } + + DestroyMenu(hMenu); + } + + return hSubMenu; +}
static BOOL CALLBACK PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
Modified: trunk/reactos/dll/cpl/desk/desk.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/desk.h?rev=295... ============================================================================== --- trunk/reactos/dll/cpl/desk/desk.h (original) +++ trunk/reactos/dll/cpl/desk/desk.h Fri Oct 12 00:23:26 2007 @@ -34,6 +34,10 @@ } DIBITMAP, *PDIBITMAP;
extern HINSTANCE hApplet; + +HMENU +LoadPopupMenu(IN HINSTANCE hInstance, + IN LPCTSTR lpMenuName);
PDIBITMAP DibLoadImage(LPTSTR lpFilename); VOID DibFreeImage(PDIBITMAP lpBitmap);
Modified: trunk/reactos/dll/cpl/desk/lang/bg-BG.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/bg-BG.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/bg-BG.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/bg-BG.rc Fri Oct 12 00:23:26 2007 @@ -133,6 +133,18 @@ MENUITEM "Îáèêíîâåíî", ID_MENU_NORMAL MENUITEM "Èçêëþ÷åíî", ID_MENU_DISABLED MENUITEM "Èçáðàíî", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/cs-CZ.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/cs-CZ.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/cs-CZ.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/cs-CZ.rc Fri Oct 12 00:23:26 2007 @@ -130,6 +130,18 @@ MENUITEM "Normální", ID_MENU_NORMAL MENUITEM "Nepøístupné", ID_MENU_DISABLED MENUITEM "Vybráno", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/de-DE.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/de-DE.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/de-DE.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/de-DE.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Deaktiviert", ID_MENU_DISABLED MENUITEM "Ausgewählt", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/el-GR.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/el-GR.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/el-GR.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/el-GR.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/en-US.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/en-US.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/en-US.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/en-US.rc Fri Oct 12 00:23:26 2007 @@ -131,6 +131,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/es-ES.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/es-ES.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/es-ES.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/es-ES.rc Fri Oct 12 00:23:26 2007 @@ -136,6 +136,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/fr-FR.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/fr-FR.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/fr-FR.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/fr-FR.rc Fri Oct 12 00:23:26 2007 @@ -132,6 +132,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Désactivé", ID_MENU_DISABLED MENUITEM "Sélectionné", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/hu-HU.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/hu-HU.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/hu-HU.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/hu-HU.rc Fri Oct 12 00:23:26 2007 @@ -130,6 +130,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/id-ID.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/id-ID.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/id-ID.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/id-ID.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Dimatikan", ID_MENU_DISABLED MENUITEM "Dipilih", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/it-IT.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/it-IT.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/it-IT.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/it-IT.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/ja-JP.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/ja-JP.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/ja-JP.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/ja-JP.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/nl-NL.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/nl-NL.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/nl-NL.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/nl-NL.rc Fri Oct 12 00:23:26 2007 @@ -131,6 +131,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/pl-PL.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/pl-PL.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/pl-PL.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/pl-PL.rc Fri Oct 12 00:23:26 2007 @@ -135,6 +135,18 @@ MENUITEM "Normalny", ID_MENU_NORMAL MENUITEM "Wy³¹czony", ID_MENU_DISABLED MENUITEM "Wybrany", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/ru-RU.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/ru-RU.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/ru-RU.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/ru-RU.rc Fri Oct 12 00:23:26 2007 @@ -129,6 +129,18 @@ MENUITEM "Îáû÷íàÿ", ID_MENU_NORMAL MENUITEM "Îòêëþ÷åííàÿ", ID_MENU_DISABLED MENUITEM "Âûáðàííàÿ", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/sk-SK.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/sk-SK.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/sk-SK.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/sk-SK.rc Fri Oct 12 00:23:26 2007 @@ -138,6 +138,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/sv-SE.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/sv-SE.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/sv-SE.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/sv-SE.rc Fri Oct 12 00:23:26 2007 @@ -132,6 +132,18 @@ MENUITEM "Normal", ID_MENU_NORMAL MENUITEM "Disabled", ID_MENU_DISABLED MENUITEM "Selected", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/lang/uk-UA.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/lang/uk-UA.rc?... ============================================================================== --- trunk/reactos/dll/cpl/desk/lang/uk-UA.rc (original) +++ trunk/reactos/dll/cpl/desk/lang/uk-UA.rc Fri Oct 12 00:23:26 2007 @@ -137,6 +137,18 @@ MENUITEM "Çâè÷àéíå", ID_MENU_NORMAL MENUITEM "Âèìêíåíå", ID_MENU_DISABLED MENUITEM "Âèáðàíå", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END END
STRINGTABLE
Modified: trunk/reactos/dll/cpl/desk/monslctl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/monslctl.c?rev... ============================================================================== --- trunk/reactos/dll/cpl/desk/monslctl.c (original) +++ trunk/reactos/dll/cpl/desk/monslctl.c Fri Oct 12 00:23:26 2007 @@ -496,6 +496,32 @@ return FALSE; }
+static INT +MonSelGetMonitorRect(IN OUT PMONITORSELWND infoPtr, + IN INT Index, + OUT PRECT prc) +{ + RECT rc, rcClient; + + if (Index < 0 || Index >= infoPtr->MonitorsCount) + return -1; + + if (!infoPtr->CanDisplay) + return 0; + + MonSelRectToScreen(infoPtr, + &infoPtr->Monitors[Index].rc, + prc); + + rcClient.left = rcClient.top = 0; + rcClient.right = infoPtr->ClientSize.cx; + rcClient.bottom = infoPtr->ClientSize.cy; + + return IntersectRect(&rc, + &rcClient, + prc) != FALSE; +} + static BOOL MonSelSetCurSelMonitor(IN OUT PMONITORSELWND infoPtr, IN INT Index, @@ -568,7 +594,8 @@ infoPtr->SelectionFrame.cx = infoPtr->SelectionFrame.cy = 4; infoPtr->Margin.cx = infoPtr->Margin.cy = 20; infoPtr->SelectedMonitor = -1; - infoPtr->ControlExStyle = MSLM_EX_ALLOWSELECTDISABLED; + infoPtr->ControlExStyle = MSLM_EX_ALLOWSELECTDISABLED | MSLM_EX_HIDENUMBERONSINGLE | + MSLM_EX_SELECTONRIGHTCLICK; return; }
@@ -709,6 +736,10 @@ DWORD Index; RECT rc, rctmp; INT iPrevBkMode; + BOOL bHideNumber; + + bHideNumber = (infoPtr->ControlExStyle & MSLM_EX_HIDENUMBERS) || + ((infoPtr->MonitorsCount == 1) && (infoPtr->ControlExStyle & MSLM_EX_HIDENUMBERONSINGLE));
hbBk = GetSysColorBrush(COLOR_BACKGROUND); hpFg = CreatePen(PS_SOLID, @@ -773,22 +804,25 @@ -1, -1);
- hFont = MonSelGetMonitorFont(infoPtr, - hDC, - Index); - if (hFont != NULL) - { - hPrevFont = SelectObject(hDC, - hFont); - - DrawText(hDC, - infoPtr->Monitors[Index].szCaption, - -1, - &rc, - DT_VCENTER | DT_CENTER | DT_NOPREFIX | DT_SINGLELINE); - - SelectObject(hDC, - hPrevFont); + if (!bHideNumber) + { + hFont = MonSelGetMonitorFont(infoPtr, + hDC, + Index); + if (hFont != NULL) + { + hPrevFont = SelectObject(hDC, + hFont); + + DrawText(hDC, + infoPtr->Monitors[Index].szCaption, + -1, + &rc, + DT_VCENTER | DT_CENTER | DT_NOPREFIX | DT_SINGLELINE); + + SelectObject(hDC, + hPrevFont); + } }
if (infoPtr->MonitorInfo[Index].Flags & MSL_MIF_DISABLED) @@ -813,6 +847,41 @@ hbOldBk); }
+static VOID +MonSelContextMenu(IN OUT PMONITORSELWND infoPtr, + IN SHORT x, + IN SHORT y) +{ + MONSL_MONNMBUTTONCLICKED nm; + INT Index; + + if (!infoPtr->HasFocus) + SetFocus(infoPtr->hSelf); + + nm.pt.x = x; + nm.pt.y = y; + + Index = MonSelHitTest(infoPtr, + &nm.pt); + + MonSelNotifyMonitor(infoPtr, + MSLN_RBUTTONUP, + Index, + (PMONSL_MONNMHDR)&nm); + + /* Send a WM_CONTEXTMENU notification */ + MapWindowPoints(infoPtr->hSelf, + NULL, + &nm.pt, + 1); + + SendMessage(infoPtr->hSelf, + WM_CONTEXTMENU, + (WPARAM)infoPtr->hSelf, + MAKELPARAM(nm.pt.x, + nm.pt.y)); +} + static LRESULT CALLBACK MonitorSelWndProc(IN HWND hwnd, IN UINT uMsg, @@ -873,9 +942,16 @@ break; }
+ case WM_RBUTTONDOWN: + { + if (!(infoPtr->ControlExStyle & MSLM_EX_SELECTONRIGHTCLICK)) + break; + + /* fall through */ + } + case WM_LBUTTONDBLCLK: case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: { INT Index; POINT pt; @@ -899,6 +975,14 @@ { if (!infoPtr->HasFocus) SetFocus(hwnd); + break; + } + + case WM_RBUTTONUP: + { + MonSelContextMenu(infoPtr, + (SHORT)LOWORD(lParam), + (SHORT)HIWORD(lParam)); break; }
@@ -1081,6 +1165,14 @@ break; }
+ case MSLM_GETMONITORRECT: + { + Ret = (LRESULT)MonSelGetMonitorRect(infoPtr, + (INT)wParam, + (PRECT)lParam); + break; + } + case WM_CREATE: { infoPtr = (PMONITORSELWND) HeapAlloc(GetProcessHeap(),
Modified: trunk/reactos/dll/cpl/desk/monslctl.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/monslctl.h?rev... ============================================================================== --- trunk/reactos/dll/cpl/desk/monslctl.h (original) +++ trunk/reactos/dll/cpl/desk/monslctl.h Fri Oct 12 00:23:26 2007 @@ -4,6 +4,9 @@ /* Control extended styles */ #define MSLM_EX_ALLOWSELECTNONE 0x1 #define MSLM_EX_ALLOWSELECTDISABLED 0x2 +#define MSLM_EX_HIDENUMBERONSINGLE 0x4 +#define MSLM_EX_HIDENUMBERS 0x8 +#define MSLM_EX_SELECTONRIGHTCLICK 0x10
/* MONSL_MONINFO Flags */ #define MSL_MIF_DISABLED 0x1 @@ -24,6 +27,13 @@ MONSL_MONINFO MonitorInfo; } MONSL_MONNMHDR, *PMONSL_MONNMHDR;
+typedef struct _MONSL_MONNMBUTTONCLICKED +{ + /* Used with MSLN_MONITORCHANGING */ + MONSL_MONNMHDR hdr; + POINT pt; +} MONSL_MONNMBUTTONCLICKED, *PMONSL_MONNMBUTTONCLICKED; + typedef struct _MONSL_MONNMMONITORCHANGING { /* Used with MSLN_MONITORCHANGING */ @@ -52,7 +62,19 @@ * * lParam: PMONSL_MONNMHDR */ -#define MSLN_MONITORCHANGED 101 +#define MSLN_MONITORCHANGED 102 + +/* + * MSLN_RBUTTONUP + * This notification code is sent through WM_NOTIFY after the user did a + * right click on the control. If the control's extended style + * MSLM_EX_SELECTONRIGHTCLICK is set and the user clicked on a monitor, + * that monitor is selected and relevant notifications are sent before + * this notification is sent. + * + * lParam: PMONSL_MONNMBUTTONCLICKED + */ +#define MSLN_RBUTTONUP 103
/* * MSLM_SETMONITORSINFO @@ -146,7 +168,15 @@ * Allow deselecting a monitor by clicking into * unused areas of the control. * * MSLM_EX_ALLOWSELECTDISABLED - * Allow selecting disabled monitors + * Allow selecting disabled monitors. + * * MSLM_EX_HIDENUMBERONSINGLE + * Hides the monitor number if the control only + * displays one monitor. + * * MSLM_EX_HIDENUMBERS + * Does not show monitor numbers. + * * MSLM_EX_SELECTONRIGHTCLICK + * Selects a monitor when the user right clicks + * on it. * * Returns non-zero value if successful. */ @@ -160,6 +190,20 @@ * Returns the control's extended style flags. */ #define MSLM_GETEXSTYLE (WM_USER + 0x19) + +/* + * MSLM_GETMONITORRECT + * wParam: INT + * Index of the monitor whose display rectangle is queried. + * lParam: PRECT + * Pointer to a RECT structure that receives the rectangle + * in coordinates relative to the control's client area. + * + * Returns a positive value if the rectangle is visible. + * Returns zero if the rectangle is invisible. + * Returns a negative value if the index is not valid. + */ +#define MSLM_GETMONITORRECT (WM_USER + 0x20)
BOOL RegisterMonitorSelectionControl(IN HINSTANCE hInstance); VOID UnregisterMonitorSelectionControl(IN HINSTANCE hInstance);
Modified: trunk/reactos/dll/cpl/desk/resource.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/resource.h?rev... ============================================================================== --- trunk/reactos/dll/cpl/desk/resource.h (original) +++ trunk/reactos/dll/cpl/desk/resource.h Fri Oct 12 00:23:26 2007 @@ -70,6 +70,12 @@ #define ID_MENU_NORMAL 2101 #define ID_MENU_DISABLED 2102 #define ID_MENU_SELECTED 2103 + +#define IDM_MONITOR_MENU 2110 +#define ID_MENU_ATTACHED 2111 +#define ID_MENU_PRIMARY 2112 +#define ID_MENU_IDENTIFY 2113 +#define ID_MENU_PROPERTIES 2114
/* Settings Page */
Modified: trunk/reactos/dll/cpl/desk/settings.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/settings.c?rev... ============================================================================== --- trunk/reactos/dll/cpl/desk/settings.c (original) +++ trunk/reactos/dll/cpl/desk/settings.c Fri Oct 12 00:23:26 2007 @@ -644,6 +644,106 @@ break; }
+ case WM_CONTEXTMENU: + { + HWND hwndMonSel; + HMENU hPopup; + UINT uiCmd; + POINT pt, ptClient; + INT Index; + + pt.x = (SHORT)LOWORD(lParam); + pt.y = (SHORT)HIWORD(lParam); + + hwndMonSel = GetDlgItem(hwndDlg, + IDC_SETTINGS_MONSEL); + if ((HWND)wParam == hwndMonSel) + { + if (pt.x == -1 && pt.y == -1) + { + RECT rcMon; + + Index = (INT)SendMessage(hwndMonSel, + MSLM_GETCURSEL, + 0, + 0); + + if (Index >= 0 && + (INT)SendMessage(hwndMonSel, + MSLM_GETMONITORRECT, + Index, + (LPARAM)&rcMon) > 0) + { + pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); + pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); + } + else + pt.x = pt.y = 0; + + MapWindowPoints(hwndMonSel, + NULL, + &pt, + 1); + } + else + { + ptClient = pt; + MapWindowPoints(NULL, + hwndMonSel, + &ptClient, + 1); + + Index = (INT)SendMessage(hwndMonSel, + MSLM_HITTEST, + (WPARAM)&ptClient, + 0); + } + + if (Index >= 0) + { + hPopup = LoadPopupMenu(hApplet, + MAKEINTRESOURCE(IDM_MONITOR_MENU)); + if (hPopup != NULL) + { + /* FIXME: Enable/Disable menu items */ + EnableMenuItem(hPopup, + ID_MENU_ATTACHED, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PRIMARY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_IDENTIFY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PROPERTIES, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + + uiCmd = (UINT)TrackPopupMenu(hPopup, + TPM_RETURNCMD | TPM_RIGHTBUTTON, + pt.x, + pt.y, + 0, + hwndDlg, + NULL); + + switch (uiCmd) + { + case ID_MENU_ATTACHED: + case ID_MENU_PRIMARY: + case ID_MENU_IDENTIFY: + case ID_MENU_PROPERTIES: + /* FIXME: Implement */ + break; + } + + DestroyMenu(hPopup); + } + } + } + break; + } + case WM_DESTROY: { PDISPLAY_DEVICE_ENTRY Current = pGlobalData->DisplayDeviceList;