以下是“Hogwarts([微软]S(u)ddenly dis@ppeared...)“的思路,原始贴子我找不到了。
dotNet中可以实现自画标题栏的效果,思路是完全隐藏原来的标题栏,用客户区顶部的一个长条形Panel来模拟标题栏的外观和行为。这个做法中的一些具体功能的实现如下:
1)隐藏原来的标题栏:把Form的FormBorderStyle设成SizableToolWindow即可。
2)原来标题栏左侧的应用程序图标:在模拟标题栏的Panel里面左侧放一个PictureBox。响应这个PictureBox的Click和DoubleClick事件。当Click事件时,弹出一个ContextMenu来模拟原来的系统菜单。当DoubleClick事件时调用Form.Close()。
3)原来标题栏右侧的最大、最小以及关闭按钮:在Panel右侧放三个按钮控件,并设定其图片。响应这三个按钮的Click事件,在事件响应函数中通过设定Form.WindowState来实现窗口的最大、最小和恢复。
4)窗口的移动:在Panel中间放一个长条的PictureBox。响应这个PictureBox的MouseDown、MouseMove和MouseUp事件来模拟托拽窗口的行为。移动窗口可以调用Win32 API中的PostMessage函数。
5)窗口的Resize:由于Form的BorderStyle已经设为SizableToolWindow,因此窗口的Resize不需要额外编程。
通过这个方法,可以做到用dotNet写出具有MSN Explorer外观的应用程序。

解决方案 »

  1.   

    关于1)隐藏原来的标题栏:把Form的FormBorderStyle设成SizableToolWindow即可:设为SizableToolWindow后,窗体仍然有close按钮:)
    如何把这个close按钮也去掉?
      

  2.   

    把窗体的controlbox设成false, close按钮就没了啊:)
      

  3.   

    实在不行在paint 事件里面用GDI+写吧
      

  4.   

    using System; 
    using System.Drawing; 
    using System.Windows.Forms; 
    class EllipseClass:Form 

    private Rectangle ellipseBounds=new Rectangle(new Point(0,0),new Size(100,50)); 
    private Brush solidAzureBrush=Brushes.Yellow; 
    private Point m_pOffset=new Point(0,0); 
    public EllipseClass() 

    this.Text="不规则图形"; 
    this.StartPosition=FormStartPosition.CenterScreen; 
    this.BackColor=Color.Red; 
    this.FormBorderStyle=FormBorderStyle.None; 
    this.TransparencyKey = Color.Red; 

    protected override void OnPaint(PaintEventArgs e) 

    base.OnPaint(e); 
    Graphics dc=e.Graphics; 
    dc.FillEllipse(solidAzureBrush,ellipseBounds); 

    protected override void OnMouseDown(MouseEventArgs e) 

    base.OnMouseDown(e); 
    m_pOffset=new Point(e.X,e.Y); 
    //Console.WriteLine("Down X:{0} ,Y:{1}",m_pOffset.X,m_pOffset.Y); 

    protected override void OnMouseMove(MouseEventArgs e) 

    base.OnMouseMove(e); 
    if(e.Button == MouseButtons.Left) 

    Point mousePos = Control.MousePosition; 
    //Console.WriteLine("Move X:{0} ,Y:{1}",mousePos.X,mousePos.Y); 
    this.Location =new Point( mousePos.X-m_pOffset.X,mousePos.Y-m_pOffset.Y); 
    //Console.WriteLine("Location X:{0} ,Y:{1}",this.Location.X,this.Location.Y); 

    } public static void Main() 

    Application.Run(new EllipseClass()); 

    } 看看
      

  5.   

    那把标题栏去了,程序图标被pictureBox代替,那在工具栏内停靠的标题按钮上的程序图标怎么实现呢?
      

  6.   

    请问有谁知道哪儿有介绍c# api 的电子书籍,请告知!
      

  7.   

    呵呵!以前和微软合作!
    他们正在做一个.net封装win32 api的库!
    叫MicroSoft.Windows.Win32
      

  8.   

    怎样让panel和窗体一起变大啊??
      

  9.   

    有必要这么麻烦嘛?
    1.画一副背景色为黑色-或其它颜色
    2.按上述朋友的方法隐藏title
    3.把窗口的TransparencyKey设为黑色
    4.结果黑色为透明色
    你可以画个播放器处理一下透明色
    绝对经典!!!!!!!
      

  10.   

    移窗口的话
    1.以前我用捕获消息(delphi)
    2.自已加个timer时时计算new postion