https://github.com/ysc3839/win32-darkmode
FixDarkScrollBars
唯一仍然具有轻卷轴的控制是
CMFCPropertyGrid
FixDarkScrollBar
:
void FixDarkScrollBar()
{
HMODULE hComctl = LoadLibraryExW(L"comctl32.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
if (hComctl)
{
auto addr = FindDelayLoadThunkInModule(hComctl, "uxtheme.dll", 49); // OpenNcThemeData
if (addr)
{
DWORD oldProtect;
if (VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), PAGE_READWRITE, &oldProtect))
{
auto MyOpenThemeData = [](HWND hWnd, LPCWSTR classList) -> HTHEME {
if (wcscmp(classList, L"ScrollBar") == 0)
{
hWnd = nullptr;
classList = L"Explorer::ScrollBar";
}
return _OpenNcThemeData(hWnd, classList);
};
addr->u1.Function = reinterpret_cast<ULONG_PTR>(static_cast<fnOpenNcThemeData>(MyOpenThemeData));
VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), oldProtect, &oldProtect);
}
}
}
}
使用间谍++Spy++确认垂直卷轴具有ScrollBar
这与
FixDarkScrollbar
函数一致,在该功能中寻找该类名称:if (wcscmp(classList, L"ScrollBar") == 0)
CMFCPropertyGridCtrl::GetScrollBarCtrl
CScrollBar
。
发现有一个简单的解决方案。在我的问题的评论中,我鼓励我查看原始的MFC源控制(
afxproperygridctrl.h