1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Log window message names

This commit is contained in:
narzoul 2020-01-26 16:17:07 +01:00
parent b898519aa0
commit aeaeeaed4d
11 changed files with 497 additions and 173 deletions

View File

@ -1,29 +1,8 @@
#define WIN32_LEAN_AND_MEAN
#include <codecvt>
#include <iomanip>
#include <locale>
#include <vector>
#include <Windows.h>
#include "Common/Hook.h"
#include "Common/Log.h"
#include <Common/Log.h>
namespace
{
Compat::CriticalSection g_logCs;
template <typename DevMode>
std::ostream& streamDevMode(std::ostream& os, const DevMode& dm)
{
return Compat::LogStruct(os)
<< dm.dmPelsWidth
<< dm.dmPelsHeight
<< dm.dmBitsPerPel
<< dm.dmDisplayFrequency
<< dm.dmDisplayFlags;
}
}
std::ostream& operator<<(std::ostream& os, std::nullptr_t)
@ -72,127 +51,6 @@ std::ostream& operator<<(std::ostream& os, const WCHAR* wstr)
return os;
}
std::ostream& operator<<(std::ostream& os, const DEVMODEA& dm)
{
return streamDevMode(os, dm);
}
std::ostream& operator<<(std::ostream& os, const DEVMODEW& dm)
{
return streamDevMode(os, dm);
}
std::ostream& operator<<(std::ostream& os, const RECT& rect)
{
return Compat::LogStruct(os)
<< rect.left
<< rect.top
<< rect.right
<< rect.bottom;
}
std::ostream& operator<<(std::ostream& os, HDC__& dc)
{
return os << "DC(" << static_cast<void*>(&dc) << ',' << CALL_ORIG_FUNC(WindowFromDC)(&dc) << ')';
}
std::ostream& operator<<(std::ostream& os, HRGN__& rgn)
{
DWORD size = GetRegionData(&rgn, 0, nullptr);
if (0 == size)
{
return os << "RGN[]";
}
std::vector<unsigned char> rgnDataBuf(size);
auto& rgnData = *reinterpret_cast<RGNDATA*>(rgnDataBuf.data());
GetRegionData(&rgn, size, &rgnData);
return os << "RGN" << Compat::array(reinterpret_cast<RECT*>(rgnData.Buffer), rgnData.rdh.nCount);
}
std::ostream& operator<<(std::ostream& os, HWND__& hwnd)
{
char name[256] = "INVALID";
RECT rect = {};
if (IsWindow(&hwnd))
{
GetClassName(&hwnd, name, sizeof(name));
GetWindowRect(&hwnd, &rect);
}
return os << "WND(" << static_cast<void*>(&hwnd) << ',' << name << ',' << rect << ')';
}
std::ostream& operator<<(std::ostream& os, const DDSCAPS& caps)
{
return Compat::LogStruct(os)
<< Compat::hex(caps.dwCaps);
}
std::ostream& operator<<(std::ostream& os, const DDSCAPS2& caps)
{
return Compat::LogStruct(os)
<< Compat::hex(caps.dwCaps)
<< Compat::hex(caps.dwCaps2)
<< Compat::hex(caps.dwCaps3)
<< Compat::hex(caps.dwCaps4);
}
std::ostream& operator<<(std::ostream& os, const DDPIXELFORMAT& pf)
{
return Compat::LogStruct(os)
<< Compat::hex(pf.dwFlags)
<< Compat::hex(pf.dwFourCC)
<< pf.dwRGBBitCount
<< Compat::hex(pf.dwRBitMask)
<< Compat::hex(pf.dwGBitMask)
<< Compat::hex(pf.dwBBitMask)
<< Compat::hex(pf.dwRGBAlphaBitMask);
}
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC& sd)
{
DDSURFACEDESC2 sd2 = {};
memcpy(&sd2, &sd, sizeof(sd));
return os << sd2;
}
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC2& sd)
{
return Compat::LogStruct(os)
<< Compat::hex(sd.dwFlags)
<< sd.dwHeight
<< sd.dwWidth
<< sd.lPitch
<< sd.dwBackBufferCount
<< sd.dwMipMapCount
<< sd.dwAlphaBitDepth
<< sd.dwReserved
<< sd.lpSurface
<< sd.ddpfPixelFormat
<< sd.ddsCaps
<< sd.dwTextureStage;
}
std::ostream& operator<<(std::ostream& os, const CWPSTRUCT& cwrp)
{
return Compat::LogStruct(os)
<< Compat::hex(cwrp.message)
<< cwrp.hwnd
<< Compat::hex(cwrp.wParam)
<< Compat::hex(cwrp.lParam);
}
std::ostream& operator<<(std::ostream& os, const CWPRETSTRUCT& cwrp)
{
return Compat::LogStruct(os)
<< Compat::hex(cwrp.message)
<< cwrp.hwnd
<< Compat::hex(cwrp.wParam)
<< Compat::hex(cwrp.lParam)
<< Compat::hex(cwrp.lResult);
}
namespace Compat
{
Log::Log() : m_lock(g_logCs)
@ -217,8 +75,8 @@ namespace Compat
}
thread_local DWORD Log::s_indent = 0;
thread_local DWORD Log::s_outParamDepth = 0;
thread_local bool Log::s_isLeaveLog = false;
std::ofstream Log::s_logFile("ddraw.log");
DWORD Log::s_outParamDepth = 0;
bool Log::s_isLeaveLog = false;
}

