Zhiyi Zhang (@zhiyi) commented about dlls/uxtheme/system.c:
/* If SetWindowTheme was used on the window, that overrides the class list passed to this function */ pszUseClassList = UXTHEME_GetWindowProperty(hwnd, atSubIdList, szClassBuff, ARRAY_SIZE(szClassBuff)); if(!pszUseClassList) pszUseClassList = pszClassList;
if (pszUseClassList)
p = wcschr(pszClassList, ':');if (p){/* If the application class is already set then fail */if (!pszAppName){p++;lstrcpynW(szAppBuff, pszUseClassList, min(p - pszUseClassList, 256));szAppBuff[p - pszUseClassList] = 0;if (*p == ':') p++;
I am afraid this is wrong. You're only parsing the first app/class here. You should do the parsing in MSSTYLES_OpenThemeClass() instead. For example, OpenThemeData(hwnd, L"abc:def;explorer::treeview") succeeds.