zoukankan      html  css  js  c++  java
  • 一个简单的c#滚动AboutBox控制

    介绍 我想有一个滚动的盒子在我的项目可以显示文本,图像,并自动滚动学分对话框。这是一个额外的特性我宁愿增加完成我的一些应用程序。花很多时间在互联网上搜索之后,我找到了一些文章和例子代码,特别是在这个网站,我印象深刻的是,以下文章: CCreditsCtrl——一个先进的盒子。 CScrollCtrl: autoscrolling文本控制。 以上都是做得很好,但是他们不是我想要的是什么。这些项目是在Visual c++ 6.0开发或Visual c++ 7.1 (. net),但使用MFC,因为我不能建立一个c#控制基于他们的模块。我不得不改变他们适合我的工作。 背景 正如前面说的,这些示例程序使用MFC编程方便。函数CreateCompatibleDC, CreateCompatibleBitmap SelectObject等。在MFC常见的图像处理方法和操作的设备上下文窗口。但是,我现在工作在. net框架中,使用VB。净或c#,所以上面的程序不能帮助我了。 我开始在网上搜索,看在MSDN,知道有一个解决方案在c#中使用旧的Win32 API图形函数光滑的画。这个想法是为了让c#知道你将使用一些从非托管DLL函数,使用DllImport属性。DllImport的详细文档可以在。net中找到文档。我是一个新手在c#中,所以这对我来说太难了尝试解决这个问题。 幸运的是,我们可以达到同样的目标图像的系统。画在。net命名空间。图像呈现在。net MFC相比,简单而高效得多。有两个函数图形类呈现你的图像对象在屏幕上,这些都是DrawImage DrawImageUnscaled。所以,我们会做我们的屏幕绘图对象在一个图像。之后,我们可以使用这些函数来渲染这个对象直接直流和平滑的动画效果。 在我的代码,我会试着画中的所有显示对象OnPaint()事件的控制:隐藏,复制Code

    private void ctlScrollAbout_Paint(object sender, 
                 System.Windows.Forms.PaintEventArgs e)
    {
        using (System.Drawing.Graphics objGraphics = e.Graphics)
        {
            // draw off-screen m_TempDrawing bitmap on control screen
            objGraphics.DrawImage(m_TempDrawing, m_XMargin, m_YMargin, 
                        m_TempDrawing.Width, m_TempDrawing.Height);
        }
    }

    这并不奇怪,如果你想知道当屏幕。通常,我们称之为DrawImage前绘制函数。在这种情况下,我们的控制是一个自动滚动aboutbox,所以我们必须有一个计时器操作滚动的速度。可以画出屏幕计时器tick事件和调用OnPaint手动()函数。看看这个:隐藏,复制Code

    // timer tick event
    private void tmeScrolling_Tick(object sender, System.EventArgs e)
    {
        BuildScrollingBitMap();  // build offline screen
        this.Invalidate();        // call to OnPaint() event
    }

    下次会议将描述如何滚动AboutBox管理它的显示对象。有两种显示对象的控制:一个文本对象和一个图像对象。可以使用的一种常见方法,所有这些对象在一个列表。net支持一些基础对象集合如ArrayList,哈希表、队列、栈,SortedList等,可以轻松使用。但是,我们希望我们自己的特定显示对象列表,所以我们应该继承从可用的一个新类。我们有clsDisplayList管理显示对象,如下所示:隐藏,复制Code

    // inherits a new custom list object from CollectionBase class 
    public class clsDisplayList : System.Collections.CollectionBase
    {
        // add new display object to list
        public int Add(clsDisplayObject value)
        {
            return List.Add(value);
        }
    
        // provide array-index access to display object list
        public clsDisplayObject this[int index]
        {
            get
            {
                return (clsDisplayObject)List[index];
            }
            set
            {
                List[index] = value;
            }
        }
    }

    显示对象,它是安装一个类拥有所有必要的成员变量和相应的属性。滚动AboutBox将使用这些属性来绘制在屏幕上正确显示对象:隐藏,收缩,复制Code

    // a instance of the display object 
    public class clsDisplayObject
    {
        // for text object
        private string _displayText = "";
        // for text object
        private System.Drawing.Font _objFont;
        // for text object
        private System.Drawing.FontStyle _fontStyle = 
                               System.Drawing.FontStyle.Bold;
        // for text object
        private string _fontName = "Tahoma";
        // for text object
        private int _fontSize = 10;
        // for text object
        private System.Drawing.Brush _textColor = 
                System.Drawing.Brushes.White;
    
        // determine if current display object is bitmap or text
        private bool _isBitMap = false;
        // the height of display object
        private int _displayHeight = 0;
        // offset in vertical of display object
        private int _displayYOffset = 0;
    
        // bitmap display object
        private System.Drawing.Bitmap  _bitmap;
        private int _bitmapHeight = 100;
        private int _bitmapWidth = 100;
    
        .....
    }

    在控件的类,我们声明的实例clsDisplayList()和提供一些方法来添加一个新的显示对象:隐藏,收缩,复制Code

    public class ctlScrollAbout : System.Windows.Forms.UserControl
    {
        ....
        // display object list
        private clsDisplayList m_DisplayObject = new clsDisplayList();
        ...
    
        /// <summary>
        /// Add a text display object.
        /// </summary>
        public void AddDisplayText(string text, string fontName, ?
               int fontSize, System.Drawing.FontStyle fontStyle, 
               System.Drawing.Brush textColor)
        {
            m_DisplayObject.Add(new clsDisplayObject(text, fontName, 
                                    fontSize, fontStyle, textColor));
            BuildScrollingBitMap();
        }
    
        /// <summary> 
        /// Add a bitmap display object.
        /// </summary>
        public void AddDisplayBitmap(string fileName, 
                                     int bmpHeight, int bmpWidth)
        {
            m_DisplayObject.Add(new clsDisplayObject(fileName, 
                                    bmpHeight, bmpWidth));
            BuildScrollingBitMap();
        }
    }

    现在一切都很清楚你可以整合他们自己的控制。一步一步的引导创建一个c#控制,您可以参考文章:简单介绍编写你的第一个。net控制。 使用的代码 在应用程序中使用上面的控制是非常简单的。下载控制源代码和构建它做一个c#控制。这将是一个DLL文件的编译输出目录;在我的例子中,它是。 bin ScrollerAbout.dll调试。 DLL文件之后,您将创建一个新的Windows应用程序项目。在设计窗口中,请打开工具箱选项卡,右键单击并选择添加/删除项目。然后浏览到我们的DLL文件,选中它并单击OK。有一个滚动aboutbox控制在你的工具箱。 现在你可以拖动任何形式的控制您的. net应用程序并开始使用它。下面的代码显示了如何初始化并将参数传递给控制当表单加载:隐藏,收缩,复制Code

    ' VB.Net example code
    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        ctrAbout.LineSpacing = 20
        ctrAbout.XMargin = 20
        ctrAbout.YMargin = 20
        ctrAbout.ScrollingStep = 1
        ctrAbout.ScrollingTime = 100
    
        ctrAbout.AddDisplayText("Scrolling AboutBox", "Arial Black", _
           15, System.Drawing.FontStyle.Bold, System.Drawing.Brushes.White)
        ctrAbout.AddDisplayText("Developed by", "Arial Black", 10, _
           System.Drawing.FontStyle.Italic, System.Drawing.Brushes.Olive)
        ctrAbout.AddDisplayText("Man_Man2612", "Arial Black", 10, _
          System.Drawing.FontStyle.Strikeout, System.Drawing.Brushes.Violet)
    
        ctrAbout.AddDisplayBitmap("images	est.gif", 115, 115)
        ctrAbout.AddDisplayBitmap("imagespic0.BMP", 100, 100)
        ctrAbout.StartScrolling()
    End Sub
    
    
    // C# example code
    private void Form1_Load(object sender, System.EventArgs e)
    {
        ctrAbout.LineSpacing = 20;
        ctrAbout.XMargin = 20;
        ctrAbout.YMargin = 20;
        ctrAbout.ScrollingStep = 1;
        ctrAbout.ScrollingTime = 500;
    
        ctrAbout.AddDisplayText("Scrolling AboutBox", "Arial Black", _
          15, System.Drawing.FontStyle.Bold, System.Drawing.Brushes.White); 
        ctrAbout.AddDisplayText("Developed by", "Arial Black", 10, _
          System.Drawing.FontStyle.Italic, System.Drawing.Brushes.Olive);
        ctrAbout.AddDisplayText("Man_Man2612", "Arial Black", 10, _
          System.Drawing.FontStyle.Strikeout, System.Drawing.Brushes.Violet);
    
        ctrAbout.AddDisplayBitmap(@"images	est.gif",115,115); 
        ctrAbout.AddDisplayBitmap(@"imagespic0.BMP",320,240); 
             ctrAbout.StartScrolling()
    }

    总结 我们现在知道如何创建一个定制的用户控制在。net框架为特定的目的。我们也看到,一个新的继承的类,用于管理自己的对象集合是非常简单的。这个滚动AboutBox有一些高级功能,我想改善例如文本包装,超链接对象,动画形象等。但由于我消的时候,我刚刚创建的这篇文章,希望这种开放源代码的人可以帮我做一个新的有用的滚动AboutBox版本。 历史 2004年10月25日,1.0版。 文章提交。 2006年1月20日 丹•Morphis更新。 本文转载于:http://www.diyabc.com/frontweb/news8412.html

  • 相关阅读:
    第04组 Beta冲刺 (3/5)
    第04组 Beta冲刺 (2/5)
    第04组 Beta冲刺 (1/5)
    软工实践个人总结
    第09组 每周小结(3/3)
    第09组 每周小结(2/3)
    第09组 每周小结(1/3)
    第09组 Beta冲刺 总结
    第09组 Beta冲刺 (5/5)
    第09组 Beta冲刺 (4/5)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467888.html
Copyright © 2011-2022 走看看