锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 英语翻译 / .NET透明用户界面
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
技术分类
讨论组翻译
制作透明界面不同的方法
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。需要全文内容也请联系孙老师。

.NET透明用户界面

Introduction 介绍

I have been trying for 2 weeks to find a code that can help me make a customized and really transparent user interface for my projects, but I did not find anything. Thus, I began programming in VS 2008. Here are my experiences to find a solution to make this happen!

我花了两周时间一直在找可以帮我为我的项目做一个定制的、真正透明的用户界面的代码。但我什么也没找到。因此,我开始在VS 2008里设计程序。以下是我的经验,我找到一个解决方案来实现这一点!

Background 背景

When you want to write a program with deceptive graphical user interface, you need some tools. One of its important tools is Graphical Form with pictorial Background.The second is Transparent components like Button and Labels.

See the instruction below!!!!

当你想要编写一个虚拟的图形用户界面程序,你需要一些工具。重要的工具之一是有图像背景的图形窗体。第二个是透明的组件(比如按钮和标签)。

请参阅下面的命令! ! ! !

Using the Code 使用的代码

You can use this to define a graphical form with pictorial background.

您可以使用它来定义一个有图像背景的图形化窗体。

 public interface IControlBackground{
 Bitmap BackgroundImage { get; }
}
//
public class GForm : Form, IControlBackground
{
Bitmap background;
protected override void OnPaint(PaintEventArgs e)
{
if (background != null)
e.Graphics.DrawImage(background, 0, 0);
else
base.OnPaint(e);
}
public Bitmap BackgroundImage
{
get
{
return background;
}
set
{ background = value;
}
}
}

IControlBackground uses as an interface between form and other components. which you can used in OnPaintBackground Event of these.

把IControlBackground作为接口,沟通窗体和和其他组件。你可以在这些OnPaintBackground事件中使用。

Now you can define other components such as Button and Label! 现在,您可以定义其他组件,如按钮和标签!