View File

@ -1,44 +1,33 @@
#pragma once
#include <ddraw.h>
#include <fstream>
#include <functional>
#include <ostream>
#include <type_traits>
#include "Common/ScopedCriticalSection.h"
#include <Windows.h>
#define CONCAT_(a, b) a##b
#define CONCAT(a, b) CONCAT_(a, b)
#include <Common/ScopedCriticalSection.h>
#include <DDraw/Log.h>
#include <Win32/Log.h>
#define LOG_FUNC(...) Compat::LogFunc logFunc(__VA_ARGS__)
#define LOG_RESULT(...) logFunc.setResult(__VA_ARGS__)
#define LOG_ONCE(msg) \
static bool CONCAT(isAlreadyLogged, __LINE__) = false; \
if (!CONCAT(isAlreadyLogged, __LINE__)) \
{ \
Compat::Log() << msg; \
CONCAT(isAlreadyLogged, __LINE__) = true; \
static bool isAlreadyLogged = false; \
if (!isAlreadyLogged) \
{ \
Compat::Log() << msg; \
isAlreadyLogged = true; \
} \
}
std::ostream& operator<<(std::ostream& os, std::nullptr_t);
std::ostream& operator<<(std::ostream& os, const char* str);
std::ostream& operator<<(std::ostream& os, const unsigned char* data);
std::ostream& operator<<(std::ostream& os, const WCHAR* wstr);
std::ostream& operator<<(std::ostream& os, const DEVMODEA& dm);
std::ostream& operator<<(std::ostream& os, const DEVMODEW& dm);
std::ostream& operator<<(std::ostream& os, const RECT& rect);
std::ostream& operator<<(std::ostream& os, HDC__& dc);
std::ostream& operator<<(std::ostream& os, HRGN__& rgn);
std::ostream& operator<<(std::ostream& os, HWND__& hwnd);
std::ostream& operator<<(std::ostream& os, const DDSCAPS& caps);
std::ostream& operator<<(std::ostream& os, const DDSCAPS2& caps);
std::ostream& operator<<(std::ostream& os, const DDPIXELFORMAT& pf);
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC& sd);
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC2& sd);
std::ostream& operator<<(std::ostream& os, const CWPSTRUCT& cwrp);
std::ostream& operator<<(std::ostream& os, const CWPRETSTRUCT& cwrp);
namespace Compat
{
@ -191,10 +180,10 @@ namespace Compat
ScopedCriticalSection m_lock;
static thread_local DWORD s_indent;
static thread_local DWORD s_outParamDepth;
static thread_local bool s_isLeaveLog;
static std::ofstream s_logFile;
static DWORD s_outParamDepth;
static bool s_isLeaveLog;
};
class LogStruct : public detail::LogFirstParam
@ -222,6 +211,7 @@ namespace Compat
~LogFunc()
{
Log::s_isLeaveLog = true;
Log::s_indent -= 2;
Log log;
log << "< ";
@ -232,6 +222,7 @@ namespace Compat
log << " = ";
m_printResult(log);
}
Log::s_isLeaveLog = false;
}
template <typename T>

View File

@ -26,7 +26,7 @@ namespace
LRESULT CALLBACK ddWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LOG_FUNC("ddWndProc", hwnd, Compat::hex(uMsg), Compat::hex(wParam), Compat::hex(lParam));
LOG_FUNC("ddWndProc", hwnd, Compat::logWm(uMsg), Compat::hex(wParam), Compat::hex(lParam));
static bool isDisplayChangeNotificationEnabled = true;
switch (uMsg)

