如上图,如何实现这样的工具 栏呢?
相信用C# 去实现WM程序 的朋友,都接触过标准的ToolBar控件 。
标准控件的不足,这里就不说了。如何实现图中的效果 呢?
首先,你需要先解决 下面几个技术 问题:
1、PNG透明贴图。可以用IImagingFactory.cs类去实现,该类可以在很多透明控件例子 里面找到。
2、渐变色绘画。可以用GradientStyle.cs,这个类也不难找。
首先,添加一个240*50的UserControl,并绘制渐变的底色。
其次,就是创建小BUTTON控件类了。它有图标,选中时底图,点击时底图组成。
这部分很简单,还真没多少技术含量。下面摘录下主要的绘制过程:
private IImage imageIcon; //图标
private IImage imageBackActive; //点击时的图标
private IImage imageBack; //选中时的图标
private bool isSelected; // 是否选中
private bool isPressed; //是否点击
private Bitmap m_bmpMemoire;
private Graphics gxMemoire;
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (m_bmpMemoire == null)
{
m_bmpMemoire = new Bitmap(ClientSize.Width, ClientSize.Height);
}
gxMemoire = Graphics.FromImage(m_bmpMemoire);
IntPtr hdcDest = gxMemoire.GetHdc();
Rectangle dstRect = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);
if (isPressed)
{
if (imageBackActive != null)
imageBackActive.Draw(hdcDest, ref dstRect, IntPtr.Zero);
}
else if (isSelected)
{
if (imageBack != null)
imageBack.Draw(hdcDest, ref dstRect, IntPtr.Zero);
}
if (imageIcon != null)
{
ImageInfo iiconInfo = new ImageInfo();
imageIcon.GetImageInfo(out iiconInfo);
dstRect = new Rectangle((ClientSize.Width - (int)iiconInfo.Width) / 2, (ClientSize.Height - (int)iiconInfo.Height) / 2, (ClientSize.Width + (int)iiconInfo.Width) / 2, (ClientSize.Height + (int)iiconInfo.Height ) / 2);
imageIcon.Draw(hdcDest, ref dstRect, IntPtr.Zero);
}
gxMemoire.ReleaseHdc(hdcDest);
e.Graphics.DrawImage(m_bmpMemoire, 0, 0);
gxMemoire.Dispose();
base.OnPaint(e);
}