以下是“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外观的应用程序。
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外观的应用程序。
如何把这个close按钮也去掉?
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());
}
} 看看
他们正在做一个.net封装win32 api的库!
叫MicroSoft.Windows.Win32
1.画一副背景色为黑色-或其它颜色
2.按上述朋友的方法隐藏title
3.把窗口的TransparencyKey设为黑色
4.结果黑色为透明色
你可以画个播放器处理一下透明色
绝对经典!!!!!!!
1.以前我用捕获消息(delphi)
2.自已加个timer时时计算new postion