是否有任何方法可以使用主题(Theme)或其他方式更改Visual Studio中“解决方案资源管理器”(Solution Explorer)的背景颜色?
我可以通过更改整个Windows系统的颜色设置来更改它,但显然这会影响太多了。
是否有任何方法可以使用主题(Theme)或其他方式更改Visual Studio中“解决方案资源管理器”(Solution Explorer)的背景颜色?
我可以通过更改整个Windows系统的颜色设置来更改它,但显然这会影响太多了。
我在不到一小时的时间内创建了VS扩展,搜索扩展管理器中的"SExColor"即可使用。享受吧;)
@aloneguid ...我应该早就看到这个了..谢谢您先生!
@ver(关于VS 2008解决方案的问题;)- 一种B52式的方法,在devenv.exe内部对所有SysTreeView32进行地毯式打击。可能需要额外的参数来指定所需颜色,否则RGB(220,220,220)-对我最有效的效果。
#include <windows.h>
#include "psapi.h"
#include "shlwapi.h"
#include "commctrl.h"
COLORREF clr = RGB(220,220,220);
BOOL CALLBACK wenum( HWND hwnd, LPARAM lParam)
{
const UINT cb = 261;
static wchar_t name[] = L"SysTreeView32",
tmp[cb] = {0};
if( ::GetClassNameW( hwnd, tmp, 260 ) && 0 == _wcsicmp( name, tmp ) )
{
::SendMessageW( hwnd, TVM_SETBKCOLOR, 0, (LPARAM)clr );
}
return TRUE;
}
BOOL CALLBACK EnumTops(HWND hwnd, LPARAM lParam)
{
DWORD dwThreadId = 0,
dwProcessId = 0;
HINSTANCE hInstance;
static wchar_t derVS[] = L"devenv.exe";
wchar_t name[_MAX_PATH] = {0},
*exe = 0;
HANDLE hProcess;
if (!hwnd) return TRUE; // Not a window
if (!::IsWindowVisible(hwnd)) return TRUE; // Not visible
if (!SendMessage(hwnd, WM_GETTEXT, sizeof(name), (LPARAM)name))
return TRUE; // No window title
dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if( !GetModuleFileNameEx(hProcess, 0, name, sizeof(name))) goto exit;
exe = ::PathFindFileNameW( name );
if( (void*)exe == (void*)name ) goto exit; // mhm? maybe not exit?
if( _wcsicmp( derVS, exe ) ) goto exit;
EnumChildWindows( hwnd, wenum, (LPARAM)hProcess );
exit:
CloseHandle(hProcess);
int res = GetLastError();
return res;
}
int wmain(int argc, wchar_t * argv[])
{
if( argc >= 2 )
{
wchar_t *end = 0;
long l = wcstol( argv[1], &end, 16 );
clr = (DWORD)l;
}
::EnumWindows(EnumTops, NULL);
return 0;
}
并非通过 Visual Studio 本身的配置进行。
不过您可以从 Win32 API 中“黑客”窗口对象(查找“窗口枚举”)。一旦您拥有窗口句柄,就可以设置所需的所有特性。
祝好
/Robert