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.