Here is the code!!! 这是代码! ! !

     public class ImageButton : System.Windows.Forms.Control
          {
          /********************************************************
          * Constants
          *******************************************************/
  
          /********************************************************
          * Member Variables
          *******************************************************/
          protected ButtonState state;
          protected Image image;
          protected Image disabledImage;
          protected Image overImage;
          protected Image pressedImage;
          protected DialogResult dialogResult;
          protected bool isDefault;
          protected Point textOffset = new Point(2,2);
          public    Control BackControl;
          #if !DESKTOP
          protected Font font;
        #endif
        /**************************************************************
          * Designer Variables
          *************************************************************/
          /// <summary> 
          /// Required designer variable.
          /// </summary>
          private System.ComponentModel.Container components = null;    
           /********************************************************
          * Constructor
          *******************************************************/
          public ImageButton()
          {
          // This call is required by the Windows.Forms Form Designer.
          InitializeComponent();
          #if DESKTOP
          ResizeRedraw = true;
          #endif
          #if !DESKTOP
          font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular);
          #endif
          }    
           /// <summary> 
         /// Clean up any resources being used.
          /// </summary>
          protected override void Dispose( bool disposing )
          {
          if( disposing )
          {
          if(components != null)
          {
          components.Dispose();
          }
          }
          base.Dispose( disposing );
          }      
           #region Component Designer generated code
          /// <summary> 
          /// Required method for Designer support - do not modify 
          /// the contents of this method with the code editor.
          /// </summary>
          private void InitializeComponent()
          {
          components = new System.ComponentModel.Container();
          // 
          // ImageButton
          // 
          #if DESKTOP
          this.Name = "ImageButton";
          #endif
          this.Size = new System.Drawing.Size(32, 32);
          }
          #endregion    
           /********************************************************
          * Methods
          *******************************************************/
          private bool InClient(int x, int y)
          {
          return ((x >= 0) && (x < ClientRectangle.Width) && 
          (y >= 0) && (y < ClientRectangle.Height));
          }
          /********************************************************
          * Properties
          *******************************************************/
          #if !DESKTOP
          new public Font Font
          {
          get
          {
          return font;
          }
          set
          {
          if (value == null) throw new ArgumentException();
          font = value;
          }
          }
          #endif      
           public Image Image
          {
          get
          {
          return image;
          }
          set
          {
          if (image == value) return;
          image = value;
          if (state == ButtonState.Normal) Invalidate();
          }
          }
        
         public Image DisabledImage
          {
          get
          {
          return disabledImage;
               }
          set
          {
          if (disabledImage == value) return;
          disabledImage = value;
          if (state == ButtonState.Disabled) Invalidate();
          }
          }      
           public Image OverImage
          {
          get
          {
          return overImage;
         }
          set
          {
          if (overImage == value) return;
          overImage = value;
          if (state == ButtonState.Over) Invalidate();
          }
          }    
           public Image PressedImage
          {
          get
          {
          return pressedImage;
          }
          set
          {
          if (pressedImage == value) return;
          pressedImage = value;
          if (state == ButtonState.Pressed) Invalidate();
          }
          }
          #if DESKTOP
          [Browsable(true)]
          #endif
          [DefaultValue(null)]
          public override string Text
          {
          get
          {
          return base.Text;
          }
          set
          {
          base.Text = value;
          }
          } 
         public Point TextOffset
          {
          get
          {
          return textOffset;
         }
          set
          {
          textOffset = value;
          }
          }
         public ButtonState ButtonState
          {
          get
          {
          return state;
          }
          }
         /********************************************************
          * Overrides
          *******************************************************/
          #if DESKTOP
          protected override void OnMouseEnter(EventArgs e)
          {
          state = ButtonState.Over;
          Invalidate();
          base.OnMouseEnter(e);
         }
         protected override void OnMouseLeave(EventArgs e)
          {
          state = ButtonState.Normal;
          Invalidate();
          base.OnMouseLeave(e);
          }
          #endif
           protected override void OnMouseDown(MouseEventArgs e) 
          {
          Capture = true; // Track
          state = ButtonState.Pressed;
          Invalidate();
          base.OnMouseDown(e);
          }     
           protected override void OnMouseUp(MouseEventArgs e) 
          {
          Capture = false; // Release
          if (state != ButtonState.Disabled)
          {
          // The Pocket PC doesn't have an OnMouseLeave,
          // so the only option other then pressed is over.
          #if DESKTOP
          state = (InClient(MousePosition.X, MousePosition.Y) 
          ? ButtonState.Over : ButtonState.Normal);
          #else
          state = ButtonState.Normal;
          #endif
          Invalidate();
          }
          base.OnMouseUp(e); // Base should only 'click' if mouse is in bounds...
          }  
           protected override void OnMouseMove(MouseEventArgs e)
          {
          Capture = false; // Release
          if (state != ButtonState.Disabled)
          {
          #if DESKTOP
          state = (InClient(MousePosition.X, MousePosition.Y) 
          ? ButtonState.Over : ButtonState.Normal);
          #else
          state = ButtonState.Over;
          #endif
         Invalidate();
         }
         base.OnMouseMove(e);
          }
          protected override void OnEnabledChanged( EventArgs e )
          {
          state = (Enabled ? ButtonState.Normal : ButtonState.Disabled);
          Invalidate();
          base.OnEnabledChanged(e);
          }    
           protected override void OnTextChanged(EventArgs e)
          {
          // Redraw
          Invalidate();
          // Base
          base.OnTextChanged(e);
          }
          protected bool HasBackground = false;    
           protected override void OnPaintBackground(PaintEventArgs e)
          {
          IControlBackground form = this.Parent as IControlBackground;
          if (form == null)
          {
          base.OnPaintBackground(e);
          return;
          }
          else
          {
          HasBackground = true;
          }
          if (form.BackgroundImage!=null)
          e.Graphics.DrawImage(form.BackgroundImage,0,0,Bounds,GraphicsUnit.Pixel);
          }
          //protected override 
          //
          protected override void OnPaint(PaintEventArgs e)
         {
          // Use default image
          doPaint(e.Graphics, state);
          // Create a solid brush using the foreground
          Brush TBrush = new SolidBrush(ForeColor);      
           // If text is valid, draw it
          if ((base.Text != null) && (base.Text.Length > 0))
          {
          // Get the width of the string
          SizeF tSize = e.Graphics.MeasureString(base.Text, Font);
          // Get the location to draw
          Point DrawPoint = new Point((int)
          ((ClientRectangle.Width - tSize.Width)/2),
          (int)((ClientRectangle.Height - tSize.Height)/2));    
           // Offset Text?
          if (state == ButtonState.Pressed)
          {
          DrawPoint.X += textOffset.X;
          DrawPoint.Y += textOffset.Y;
          }
        // Draw the text using the solid brush and the current font
         e.Graphics.DrawString(base.Text, Font, TBrush, 
          DrawPoint.X, DrawPoint.Y);     
           // Release the brush
          TBrush.Dispose();
          }
          }     
           internal Color GetTransparentColor(Bitmap bm)
          {
          return bm.GetPixel(0, 0);
          }    
           public void doPaint(Graphics gx,ButtonState bs)
          {
          ImageAttributes attrib = new ImageAttributes();
          Image im;
          im = this.Image;
          //
          if (bs == ButtonState.Pressed)
          im = this.PressedImage;
          else if (bs == ButtonState.Over)
          im = this.OverImage;
          //
         if (im != null)
          {
         Bitmap bm = new Bitmap(im);
          Color color = GetTransparentColor(bm);
          attrib.SetColorKey(color, color);
          //
          gx.DrawImage(bm, this.ClientRectangle, 0, 0, 
          this.ClientRectangle.Width, this.ClientRectangle.Height, 
          GraphicsUnit.Pixel, attrib);
          }
          else
        gx.Clear(BackColor);
          }  
           #region IButtonControl Interface Implementation
          public DialogResult DialogResult
          {
          get
          {
          return dialogResult;
          } 
           set
          {
          if(Enum.IsDefined(typeof(DialogResult), value)) 
          {
          dialogResult = value;
          }
          } 
          }
         public void NotifyDefault(bool value)
          {
          if(isDefault != value)
          {
          isDefault = value;
          }
          }     
           public void PerformClick()
          {
          if(Enabled)
          {
          OnClick(EventArgs.Empty);
          }
          }
          #endregion
         } 

IMPORTANT! 重要!

Pixel 0,0 in Button Back Image is the transparency color! For better image processing, if you use PhotoShop, select the background transparent color the same as your form background image!

THE CODE IS SIMPLE! YOU WILL FIND IT HELPFUL!

在按钮背景图片中像素0,0是透明的颜色!为了更好的图像处理,如果您使用PhotoShop,选择背景透明色相同的表单背景图片!

代码很简单!你会发现它很有用!

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内