https://github.com/ysc3839/win32-darkmode
Я реализовал fixdarkscrollbars Функция в моем тестовом проекте. Хорошей новостью является то, что он работает для 99% моего диалога:
< /p>
Единственное управление, у которого все еще есть световые прокрутки, - это CMFCPropertyGrid < /code>. Вот 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(static_cast(MyOpenThemeData));
VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), oldProtect, &oldProtect);
}
}
}
}
spy ++ подтверждает, что вертикальная прокрутка имеет прокрутку Имя класса.
[*] Это согласуется с функцией fixdarkscrollbar < /code>, где она ищет имя этого класса: < /li>
< /ul>
Код: Выделить всё
if (wcscmp(classList, L"ScrollBar") == 0)
< /уль>
Подробнее здесь: https://stackoverflow.com/questions/794 ... opertygrid