winamp/Src/Plugins/General/gen_ml/reflectmsg.h
2024-09-24 14:54:57 +02:00

50 lines
2.1 KiB
C

#ifndef NULLOSFT_MEDIALIBRARY_REFLECTED_MESSAGES_HEADER
#define NULLOSFT_MEDIALIBRARY_REFLECTED_MESSAGES_HEADER
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#include <windows.h>
// reflected messages will pass this as lParam
typedef struct _REFLECTPARAM
{
LRESULT result; // return result here. If refleting window is dialog it is responsible to set result using SetWindowlongPtr.
LPARAM lParam; // orginal lParam
HWND hwndFrom; // reflecting window
}REFLECTPARAM, *PREFLECTPARAM;
// reflected messages
// you need to return TRUE if you procesed a message otherwise FALSE
#define REFLECT_BASE (WM_APP + 0x3000)
#define WM_SUPPORTREFLECT (REFLECT_BASE + 0x0000) // wParam = (WPARM)(UINT)testMessageCode. Return TRUE if you suport message reflecting
#define REFLECTED_DRAWITEM (REFLECT_BASE + WM_DRAWITEM)
#define REFLECTED_CTLCOLORBTN (REFLECT_BASE + WM_CTLCOLORBTN)
#define REFLECTED_CTLCOLOREDIT (REFLECT_BASE + WM_CTLCOLOREDIT)
#define REFLECTED_CTLCOLORLISTBOX (REFLECT_BASE + WM_CTLCOLORLISTBOX)
#define REFLECTED_CTLCOLORSCROLLBAR (REFLECT_BASE + WM_CTLCOLORSCROLLBAR)
#define REFLECTED_CTLCOLORSTATIC (REFLECT_BASE + WM_CTLCOLORSTATIC)
#define REFLECTED_NOTIFY (REFLECT_BASE + WM_NOTIFY)
#define REFLECTED_COMMAND (REFLECT_BASE + WM_COMMAND)
#define REFLECTED_MEASUREITEM (REFLECT_BASE + WM_MEASUREITEM)
#ifdef __cplusplus
#define REFLECTMESSAGE(hwnd, uMsg, wParam, lParam) (BOOL)::SendMessage((hwnd), (REFLECT_BASE + (uMsg)), (wParam), (lParam))
#else
#define REFLECTMESSAGE(hwnd, uMsg, wParam, lParam) (BOOL)SendMessage((hwnd), (REFLECT_BASE + (uMsg)), (wParam), (lParam))
#endif
BOOL CanReflect(UINT uMsg);
BOOL ReflectMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL bDialog, LRESULT *pResult);
HRESULT InstallReflector(HWND hwnd); // this is installs simple window hook that allows reflection code to run.
// returns , S_OK - hook installed, S_FALSE in case hook already installed, E_XXX - something bad
BOOL RemoveReflector(HWND hwnd); // returns TRUE if window was reflecting
#endif // NULLOSFT_MEDIALIBRARY_REFLECTED_MESSAGES_HEADER