我有一个使用 CTreeCtrl 的 C++ MFC 应用程序,我正在运行 Windows 7 和 Visual Studio 2008。我试图让我的树控件具有展开/折叠按钮的箭头,而不是 +/-
我正在寻找的一个很好的例子是您在 Visual Studio 中编辑项目属性时看到的树控件。
无论何种风格或尝试修改主题,我仍然拥有旧的 xp 风格 +/-
我觉得我错过了一些简单的东西,任何帮助将不胜感激。
我有一个使用 CTreeCtrl 的 C++ MFC 应用程序,我正在运行 Windows 7 和 Visual Studio 2008。我试图让我的树控件具有展开/折叠按钮的箭头,而不是 +/-
我正在寻找的一个很好的例子是您在 Visual Studio 中编辑项目属性时看到的树控件。
无论何种风格或尝试修改主题,我仍然拥有旧的 xp 风格 +/-
我觉得我错过了一些简单的东西,任何帮助将不胜感激。
如果您的应用程序面向 Windows XP 或更高版本,只需使用:
SetWindowTheme(hwndList, L"Explorer", NULL);
hwndList
你的CTreeCtrl
把手在哪里。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/bb759827(v=vs.85).aspx。
添加这个函数来获取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;
}
并使用参数调用此函数,
hwnd: 你的树控件的句柄
类列表: L"TreeView"
子应用: L"Explorer"
空闲列表: NULL