Added MattKing's code to enable the standard "hand pointer" mouse cursor when you hover over a meter with any "MouseAction" on it or a button.

This behavior is ON by default.  If you do not want the cursor change on a meter or button, set MouseActionCursor=0 on the Meter or button.

Example of disabling mouse cursor change:

[Meter]
Meter=Image
W=100
H=100
SolidColor=0,0,0,255
LeftMouseUpAction=!Execute ["http://rainmeter.net"]
MouseActionCursor=0

Note: If you have a button with a meter (either image or text) on TOP of it, you will need to set MouseActionCursor=0 on the image/text meter even if it doesn't have a mouse action, or the button will not change cursors.
This commit is contained in:
jsmorley 2009-09-25 22:20:07 +00:00
parent 4771fafe87
commit 5560d6e72a
3 changed files with 31 additions and 1 deletions

View File

@ -64,6 +64,8 @@ CMeter::CMeter(CMeterWindow* meterWindow)
m_AntiAlias = false;
m_DynamicVariables = false;
m_Initialized = false;
m_HasMouseAction = false;
m_MouseActionCursor = true;
}
/*
@ -271,6 +273,15 @@ void CMeter::ReadConfig(const WCHAR* section)
m_MouseOverAction = parser.ReadString(section, L"MouseOverAction", L"");
m_MouseLeaveAction = parser.ReadString(section, L"MouseLeaveAction", L"");
m_MouseActionCursor = 0!= parser.ReadInt(section, L"MouseActionCursor", 1);
if(!m_MiddleMouseUpAction.empty() || !m_MiddleMouseDownAction.empty()
|| !m_LeftMouseUpAction.empty() || !m_LeftMouseDownAction.empty()
|| !m_RightMouseUpAction.empty() || !m_RightMouseDownAction.empty() )
{
m_HasMouseAction = true;
}
m_MeasureName = parser.ReadString(section, L"MeasureName", L"");
m_UpdateDivider = parser.ReadInt(section, L"UpdateDivider", 1);

View File

@ -59,6 +59,9 @@ public:
std::wstring& GetMouseOverAction() { return m_MouseOverAction; };
std::wstring& GetMouseLeaveAction() { return m_MouseLeaveAction; };
bool HasMouseAction() { return m_HasMouseAction; };
bool HasMouseActionCursor() { return m_MouseActionCursor; };
void Hide() { m_Hidden = true; };
void Show() { m_Hidden = false; };
bool IsHidden() { return m_Hidden; };
@ -74,7 +77,7 @@ public:
const WCHAR* GetName() { return m_Name.c_str(); };
static CMeter* Create(const WCHAR* meter, CMeterWindow* meterWindow);
static void DrawBevel(Gdiplus::Graphics& graphics, Gdiplus::Rect& rect, Gdiplus::Pen& light, Gdiplus::Pen& dark);
protected:
@ -116,6 +119,9 @@ protected:
std::wstring m_MiddleMouseUpAction;
std::wstring m_MouseOverAction;
std::wstring m_MouseLeaveAction;
bool m_HasMouseAction;
bool m_MouseActionCursor;
bool m_MouseOver;
METER_POSITION m_RelativeX;

View File

@ -2430,6 +2430,7 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
// Handle buttons
bool redraw = false;
bool drawCursor = false;
std::list<CMeter*>::iterator j = m_Meters.begin();
for( ; j != m_Meters.end(); j++)
{
@ -2441,7 +2442,18 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
{
redraw |= button->MouseMove(pos);
}
if((*j)->HitTest(pos.x, pos.y) && (*j)->HasMouseActionCursor())
{
drawCursor = ((*j)->HasMouseAction() || button);
}
}
if(drawCursor)
SetCursor(LoadCursor(NULL, IDC_HAND));
else
SetCursor(LoadCursor(NULL, IDC_ARROW));
if (redraw)
{
Redraw();
@ -2856,6 +2868,7 @@ LRESULT CMeterWindow::OnLeftButtonDown(WPARAM wParam, LPARAM lParam)
{
redraw |= button->MouseDown(pos);
}
}
if (redraw)
{