53
DDrawCompat/DDraw/Log.cpp Normal file
View File

@ -0,0 +1,53 @@
#include <Common/Log.h>
#include <DDraw/Log.h>
std::ostream& operator<<(std::ostream& os, const DDSCAPS& caps)
{
return Compat::LogStruct(os)
<< Compat::hex(caps.dwCaps);
}
std::ostream& operator<<(std::ostream& os, const DDSCAPS2& caps)
{
return Compat::LogStruct(os)
<< Compat::hex(caps.dwCaps)
<< Compat::hex(caps.dwCaps2)
<< Compat::hex(caps.dwCaps3)
<< Compat::hex(caps.dwCaps4);
}
std::ostream& operator<<(std::ostream& os, const DDPIXELFORMAT& pf)
{
return Compat::LogStruct(os)
<< Compat::hex(pf.dwFlags)
<< Compat::hex(pf.dwFourCC)
<< pf.dwRGBBitCount
<< Compat::hex(pf.dwRBitMask)
<< Compat::hex(pf.dwGBitMask)
<< Compat::hex(pf.dwBBitMask)
<< Compat::hex(pf.dwRGBAlphaBitMask);
}
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC& sd)
{
DDSURFACEDESC2 sd2 = {};
memcpy(&sd2, &sd, sizeof(sd));
return os << sd2;
}
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC2& sd)
{
return Compat::LogStruct(os)
<< Compat::hex(sd.dwFlags)
<< sd.dwHeight
<< sd.dwWidth
<< sd.lPitch
<< sd.dwBackBufferCount
<< sd.dwMipMapCount
<< sd.dwAlphaBitDepth
<< sd.dwReserved
<< sd.lpSurface
<< sd.ddpfPixelFormat
<< sd.ddsCaps
<< sd.dwTextureStage;
}

11
DDrawCompat/DDraw/Log.h Normal file
View File

@ -0,0 +1,11 @@
#pragma once
#include <ostream>
#include <ddraw.h>
std::ostream& operator<<(std::ostream& os, const DDSCAPS& caps);
std::ostream& operator<<(std::ostream& os, const DDSCAPS2& caps);
std::ostream& operator<<(std::ostream& os, const DDPIXELFORMAT& pf);
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC& sd);
std::ostream& operator<<(std::ostream& os, const DDSURFACEDESC2& sd);

View File

@ -178,6 +178,7 @@
<ClInclude Include="DDraw\DirectDrawPalette.h" />
<ClInclude Include="DDraw\DirectDrawSurface.h" />
<ClInclude Include="DDraw\Hooks.h" />
<ClInclude Include="DDraw\Log.h" />
<ClInclude Include="DDraw\ScopedThreadLock.h" />
<ClInclude Include="DDraw\Surfaces\PrimarySurface.h" />
<ClInclude Include="DDraw\Surfaces\PrimarySurfaceImpl.h" />
@ -223,6 +224,7 @@
<ClInclude Include="Gdi\WinProc.h" />
<ClInclude Include="Win32\DisplayMode.h" />
<ClInclude Include="Win32\FontSmoothing.h" />
<ClInclude Include="Win32\Log.h" />
<ClInclude Include="Win32\MsgHooks.h" />
<ClInclude Include="Win32\Registry.h" />
</ItemGroup>
@ -254,6 +256,7 @@
<ClCompile Include="DDraw\DirectDrawSurface.cpp" />
<ClCompile Include="DDraw\Hooks.cpp" />
<ClCompile Include="DDraw\IReleaseNotifier.cpp" />
<ClCompile Include="DDraw\Log.cpp" />
<ClCompile Include="DDraw\RealPrimarySurface.cpp" />
<ClCompile Include="DDraw\Surfaces\PrimarySurface.cpp" />
<ClCompile Include="DDraw\Surfaces\PrimarySurfaceImpl.cpp" />
@ -287,6 +290,7 @@
<ClCompile Include="Gdi\WinProc.cpp" />
<ClCompile Include="Win32\DisplayMode.cpp" />
<ClCompile Include="Win32\FontSmoothing.cpp" />
<ClCompile Include="Win32\Log.cpp" />
<ClCompile Include="Win32\MsgHooks.cpp" />
<ClCompile Include="Win32\Registry.cpp" />
</ItemGroup>

View File

