JAN
5

Visual Studioのコントロールの配色は、vsThemeColors 列挙体 (EnvDTE80)DTE2.GetThemeColor メソッド (EnvDTE80)の二つを使うことで、取得することが出来ます。これは前に述べた通りです。が、uint型で習得できた色を.NetのSystem.Drawing.Color構造体に直す部分で、daruyanagiさんからの紹介されたColorTranslatorクラスを使うことで楽することができました。

private Color convertFromVsThemeColor(vsThemeColors themeColor) {
    return ColorTranslator.FromWin32((int)_dte2.GetThemeColor(themeColor));
}

なんということでしょう。あれほど無駄の多かったメソッドがたった一行に!

//Before
private Color converVsThemeColor(vsThemeColors themeColor) {
	uint color = _dte2.GetThemeColor(themeColor);
	int a = (int)color / 0x1000000;
	int b = (int)(color - a * 0x1000000) / 0x10000;
	int g = (int)(color - a * 0x1000000 - b * 0x10000) / 0x100;
	int r = (int)(color - a * 0x1000000 - b * 0x10000 - g * 0x100);
	return Color.FromArgb(0xFF, r, g, b);
 }  

.NET FCL万歳。daruyanagiさんありがとうございました。