如何获取CTreeCtrl的更新主题

时间:2014-04-26 00:21:52

标签: visual-c++ mfc common-controls

我有一个使用CTreeCtrl的C ++ MFC应用程序,我正在运行Windows 7和visual Studio 2008.我试图让我的树控件为展开/折叠按钮而不是+/-

我正在寻找的一个很好的例子是您在visual studio中编辑项目属性时看到的树控件。

无论什么样式或尝试修改主题,我仍然使用旧的xp样式+/-

我觉得我错过了一些简单的东西,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

如果您的应用程序的目标是Windows XP或更高版本,请使用:

SetWindowTheme(hwndList, L"Explorer", NULL);

其中hwndList是您的CTreeCtrl句柄。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/bb759827(v=vs.85).aspx

答案 1 :(得分:0)

添加此功能以获得vista风格

LRESULT EnableVistaTheme(HWND hwnd, LPCWSTR classList, LPCWSTR subApp, LPCWSTR idlist)
{
    LRESULT lResult = S_FALSE;

HRESULT (__stdcall *pSetWindowTheme)(HWND hwnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList);
HANDLE (__stdcall *pOpenThemeData)(HWND hwnd, LPCWSTR pszClassList);
HRESULT (__stdcall *pCloseThemeData)(HANDLE hTheme);

HMODULE hinstDll = ::LoadLibrary(_T("UxTheme.dll"));
if (hinstDll)
{
    (FARPROC&)pOpenThemeData = ::GetProcAddress(hinstDll, "OpenThemeData");
    (FARPROC&)pCloseThemeData = ::GetProcAddress(hinstDll, "CloseThemeData");
    (FARPROC&)pSetWindowTheme = ::GetProcAddress(hinstDll, "SetWindowTheme");
    if (pSetWindowTheme && pOpenThemeData && pCloseThemeData)
    {
        HANDLE theme = pOpenThemeData(hwnd,classList);
        if (theme!=NULL)
        {
            VERIFY(pCloseThemeData(theme)==S_OK);
            lResult = pSetWindowTheme(hwnd, subApp, idlist);
        }
    }
    ::FreeLibrary(hinstDll);
}
return lResult;
}

并使用参数as

调用此函数

hwnd: 您的树形控件的处理

classList: L"TreeView"

subApp: L"Explorer"

idlist: NULL