mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Fixed an issue that ClickThrough mode is broken since r486.
Fixed an issue that cached window message is incorrect in some cases.
This commit is contained in:
parent
7f2c47a956
commit
07d5671707
@ -423,7 +423,7 @@ void CMeterWindow::Refresh(bool init, bool all)
|
||||
|
||||
void CMeterWindow::SetMouseLeaveEvent(bool cancel)
|
||||
{
|
||||
if (!cancel && !m_MouseOver) return;
|
||||
if (!cancel && (!m_MouseOver || m_ClickThrough)) return;
|
||||
|
||||
// Check whether the mouse event is set
|
||||
TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT)};
|
||||
@ -772,71 +772,57 @@ void CMeterWindow::RunBang(BANGCOMMAND bang, const WCHAR* arg)
|
||||
break;
|
||||
|
||||
case BANG_CLICKTHROUGH:
|
||||
if (_wtoi(arg) == -1)
|
||||
{
|
||||
m_ClickThrough = !m_ClickThrough;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ClickThrough = _wtoi(arg);
|
||||
}
|
||||
WriteConfig();
|
||||
|
||||
if (!m_ClickThrough)
|
||||
{
|
||||
// Remove transparent flag
|
||||
LONG style = GetWindowLong(m_Window, GWL_EXSTYLE);
|
||||
if ((style & WS_EX_TRANSPARENT) != 0)
|
||||
int f = _wtoi(arg);
|
||||
if (f == -1)
|
||||
{
|
||||
SetWindowLong(m_Window, GWL_EXSTYLE, style & ~WS_EX_TRANSPARENT);
|
||||
SetClickThrough(!m_ClickThrough);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetClickThrough(f != 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case BANG_DRAGGABLE:
|
||||
if (_wtoi(arg) == -1)
|
||||
{
|
||||
m_WindowDraggable = !m_WindowDraggable;
|
||||
int f = _wtoi(arg);
|
||||
if (f == -1)
|
||||
{
|
||||
SetWindowDraggable(!m_WindowDraggable);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowDraggable(f != 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_WindowDraggable = _wtoi(arg);
|
||||
}
|
||||
WriteConfig();
|
||||
break;
|
||||
|
||||
case BANG_SNAPEDGES:
|
||||
if (_wtoi(arg) == -1)
|
||||
{
|
||||
m_SnapEdges = !m_SnapEdges;
|
||||
int f = _wtoi(arg);
|
||||
if (f == -1)
|
||||
{
|
||||
SetSnapEdges(!m_SnapEdges);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSnapEdges(f != 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_SnapEdges = _wtoi(arg);
|
||||
}
|
||||
WriteConfig();
|
||||
break;
|
||||
|
||||
case BANG_KEEPONSCREEN:
|
||||
if (_wtoi(arg) == -1)
|
||||
{
|
||||
m_KeepOnScreen = !m_KeepOnScreen;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_KeepOnScreen = _wtoi(arg);
|
||||
}
|
||||
|
||||
WriteConfig();
|
||||
|
||||
if (m_KeepOnScreen)
|
||||
{
|
||||
int x = m_ScreenX;
|
||||
int y = m_ScreenY;
|
||||
MapCoordsToScreen(x, y, m_WindowW, m_WindowH);
|
||||
if (x != m_ScreenX || y != m_ScreenY)
|
||||
int f = _wtoi(arg);
|
||||
if (f == -1)
|
||||
{
|
||||
MoveWindow(x, y);
|
||||
SetKeepOnScreen(!m_KeepOnScreen);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetKeepOnScreen(f != 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -2604,7 +2590,7 @@ void CMeterWindow::UpdateTransparency(int alpha, bool reset)
|
||||
** Repaints the window. This does not cause update of the measures.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnPaint(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC winDC = BeginPaint(m_Window, &ps);
|
||||
@ -2623,7 +2609,7 @@ LRESULT CMeterWindow::OnPaint(WPARAM wParam, LPARAM lParam)
|
||||
** MOUSETIMER is used to hide/show the window.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnTimer(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if(wParam == METERTIMER)
|
||||
{
|
||||
@ -2675,20 +2661,34 @@ LRESULT CMeterWindow::OnTimer(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
GetCursorPos(&pos);
|
||||
if (WindowFromPoint(pos) == m_Window)
|
||||
|
||||
if (!m_ClickThrough)
|
||||
{
|
||||
SetMouseLeaveEvent(false);
|
||||
if (WindowFromPoint(pos) == m_Window)
|
||||
{
|
||||
SetMouseLeaveEvent(false);
|
||||
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
DoMoveAction(pos.x, pos.y, MOUSE_OVER);
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
while (DoMoveAction(pos.x, pos.y, MOUSE_OVER)) ;
|
||||
|
||||
// Handle buttons
|
||||
HandleButtons(pos, BUTTONPROC_MOVE, NULL, false);
|
||||
// Handle buttons
|
||||
HandleButtons(pos, BUTTONPROC_MOVE, NULL, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Run all mouse leave actions
|
||||
OnMouseLeave(m_WindowDraggable ? WM_NCMOUSELEAVE : WM_MOUSELEAVE, 0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Run all mouse leave actions
|
||||
OnMouseLeave(0, 0);
|
||||
bool keyDown = GetKeyState(VK_CONTROL) & 0x8000 || GetKeyState(VK_SHIFT) & 0x8000 || GetKeyState(VK_MENU) & 0x8000;
|
||||
|
||||
if (!keyDown || GetWindowFromPoint(pos) != m_Window)
|
||||
{
|
||||
// Run all mouse leave actions
|
||||
OnMouseLeave(m_WindowDraggable ? WM_NCMOUSELEAVE : WM_MOUSELEAVE, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2797,7 +2797,7 @@ void CMeterWindow::ShowWindowIfAppropriate()
|
||||
|
||||
POINT pos;
|
||||
GetCursorPos(&pos);
|
||||
if (WindowFromPoint(pos) == m_Window)
|
||||
if (GetWindowFromPoint(pos) == m_Window)
|
||||
{
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
|
||||
@ -2860,6 +2860,39 @@ void CMeterWindow::ShowWindowIfAppropriate()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** GetWindowFromPoint
|
||||
**
|
||||
** Retrieves a handle to the window that contains the specified point.
|
||||
**
|
||||
*/
|
||||
HWND CMeterWindow::GetWindowFromPoint(POINT pos)
|
||||
{
|
||||
HWND hwndPos = WindowFromPoint(pos);
|
||||
|
||||
if (hwndPos == m_Window || !m_ClickThrough)
|
||||
{
|
||||
return hwndPos;
|
||||
}
|
||||
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
|
||||
if (HitTest(pos.x, pos.y))
|
||||
{
|
||||
HWND hWnd = GetAncestor(hwndPos, GA_ROOT);
|
||||
while (hWnd = ::GetNextWindow(hWnd, GW_HWNDNEXT))
|
||||
{
|
||||
if (hWnd == m_Window)
|
||||
{
|
||||
return hwndPos;
|
||||
}
|
||||
}
|
||||
return m_Window;
|
||||
}
|
||||
|
||||
return hwndPos;
|
||||
}
|
||||
|
||||
/*
|
||||
** HitTest
|
||||
**
|
||||
@ -2957,7 +2990,7 @@ void CMeterWindow::HandleButtons(POINT pos, BUTTONPROC proc, CMeterWindow* meter
|
||||
** When we get WM_MOUSEMOVE messages, hide the window as the mouse is over it.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
bool keyDown = GetKeyState(VK_CONTROL) & 0x8000 || GetKeyState(VK_SHIFT) & 0x8000 || GetKeyState(VK_MENU) & 0x8000;
|
||||
|
||||
@ -3001,21 +3034,24 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
}
|
||||
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCMOUSEMOVE)
|
||||
if (!m_ClickThrough || keyDown)
|
||||
{
|
||||
// Map to local window
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (uMsg == WM_NCMOUSEMOVE)
|
||||
{
|
||||
// Map to local window
|
||||
MapWindowPoints(NULL, m_Window, &pos, 1);
|
||||
}
|
||||
|
||||
while (DoMoveAction(pos.x, pos.y, MOUSE_OVER)) ;
|
||||
|
||||
// Handle buttons
|
||||
HandleButtons(pos, BUTTONPROC_MOVE, NULL, true);
|
||||
}
|
||||
|
||||
DoMoveAction(pos.x, pos.y, MOUSE_OVER);
|
||||
|
||||
// Handle buttons
|
||||
HandleButtons(pos, BUTTONPROC_MOVE, NULL, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3025,7 +3061,7 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
** When we get WM_MOUSELEAVE messages, run all leave actions.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMouseLeave(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMouseLeave(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
GetCursorPos(&pos);
|
||||
@ -3048,7 +3084,7 @@ LRESULT CMeterWindow::OnMouseLeave(WPARAM wParam, LPARAM lParam)
|
||||
** During window creation we do nothing.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnCreate(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -3059,7 +3095,7 @@ LRESULT CMeterWindow::OnCreate(WPARAM wParam, LPARAM lParam)
|
||||
** Handle the menu commands.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnCommand(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -3118,39 +3154,15 @@ LRESULT CMeterWindow::OnCommand(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_KEEPONSCREEN)
|
||||
{
|
||||
m_KeepOnScreen = !m_KeepOnScreen;
|
||||
WriteConfig();
|
||||
|
||||
if (m_KeepOnScreen)
|
||||
{
|
||||
int x = m_ScreenX;
|
||||
int y = m_ScreenY;
|
||||
MapCoordsToScreen(x, y, m_WindowW, m_WindowH);
|
||||
if (x != m_ScreenX || y != m_ScreenY)
|
||||
{
|
||||
MoveWindow(x, y);
|
||||
}
|
||||
}
|
||||
SetKeepOnScreen(!m_KeepOnScreen);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_CLICKTHROUGH)
|
||||
{
|
||||
m_ClickThrough = !m_ClickThrough;
|
||||
WriteConfig();
|
||||
|
||||
if (!m_ClickThrough)
|
||||
{
|
||||
// Remove transparent flag
|
||||
LONG style = GetWindowLong(m_Window, GWL_EXSTYLE);
|
||||
if ((style & WS_EX_TRANSPARENT) != 0)
|
||||
{
|
||||
SetWindowLong(m_Window, GWL_EXSTYLE, style & ~WS_EX_TRANSPARENT);
|
||||
}
|
||||
}
|
||||
SetClickThrough(!m_ClickThrough);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_DRAGGABLE)
|
||||
{
|
||||
m_WindowDraggable = !m_WindowDraggable;
|
||||
WriteConfig();
|
||||
SetWindowDraggable(!m_WindowDraggable);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_HIDEONMOUSE)
|
||||
{
|
||||
@ -3193,13 +3205,11 @@ LRESULT CMeterWindow::OnCommand(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_REMEMBERPOSITION)
|
||||
{
|
||||
m_SavePosition = !m_SavePosition;
|
||||
WriteConfig();
|
||||
SetSavePosition(!m_SavePosition);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_SKINMENU_SNAPTOEDGES)
|
||||
{
|
||||
m_SnapEdges = !m_SnapEdges;
|
||||
WriteConfig();
|
||||
SetSnapEdges(!m_SnapEdges);
|
||||
}
|
||||
else if(wParam >= ID_CONTEXT_SKINMENU_TRANSPARENCY_0 && wParam <= ID_CONTEXT_SKINMENU_TRANSPARENCY_90)
|
||||
{
|
||||
@ -3311,17 +3321,103 @@ LRESULT CMeterWindow::OnCommand(WPARAM wParam, LPARAM lParam)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** SetClickThrough
|
||||
**
|
||||
** Helper function for setting ClickThrough
|
||||
**
|
||||
*/
|
||||
void CMeterWindow::SetClickThrough(bool b)
|
||||
{
|
||||
m_ClickThrough = b;
|
||||
WriteConfig();
|
||||
|
||||
if (!m_ClickThrough)
|
||||
{
|
||||
// Remove transparent flag
|
||||
LONG style = GetWindowLong(m_Window, GWL_EXSTYLE);
|
||||
if ((style & WS_EX_TRANSPARENT) != 0)
|
||||
{
|
||||
SetWindowLong(m_Window, GWL_EXSTYLE, style & ~WS_EX_TRANSPARENT);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_MouseOver)
|
||||
{
|
||||
SetMouseLeaveEvent(m_ClickThrough);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** SetKeepOnScreen
|
||||
**
|
||||
** Helper function for setting KeepOnScreen
|
||||
**
|
||||
*/
|
||||
void CMeterWindow::SetKeepOnScreen(bool b)
|
||||
{
|
||||
m_KeepOnScreen = b;
|
||||
WriteConfig();
|
||||
|
||||
if (m_KeepOnScreen)
|
||||
{
|
||||
int x = m_ScreenX;
|
||||
int y = m_ScreenY;
|
||||
MapCoordsToScreen(x, y, m_WindowW, m_WindowH);
|
||||
if (x != m_ScreenX || y != m_ScreenY)
|
||||
{
|
||||
MoveWindow(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** SetWindowDraggable
|
||||
**
|
||||
** Helper function for setting WindowDraggable
|
||||
**
|
||||
*/
|
||||
void CMeterWindow::SetWindowDraggable(bool b)
|
||||
{
|
||||
m_WindowDraggable = b;
|
||||
WriteConfig();
|
||||
}
|
||||
|
||||
/*
|
||||
** SetSavePosition
|
||||
**
|
||||
** Helper function for setting SavePosition
|
||||
**
|
||||
*/
|
||||
void CMeterWindow::SetSavePosition(bool b)
|
||||
{
|
||||
m_SavePosition = b;
|
||||
WriteConfig();
|
||||
}
|
||||
|
||||
/*
|
||||
** SetSnapEdges
|
||||
**
|
||||
** Helper function for setting SnapEdges
|
||||
**
|
||||
*/
|
||||
void CMeterWindow::SetSnapEdges(bool b)
|
||||
{
|
||||
m_SnapEdges = b;
|
||||
WriteConfig();
|
||||
}
|
||||
|
||||
/*
|
||||
** OnSysCommand
|
||||
**
|
||||
** Handle dragging the window
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnSysCommand(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if ((wParam & 0xFFF0) != SC_MOVE)
|
||||
{
|
||||
return DefWindowProc(m_Window, m_Message, wParam, lParam);
|
||||
return DefWindowProc(m_Window, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
// --- SC_MOVE ---
|
||||
@ -3331,7 +3427,7 @@ LRESULT CMeterWindow::OnSysCommand(WPARAM wParam, LPARAM lParam)
|
||||
m_Dragged = false;
|
||||
|
||||
// Run the DefWindowProc so the dragging works
|
||||
LRESULT result = DefWindowProc(m_Window, m_Message, wParam, lParam);
|
||||
LRESULT result = DefWindowProc(m_Window, uMsg, wParam, lParam);
|
||||
|
||||
if (m_Dragged)
|
||||
{
|
||||
@ -3372,7 +3468,7 @@ LRESULT CMeterWindow::OnSysCommand(WPARAM wParam, LPARAM lParam)
|
||||
** Starts dragging
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnEnterSizeMove(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnEnterSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (m_Dragging)
|
||||
{
|
||||
@ -3391,7 +3487,7 @@ LRESULT CMeterWindow::OnEnterSizeMove(WPARAM wParam, LPARAM lParam)
|
||||
** Ends dragging
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnExitSizeMove(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnExitSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -3402,7 +3498,7 @@ LRESULT CMeterWindow::OnExitSizeMove(WPARAM wParam, LPARAM lParam)
|
||||
** This is overwritten so that the window can be dragged
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnNcHitTest(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (m_WindowDraggable)
|
||||
{
|
||||
@ -3438,7 +3534,7 @@ LRESULT CMeterWindow::OnNcHitTest(WPARAM wParam, LPARAM lParam)
|
||||
** Called when windows position is about to change
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnWindowPosChanging(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LPWINDOWPOS wp=(LPWINDOWPOS)lParam;
|
||||
|
||||
@ -3503,7 +3599,7 @@ LRESULT CMeterWindow::OnWindowPosChanging(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
}
|
||||
|
||||
return DefWindowProc(m_Window, m_Message, wParam, lParam);
|
||||
return DefWindowProc(m_Window, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
void CMeterWindow::SnapToWindow(CMeterWindow* window, LPWINDOWPOS wp)
|
||||
@ -3538,7 +3634,7 @@ void CMeterWindow::SnapToWindow(CMeterWindow* window, LPWINDOWPOS wp)
|
||||
** During destruction of the window do nothing.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnDestroy(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -3550,7 +3646,7 @@ LRESULT CMeterWindow::OnDestroy(WPARAM wParam, LPARAM lParam)
|
||||
** (OnDelayedMove function is used instead.)
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnDisplayChange(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnDisplayChange(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -3562,7 +3658,7 @@ LRESULT CMeterWindow::OnDisplayChange(WPARAM wParam, LPARAM lParam)
|
||||
** (OnDelayedMove function is used instead.)
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnSettingChange(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -3573,13 +3669,13 @@ LRESULT CMeterWindow::OnSettingChange(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when left mouse button is down
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnLeftButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnLeftButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCLBUTTONDOWN)
|
||||
if (uMsg == WM_NCLBUTTONDOWN)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3597,7 +3693,7 @@ LRESULT CMeterWindow::OnLeftButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
SetMouseLeaveEvent(true);
|
||||
|
||||
// Run the DefWindowProc so the dragging works
|
||||
return DefWindowProc(m_Window, m_Message, wParam, lParam);
|
||||
return DefWindowProc(m_Window, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -3609,13 +3705,13 @@ LRESULT CMeterWindow::OnLeftButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when left mouse button is up
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnLeftButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnLeftButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCLBUTTONUP)
|
||||
if (uMsg == WM_NCLBUTTONUP)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3638,13 +3734,13 @@ LRESULT CMeterWindow::OnLeftButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when left mouse button is double-clicked
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnLeftButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnLeftButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCLBUTTONDBLCLK)
|
||||
if (uMsg == WM_NCLBUTTONDBLCLK)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3670,13 +3766,13 @@ LRESULT CMeterWindow::OnLeftButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when right mouse button is down
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnRightButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnRightButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCRBUTTONDOWN)
|
||||
if (uMsg == WM_NCRBUTTONDOWN)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3699,7 +3795,7 @@ LRESULT CMeterWindow::OnRightButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when right mouse button is up
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnRightButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnRightButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
@ -3723,13 +3819,13 @@ LRESULT CMeterWindow::OnRightButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when right mouse button is double-clicked
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnRightButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnRightButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCRBUTTONDBLCLK)
|
||||
if (uMsg == WM_NCRBUTTONDBLCLK)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3755,13 +3851,13 @@ LRESULT CMeterWindow::OnRightButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when middle mouse button is down
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMiddleButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMiddleButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCMBUTTONDOWN)
|
||||
if (uMsg == WM_NCMBUTTONDOWN)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3784,13 +3880,13 @@ LRESULT CMeterWindow::OnMiddleButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when middle mouse button is up
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMiddleButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMiddleButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCMBUTTONUP)
|
||||
if (uMsg == WM_NCMBUTTONUP)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3813,13 +3909,13 @@ LRESULT CMeterWindow::OnMiddleButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
** Runs the action when middle mouse button is double-clicked
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMiddleButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMiddleButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
|
||||
if (m_Message == WM_NCMBUTTONDBLCLK)
|
||||
if (uMsg == WM_NCMBUTTONDBLCLK)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
@ -3845,7 +3941,7 @@ LRESULT CMeterWindow::OnMiddleButtonDoubleClick(WPARAM wParam, LPARAM lParam)
|
||||
** Handles the context menu. The menu is recreated every time it is shown.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnContextMenu(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
int x = (SHORT)LOWORD(lParam);
|
||||
@ -4090,6 +4186,7 @@ bool CMeterWindow::DoMoveAction(int x, int y, MOUSE mouse)
|
||||
if (!m_MouseOverAction.empty())
|
||||
{
|
||||
m_Rainmeter->ExecuteCommand(m_MouseOverAction.c_str(), this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4130,6 +4227,7 @@ bool CMeterWindow::DoMoveAction(int x, int y, MOUSE mouse)
|
||||
if (!((*j)->GetMouseOverAction().empty()))
|
||||
{
|
||||
m_Rainmeter->ExecuteCommand((*j)->GetMouseOverAction().c_str(), this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4158,6 +4256,7 @@ bool CMeterWindow::DoMoveAction(int x, int y, MOUSE mouse)
|
||||
if (!((*j)->GetMouseLeaveAction().empty()))
|
||||
{
|
||||
m_Rainmeter->ExecuteCommand((*j)->GetMouseLeaveAction().c_str(), this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4209,7 +4308,7 @@ bool CMeterWindow::DoMoveAction(int x, int y, MOUSE mouse)
|
||||
** Stores the new place of the window, in screen coordinates.
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMove(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnMove(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// The lParam's x/y parameters are given in screen coordinates for overlapped and pop-up windows
|
||||
// and in parent-client coordinates for child windows.
|
||||
@ -4252,8 +4351,6 @@ LRESULT CALLBACK CMeterWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
Window = (CMeterWindow*)GetProp(hWnd, L"RAINMETER");
|
||||
}
|
||||
|
||||
if (Window) Window->m_Message = uMsg;
|
||||
|
||||
BEGIN_MESSAGEPROC
|
||||
MESSAGE(OnPaint, WM_PAINT)
|
||||
MESSAGE(OnMove, WM_MOVE)
|
||||
@ -4304,7 +4401,7 @@ LRESULT CALLBACK CMeterWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
** Handles delayed executes
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnDelayedExecute(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnDelayedExecute(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (lParam)
|
||||
{
|
||||
@ -4315,7 +4412,7 @@ LRESULT CMeterWindow::OnDelayedExecute(WPARAM wParam, LPARAM lParam)
|
||||
copyData.cbData = (DWORD)((wcslen(szExecute) + 1) * sizeof(WCHAR));
|
||||
copyData.lpData = (void*)szExecute;
|
||||
|
||||
OnCopyData(NULL, (LPARAM)©Data);
|
||||
OnCopyData(WM_COPYDATA, NULL, (LPARAM)©Data);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -4326,7 +4423,7 @@ LRESULT CMeterWindow::OnDelayedExecute(WPARAM wParam, LPARAM lParam)
|
||||
** Handles delayed refresh
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnDelayedRefresh(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnDelayedRefresh(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -4345,7 +4442,7 @@ LRESULT CMeterWindow::OnDelayedRefresh(WPARAM wParam, LPARAM lParam)
|
||||
** Handles delayed move
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnDelayedMove(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnDelayedMove(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (m_NativeTransparency)
|
||||
{
|
||||
@ -4376,7 +4473,7 @@ LRESULT CMeterWindow::OnDelayedMove(WPARAM wParam, LPARAM lParam)
|
||||
** Handles bangs from the exe
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnCopyData(WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CMeterWindow::OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
COPYDATASTRUCT* pCopyDataStruct = (COPYDATASTRUCT*) lParam;
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include "Export.h"
|
||||
|
||||
#define BEGIN_MESSAGEPROC switch(uMsg) {
|
||||
#define MESSAGE(handler, msg) case msg: return Window?Window->handler(wParam, lParam):DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
#define MESSAGE(handler, msg) case msg: return Window?Window->handler(uMsg, wParam, lParam):DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
#define REJECT_MESSAGE(msg) case msg: return 0;
|
||||
#define END_MESSAGEPROC } return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
|
||||
@ -199,7 +199,7 @@ public:
|
||||
|
||||
void AddMeasureBang(const WCHAR* bang, int index, CMeasure* measure);
|
||||
|
||||
LRESULT OnCopyData(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
std::wstring MakePathAbsolute(std::wstring path);
|
||||
|
||||
@ -208,34 +208,34 @@ public:
|
||||
protected:
|
||||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
LRESULT OnPaint(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCreate(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnTimer(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnSysCommand(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnEnterSizeMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnExitSizeMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnNcHitTest(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnWindowPosChanging(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnContextMenu(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDoubleClick(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDoubleClick(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonDoubleClick(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedExecute(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedRefresh(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnSettingChange(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDisplayChange(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMove(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnEnterSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnExitSizeMove(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseLeave(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonDoubleClick(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedExecute(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedRefresh(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedMove(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDisplayChange(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
private:
|
||||
bool HitTest(int x, int y);
|
||||
@ -255,7 +255,13 @@ private:
|
||||
void InitializeMeasures();
|
||||
void InitializeMeters();
|
||||
void ShowWindowIfAppropriate();
|
||||
HWND GetWindowFromPoint(POINT pos);
|
||||
void HandleButtons(POINT pos, BUTTONPROC proc, CMeterWindow* meterWindow, bool changeCursor);
|
||||
void SetClickThrough(bool b);
|
||||
void SetKeepOnScreen(bool b);
|
||||
void SetWindowDraggable(bool b);
|
||||
void SetSavePosition(bool b);
|
||||
void SetSnapEdges(bool b);
|
||||
bool DoAction(int x, int y, MOUSE mouse, bool test);
|
||||
bool DoMoveAction(int x, int y, MOUSE mouse);
|
||||
bool ResizeWindow(bool reset);
|
||||
@ -356,8 +362,6 @@ private:
|
||||
std::wstring m_SkinName; // Name of the current skin folder
|
||||
std::wstring m_SkinIniFile; // Name of the current skin iniFile
|
||||
|
||||
UINT m_Message; // The current window message
|
||||
|
||||
int m_UpdateCounter;
|
||||
|
||||
CRainmeter* m_Rainmeter; // Pointer to the main object
|
||||
|
@ -2696,7 +2696,7 @@ void CRainmeter::ExecuteCommand(const WCHAR* command, CMeterWindow* meterWindow)
|
||||
CopyDataStruct.cbData = (DWORD)((wcslen(command) + 1) * sizeof(WCHAR));
|
||||
CopyDataStruct.dwData = 1;
|
||||
CopyDataStruct.lpData = (void*)strCommand.c_str();
|
||||
meterWindow->OnCopyData(NULL, (LPARAM)&CopyDataStruct);
|
||||
meterWindow->OnCopyData(WM_COPYDATA, NULL, (LPARAM)&CopyDataStruct);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user