2009-01-05 11:58追記:取り消し線をつけた部分は内容的に無駄がありました。直したエントリをあげていますので、ご参照ください。
ToolStripの色 – SharpLab.のエントリで愚痴っていた、「Visual Studio Add-InのToolStripの色をVisualStudioに合わせる方法が分からない」という問題が解決しました。探してみるとあるもので、vsThemeColors 列挙体 (EnvDTE80)とDTE2.GetThemeColor メソッド (EnvDTE80)の二つを使うことで、Visual Studioのコントロールの配色を取得することができます。DTE2.GetThemeColor メソッドにvsThemeColors 列挙体を渡してやることで、uint型の戻り値が得られます。但し、ARGBの並び方が違うのか、このuint型の値をColor構造体のFromArgbメソッドに渡しても正しい色は得られないようで、
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);
}
上のメソッドを作って、これに通しています。このメソッド内の変数aですが、アルファ値として0xFFを持っているものと思ったら何故か2が入っているという謎の挙動をみせたので、とりあえず無視して0xFFで決め打ちしています。
で、結果がこれ(左がAdd-In)。なんか微妙にまだ色合いが違うような気がしますが(さっきのメソッド内の計算が間違っている?)、まぁ統一感は出ているのではないでしょうか。
追記(2009-01-04 20:34):
daruyanagiさんのところでBitConverterを使うといいよというエントリが!早速直してみました。
private Color converVsThemeColor(vsThemeColors themeColor) {
uint color = _dte2.GetThemeColor(themeColor);
byte[] argb = System.BitConverter.GetBytes(color);
return Color.FromArgb(0xFF, argb[0], argb[1], argb[2]);
}
おぉ、手軽!これは便利ですね。シフト演算とか、自信がなかったので避けていたのですが、こんな逃げ道があったとは。
Related Entries
Trackbacks : 1
- Trackback URL for this entry
- http://blog.sharplab.net/computer/cprograming/1671/trackback/
Listed below are links to weblogs that reference this entry
- ピンバック from Visual Studio Add-InのToolStripの色、解決! - SharpLab. 09-01-05 11:53:42 JST
-
[...] Visual Studio Add-InのToolStripの色、解決(たぶん) [...]
あけましておめでとうございます