如何创建工具栏控件!

 

 

如上图,如何实现这样的工具 栏呢?
相信用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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值