@ -357,6 +357,12 @@
<ClInclude Include="Direct3d\Log.h">
<Filter>Header Files\Direct3d</Filter>
</ClInclude>
<ClInclude Include="Win32\Log.h">
<Filter>Header Files\Win32</Filter>
</ClInclude>
<ClInclude Include="DDraw\Log.h">
<Filter>Header Files\DDraw</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Gdi\Gdi.cpp">
@ -545,6 +551,12 @@
<ClCompile Include="Direct3d\Log.cpp">
<Filter>Source Files\Direct3d</Filter>
</ClCompile>
<ClCompile Include="Win32\Log.cpp">
<Filter>Source Files\Win32</Filter>
</ClCompile>
<ClCompile Include="DDraw\Log.cpp">
<Filter>Source Files\DDraw</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Dll\DDrawCompat.def">

View File

@ -162,7 +162,7 @@ namespace
LRESULT defPaintProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc,
const char* origWndProcName)
{
LOG_FUNC(origWndProcName, hwnd, Compat::hex(msg), Compat::hex(wParam), Compat::hex(lParam));
LOG_FUNC(origWndProcName, hwnd, Compat::logWm(msg), Compat::hex(wParam), Compat::hex(lParam));
return LOG_RESULT(defPaintProc(hwnd, msg, wParam, lParam, origWndProc));
}
@ -433,7 +433,7 @@ namespace
LRESULT CALLBACK user32WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
const std::string& procName, WndProcHook wndProcHook, WNDPROC oldWndProcTrampoline)
{
LOG_FUNC(procName.c_str(), hwnd, Compat::hex(uMsg), Compat::hex(wParam), Compat::hex(lParam));
LOG_FUNC(procName.c_str(), hwnd, Compat::logWm(uMsg), Compat::hex(wParam), Compat::hex(lParam));
return LOG_RESULT(wndProcHook(hwnd, uMsg, wParam, lParam, oldWndProcTrampoline));
}

View File

@ -24,7 +24,7 @@ namespace
LRESULT CALLBACK messageWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LOG_FUNC("messageWindowProc", hwnd, Compat::hex(uMsg), Compat::hex(wParam), Compat::hex(lParam));
LOG_FUNC("messageWindowProc", hwnd, Compat::logWm(uMsg), Compat::hex(wParam), Compat::hex(lParam));
switch (uMsg)
{
case WM_CREATEPRESENTATIONWINDOW:
@ -59,7 +59,7 @@ namespace
LRESULT CALLBACK presentationWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LOG_FUNC("presentationWindowProc", hwnd, Compat::hex(uMsg), Compat::hex(wParam), Compat::hex(lParam));
LOG_FUNC("presentationWindowProc", hwnd, Compat::logWm(uMsg), Compat::hex(wParam), Compat::hex(lParam));
return CALL_ORIG_FUNC(DefWindowProc)(hwnd, uMsg, wParam, lParam);
}

374
DDrawCompat/Win32/Log.cpp Normal file
View File

