yamamoWorks

.NET技術を中心に気まぐれに更新していきます

IEツールバーの背景にXPスタイルを適応する方法

IEツールバーを.NETで開発するには BandObject がよく使われているようです。 はてなブックマークMenuBar
も BandObject を利用しています。

BandObject は簡単にIEツールバーが作れるのですが、Windows
XPでスタイルを有効にしている場合に背景部分の色がクラシックのままになり、ちょっと違和感があります。 (よ~く見ないとわからない?)


これは Windows XP
のスタイルを制御している「uxtheme.dll」の「DrawThemeParentBackground」関数を
BandObject.OnPaintBackground() で叩いてやる事で解決できます。



[DllImport("uxtheme.dll", ExactSpelling = true)]
private static extern UInt32 DrawThemeParentBackground(IntPtr hwnd, IntPtr hdc, ref RECT prc);

public static int DrawThemeParentBackground(IntPtr hWnd, Graphics g, Rectangle rect)
{
RECT r = new RECT(rect);
IntPtr hDc = g.GetHdc();
int ret = (int) DrawThemeParentBackground(hWnd, hDc, ref r);
g.ReleaseHdc(hDc);
return ret;
}

protected override void OnPaintBackground(PaintEventArgs pevent)
{
DrawThemeParentBackground(this.Handle, pevent.Graphics, pevent.ClipRectangle);
}

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public Int32 Left;
public Int32 Top;
public Int32 Right;
public Int32 Bottom;

public RECT(Rectangle rc)
{
Left = rc.Left;
Top = rc.Top;
Right = rc.Left + rc.Width;
Bottom = rc.Top + rc.Height;
}
}


これで自作ツールバー背景色にスタイルが適応されたようになります。