@ -0,0 +1,374 @@
#include <sstream>
#include <Common/Hook.h>
#include <Common/Log.h>
#include <Win32/Log.h>
namespace
{
template <typename DevMode>
std::ostream& logDevMode(std::ostream& os, const DevMode& dm)
{
return Compat::LogStruct(os)
<< dm.dmPelsWidth
<< dm.dmPelsHeight
<< dm.dmBitsPerPel
<< dm.dmDisplayFrequency
<< dm.dmDisplayFlags;
}
}
std::ostream& operator<<(std::ostream& os, const CWPSTRUCT& cwrp)
{
return Compat::LogStruct(os)
<< Compat::logWm(cwrp.message)
<< cwrp.hwnd
<< Compat::hex(cwrp.wParam)
<< Compat::hex(cwrp.lParam);
}
std::ostream& operator<<(std::ostream& os, const CWPRETSTRUCT& cwrp)
{
return Compat::LogStruct(os)
<< Compat::logWm(cwrp.message)
<< cwrp.hwnd
<< Compat::hex(cwrp.wParam)
<< Compat::hex(cwrp.lParam)
<< Compat::hex(cwrp.lResult);
}
std::ostream& operator<<(std::ostream& os, const DEVMODEA& dm)
{
return logDevMode(os, dm);
}
std::ostream& operator<<(std::ostream& os, const DEVMODEW& dm)
{
return logDevMode(os, dm);
}
std::ostream& operator<<(std::ostream& os, HDC dc)
{
if (!dc)
{
return os << "DC(null)";
}
return os << "DC(" << static_cast<void*>(dc) << ',' << CALL_ORIG_FUNC(WindowFromDC)(dc) << ')';
}
std::ostream& operator<<(std::ostream& os, HRGN rgn)
{
if (!rgn)
{
return os << "RGN(null)";
}
DWORD size = GetRegionData(rgn, 0, nullptr);
if (0 == size)
{
return os << "RGN[]";
}
std::vector<unsigned char> rgnDataBuf(size);
auto& rgnData = *reinterpret_cast<RGNDATA*>(rgnDataBuf.data());
GetRegionData(rgn, size, &rgnData);
return os << "RGN" << Compat::array(reinterpret_cast<RECT*>(rgnData.Buffer), rgnData.rdh.nCount);
}
std::ostream& operator<<(std::ostream& os, HWND hwnd)
{
if (!hwnd)
{
return os << "WND(null)";
}
char name[256] = "INVALID";
RECT rect = {};
if (IsWindow(hwnd))
{
GetClassName(hwnd, name, sizeof(name));
GetWindowRect(hwnd, &rect);
}
return os << "WND(" << static_cast<void*>(hwnd) << ',' << name << ',' << rect << ')';
}
std::ostream& operator<<(std::ostream& os, const MSG& msg)
{
return Compat::LogStruct(os)
<< msg.hwnd
<< Compat::logWm(msg.message)
<< Compat::hex(msg.wParam)
<< Compat::hex(msg.lParam)
<< msg.time
<< msg.pt;
}
std::ostream& operator<<(std::ostream& os, const RECT& rect)
{
return Compat::LogStruct(os)
<< rect.left
<< rect.top
<< rect.right
<< rect.bottom;
}
namespace Compat
{
std::string logWm(UINT msg)
{
#define LOG_WM_CASE(msg) case msg: return #msg;
switch (msg)
{
LOG_WM_CASE(WM_NULL);
LOG_WM_CASE(WM_CREATE);
LOG_WM_CASE(WM_DESTROY);
LOG_WM_CASE(WM_MOVE);
LOG_WM_CASE(WM_SIZE);
LOG_WM_CASE(WM_ACTIVATE);
LOG_WM_CASE(WM_SETFOCUS);
LOG_WM_CASE(WM_KILLFOCUS);
LOG_WM_CASE(WM_ENABLE);
LOG_WM_CASE(WM_SETREDRAW);
LOG_WM_CASE(WM_SETTEXT);
LOG_WM_CASE(WM_GETTEXT);
LOG_WM_CASE(WM_GETTEXTLENGTH);
LOG_WM_CASE(WM_PAINT);
LOG_WM_CASE(WM_CLOSE);
LOG_WM_CASE(WM_QUERYENDSESSION);
LOG_WM_CASE(WM_QUERYOPEN);
LOG_WM_CASE(WM_ENDSESSION);
LOG_WM_CASE(WM_QUIT);
LOG_WM_CASE(WM_ERASEBKGND);
LOG_WM_CASE(WM_SYSCOLORCHANGE);
LOG_WM_CASE(WM_SHOWWINDOW);
LOG_WM_CASE(WM_SETTINGCHANGE);
LOG_WM_CASE(WM_DEVMODECHANGE);
LOG_WM_CASE(WM_ACTIVATEAPP);
LOG_WM_CASE(WM_FONTCHANGE);
LOG_WM_CASE(WM_TIMECHANGE);
LOG_WM_CASE(WM_CANCELMODE);
LOG_WM_CASE(WM_SETCURSOR);
LOG_WM_CASE(WM_MOUSEACTIVATE);
LOG_WM_CASE(WM_CHILDACTIVATE);
LOG_WM_CASE(WM_QUEUESYNC);
LOG_WM_CASE(WM_GETMINMAXINFO);
LOG_WM_CASE(WM_PAINTICON);
LOG_WM_CASE(WM_ICONERASEBKGND);
LOG_WM_CASE(WM_NEXTDLGCTL);
LOG_WM_CASE(WM_SPOOLERSTATUS);
LOG_WM_CASE(WM_DRAWITEM);
LOG_WM_CASE(WM_MEASUREITEM);
LOG_WM_CASE(WM_DELETEITEM);
LOG_WM_CASE(WM_VKEYTOITEM);
LOG_WM_CASE(WM_CHARTOITEM);
LOG_WM_CASE(WM_SETFONT);
LOG_WM_CASE(WM_GETFONT);
LOG_WM_CASE(WM_SETHOTKEY);
LOG_WM_CASE(WM_GETHOTKEY);
LOG_WM_CASE(WM_QUERYDRAGICON);
LOG_WM_CASE(WM_COMPAREITEM);
LOG_WM_CASE(WM_GETOBJECT);
LOG_WM_CASE(WM_COMPACTING);
LOG_WM_CASE(WM_COMMNOTIFY);
LOG_WM_CASE(WM_WINDOWPOSCHANGING);
LOG_WM_CASE(WM_WINDOWPOSCHANGED);
LOG_WM_CASE(WM_POWER);
LOG_WM_CASE(WM_COPYDATA);
LOG_WM_CASE(WM_CANCELJOURNAL);
LOG_WM_CASE(WM_NOTIFY);
LOG_WM_CASE(WM_INPUTLANGCHANGEREQUEST);
LOG_WM_CASE(WM_INPUTLANGCHANGE);
LOG_WM_CASE(WM_TCARD);
LOG_WM_CASE(WM_HELP);
LOG_WM_CASE(WM_USERCHANGED);
LOG_WM_CASE(WM_NOTIFYFORMAT);
LOG_WM_CASE(WM_CONTEXTMENU);
LOG_WM_CASE(WM_STYLECHANGING);
LOG_WM_CASE(WM_STYLECHANGED);
LOG_WM_CASE(WM_DISPLAYCHANGE);
LOG_WM_CASE(WM_GETICON);
LOG_WM_CASE(WM_SETICON);
LOG_WM_CASE(WM_NCCREATE);
LOG_WM_CASE(WM_NCDESTROY);
LOG_WM_CASE(WM_NCCALCSIZE);
LOG_WM_CASE(WM_NCHITTEST);
LOG_WM_CASE(WM_NCPAINT);
LOG_WM_CASE(WM_NCACTIVATE);
LOG_WM_CASE(WM_GETDLGCODE);
LOG_WM_CASE(WM_SYNCPAINT);
LOG_WM_CASE(WM_NCMOUSEMOVE);
LOG_WM_CASE(WM_NCLBUTTONDOWN);
LOG_WM_CASE(WM_NCLBUTTONUP);
LOG_WM_CASE(WM_NCLBUTTONDBLCLK);
LOG_WM_CASE(WM_NCRBUTTONDOWN);
LOG_WM_CASE(WM_NCRBUTTONUP);
LOG_WM_CASE(WM_NCRBUTTONDBLCLK);
LOG_WM_CASE(WM_NCMBUTTONDOWN);
LOG_WM_CASE(WM_NCMBUTTONUP);
LOG_WM_CASE(WM_NCMBUTTONDBLCLK);
LOG_WM_CASE(WM_NCXBUTTONDOWN);
LOG_WM_CASE(WM_NCXBUTTONUP);
LOG_WM_CASE(WM_NCXBUTTONDBLCLK);
LOG_WM_CASE(WM_INPUT_DEVICE_CHANGE);
LOG_WM_CASE(WM_INPUT);
LOG_WM_CASE(WM_KEYDOWN);
LOG_WM_CASE(WM_KEYUP);
LOG_WM_CASE(WM_CHAR);
LOG_WM_CASE(WM_DEADCHAR);
LOG_WM_CASE(WM_SYSKEYDOWN);
LOG_WM_CASE(WM_SYSKEYUP);
LOG_WM_CASE(WM_SYSCHAR);
LOG_WM_CASE(WM_SYSDEADCHAR);
LOG_WM_CASE(WM_UNICHAR);
LOG_WM_CASE(WM_IME_STARTCOMPOSITION);
LOG_WM_CASE(WM_IME_ENDCOMPOSITION);
LOG_WM_CASE(WM_IME_COMPOSITION);
LOG_WM_CASE(WM_INITDIALOG);
LOG_WM_CASE(WM_COMMAND);
LOG_WM_CASE(WM_SYSCOMMAND);
LOG_WM_CASE(WM_TIMER);
LOG_WM_CASE(WM_HSCROLL);
LOG_WM_CASE(WM_VSCROLL);
LOG_WM_CASE(WM_INITMENU);
LOG_WM_CASE(WM_INITMENUPOPUP);
LOG_WM_CASE(WM_GESTURE);
LOG_WM_CASE(WM_GESTURENOTIFY);
LOG_WM_CASE(WM_MENUSELECT);
LOG_WM_CASE(WM_MENUCHAR);
LOG_WM_CASE(WM_ENTERIDLE);
LOG_WM_CASE(WM_MENURBUTTONUP);
LOG_WM_CASE(WM_MENUDRAG);
LOG_WM_CASE(WM_MENUGETOBJECT);
LOG_WM_CASE(WM_UNINITMENUPOPUP);
LOG_WM_CASE(WM_MENUCOMMAND);
LOG_WM_CASE(WM_CHANGEUISTATE);
LOG_WM_CASE(WM_UPDATEUISTATE);
LOG_WM_CASE(WM_QUERYUISTATE);
LOG_WM_CASE(WM_CTLCOLORMSGBOX);
LOG_WM_CASE(WM_CTLCOLOREDIT);
LOG_WM_CASE(WM_CTLCOLORLISTBOX);
LOG_WM_CASE(WM_CTLCOLORBTN);
LOG_WM_CASE(WM_CTLCOLORDLG);
LOG_WM_CASE(WM_CTLCOLORSCROLLBAR);
LOG_WM_CASE(WM_CTLCOLORSTATIC);
LOG_WM_CASE(MN_GETHMENU);
LOG_WM_CASE(WM_MOUSEMOVE);
LOG_WM_CASE(WM_LBUTTONDOWN);
LOG_WM_CASE(WM_LBUTTONUP);
LOG_WM_CASE(WM_LBUTTONDBLCLK);
LOG_WM_CASE(WM_RBUTTONDOWN);
LOG_WM_CASE(WM_RBUTTONUP);
LOG_WM_CASE(WM_RBUTTONDBLCLK);
LOG_WM_CASE(WM_MBUTTONDOWN);
LOG_WM_CASE(WM_MBUTTONUP);
LOG_WM_CASE(WM_MBUTTONDBLCLK);
LOG_WM_CASE(WM_MOUSEWHEEL);
LOG_WM_CASE(WM_XBUTTONDOWN);
LOG_WM_CASE(WM_XBUTTONUP);
LOG_WM_CASE(WM_XBUTTONDBLCLK);
LOG_WM_CASE(WM_MOUSEHWHEEL);
LOG_WM_CASE(WM_PARENTNOTIFY);
LOG_WM_CASE(WM_ENTERMENULOOP);
LOG_WM_CASE(WM_EXITMENULOOP);
LOG_WM_CASE(WM_NEXTMENU);
LOG_WM_CASE(WM_SIZING);
LOG_WM_CASE(WM_CAPTURECHANGED);
LOG_WM_CASE(WM_MOVING);
LOG_WM_CASE(WM_POWERBROADCAST);
LOG_WM_CASE(WM_DEVICECHANGE);
LOG_WM_CASE(WM_MDICREATE);
LOG_WM_CASE(WM_MDIDESTROY);
LOG_WM_CASE(WM_MDIACTIVATE);
LOG_WM_CASE(WM_MDIRESTORE);
LOG_WM_CASE(WM_MDINEXT);
LOG_WM_CASE(WM_MDIMAXIMIZE);
LOG_WM_CASE(WM_MDITILE);
LOG_WM_CASE(WM_MDICASCADE);
LOG_WM_CASE(WM_MDIICONARRANGE);
LOG_WM_CASE(WM_MDIGETACTIVE);
LOG_WM_CASE(WM_MDISETMENU);
LOG_WM_CASE(WM_ENTERSIZEMOVE);
LOG_WM_CASE(WM_EXITSIZEMOVE);
LOG_WM_CASE(WM_DROPFILES);
LOG_WM_CASE(WM_MDIREFRESHMENU);
LOG_WM_CASE(WM_POINTERDEVICECHANGE);
LOG_WM_CASE(WM_POINTERDEVICEINRANGE);
LOG_WM_CASE(WM_POINTERDEVICEOUTOFRANGE);
LOG_WM_CASE(WM_TOUCH);
LOG_WM_CASE(WM_NCPOINTERUPDATE);
LOG_WM_CASE(WM_NCPOINTERDOWN);
LOG_WM_CASE(WM_NCPOINTERUP);
LOG_WM_CASE(WM_POINTERUPDATE);
LOG_WM_CASE(WM_POINTERDOWN);
LOG_WM_CASE(WM_POINTERUP);
LOG_WM_CASE(WM_POINTERENTER);
LOG_WM_CASE(WM_POINTERLEAVE);
LOG_WM_CASE(WM_POINTERACTIVATE);
LOG_WM_CASE(WM_POINTERCAPTURECHANGED);
LOG_WM_CASE(WM_TOUCHHITTESTING);
LOG_WM_CASE(WM_POINTERWHEEL);
LOG_WM_CASE(WM_POINTERHWHEEL);
LOG_WM_CASE(DM_POINTERHITTEST);
LOG_WM_CASE(WM_POINTERROUTEDTO);
LOG_WM_CASE(WM_POINTERROUTEDAWAY);
LOG_WM_CASE(WM_POINTERROUTEDRELEASED);
LOG_WM_CASE(WM_IME_SETCONTEXT);
LOG_WM_CASE(WM_IME_NOTIFY);
LOG_WM_CASE(WM_IME_CONTROL);
LOG_WM_CASE(WM_IME_COMPOSITIONFULL);
LOG_WM_CASE(WM_IME_SELECT);
LOG_WM_CASE(WM_IME_CHAR);
LOG_WM_CASE(WM_IME_REQUEST);
LOG_WM_CASE(WM_IME_KEYDOWN);
LOG_WM_CASE(WM_IME_KEYUP);
LOG_WM_CASE(WM_NCMOUSEHOVER);
LOG_WM_CASE(WM_MOUSEHOVER);
LOG_WM_CASE(WM_NCMOUSELEAVE);
LOG_WM_CASE(WM_MOUSELEAVE);
LOG_WM_CASE(WM_WTSSESSION_CHANGE);
LOG_WM_CASE(WM_DPICHANGED);
LOG_WM_CASE(WM_DPICHANGED_BEFOREPARENT);
LOG_WM_CASE(WM_DPICHANGED_AFTERPARENT);
LOG_WM_CASE(WM_GETDPISCALEDSIZE);
LOG_WM_CASE(WM_CUT);
LOG_WM_CASE(WM_COPY);
LOG_WM_CASE(WM_PASTE);
LOG_WM_CASE(WM_CLEAR);
LOG_WM_CASE(WM_UNDO);
LOG_WM_CASE(WM_RENDERFORMAT);
LOG_WM_CASE(WM_RENDERALLFORMATS);
LOG_WM_CASE(WM_DESTROYCLIPBOARD);
LOG_WM_CASE(WM_DRAWCLIPBOARD);
LOG_WM_CASE(WM_PAINTCLIPBOARD);
LOG_WM_CASE(WM_VSCROLLCLIPBOARD);
LOG_WM_CASE(WM_SIZECLIPBOARD);
LOG_WM_CASE(WM_ASKCBFORMATNAME);
LOG_WM_CASE(WM_CHANGECBCHAIN);
LOG_WM_CASE(WM_HSCROLLCLIPBOARD);
LOG_WM_CASE(WM_QUERYNEWPALETTE);
LOG_WM_CASE(WM_PALETTEISCHANGING);
LOG_WM_CASE(WM_PALETTECHANGED);
LOG_WM_CASE(WM_HOTKEY);
LOG_WM_CASE(WM_PRINT);
LOG_WM_CASE(WM_PRINTCLIENT);
LOG_WM_CASE(WM_APPCOMMAND);
LOG_WM_CASE(WM_THEMECHANGED);
LOG_WM_CASE(WM_CLIPBOARDUPDATE);
LOG_WM_CASE(WM_DWMCOMPOSITIONCHANGED);
LOG_WM_CASE(WM_DWMNCRENDERINGCHANGED);
LOG_WM_CASE(WM_DWMCOLORIZATIONCOLORCHANGED);
LOG_WM_CASE(WM_DWMWINDOWMAXIMIZEDCHANGE);
LOG_WM_CASE(WM_DWMSENDICONICTHUMBNAIL);
LOG_WM_CASE(WM_DWMSENDICONICLIVEPREVIEWBITMAP);
LOG_WM_CASE(WM_GETTITLEBARINFOEX);
};
#undef LOG_WM_CASE
std::ostringstream oss;
oss.width(4);
oss.fill('0');
oss << "WM_" << std::hex << msg;
return oss.str();
}
}

21
DDrawCompat/Win32/Log.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#include <ostream>
#include <string>
#include <Windows.h>
std::ostream& operator<<(std::ostream& os, const CWPSTRUCT& cwrp);
std::ostream& operator<<(std::ostream& os, const CWPRETSTRUCT& cwrp);
std::ostream& operator<<(std::ostream& os, const DEVMODEA& dm);
std::ostream& operator<<(std::ostream& os, const DEVMODEW& dm);
std::ostream& operator<<(std::ostream& os, HDC dc);
std::ostream& operator<<(std::ostream& os, HRGN rgn);
std::ostream& operator<<(std::ostream& os, HWND hwnd);
std::ostream& operator<<(std::ostream& os, const MSG& msg);
std::ostream& operator<<(std::ostream& os, const RECT& rect);
namespace Compat
{
std::string logWm(UINT msg);
}