SplitContainer扩展可以关闭左边
2011-01-22 20:55
281 查看
public class SplitContainerEx : SplitContainer
{
const int _SplitWide = 19;
const int _SplitHeight = _SplitWide * 3;
bool m_IsCollpase = false;
Rectangle rect = new Rectangle();
bool m_IsInRect = false;
int m_SplitLocate;
Bitmap m_bmp=null, m_bmpbck;
private bool IsInRect
{
get
{
return m_IsInRect;
}
set
{
if (value)
{//MoveEnter
this.Cursor = Cursors.Hand;
//prj.Win32.User32.SetCapture(this.Handle);
Capture = true;
}
else
{//MoveOut
this.Cursor = Cursors.Default;
//User32.ReleaseCapture();
Capture = false;
}
m_IsInRect = value;
}
}
public bool IsCollpase
{
get { return m_IsCollpase; }
set {
if (value)
{
m_SplitLocate = this.SplitterDistance;
this.SplitterDistance = Panel1MinSize;
}
else
{
this.SplitterDistance = m_SplitLocate;
}
m_IsCollpase = value;
RotateBmp();
}
}
new public Orientation Orientation
{
get { return base.Orientation; }
set
{
base.Orientation = value;
RotateBmp();
}
}
public SplitContainerEx()
{
this.SplitterWidth = 9;
this.Panel1MinSize = 0;
m_bmpbck = CreateCollapseImage();
RotateBmp();
}
protected override void Dispose(bool disposing)
{
if (m_bmp != null)
m_bmp.Dispose();
base.Dispose(disposing);
}
private void RotateBmp()
{
if (m_bmp != null)
m_bmp.Dispose();
m_bmp = (Bitmap)m_bmpbck.Clone();
if (this.Orientation == System.Windows.Forms.Orientation.Horizontal)
m_bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
if (m_IsCollpase)
m_bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
private void GetSplitBmpRect()
{
if (this.Orientation == Orientation.Vertical)
{
rect.X = this.SplitterDistance;
rect.Y = this.Height <= _SplitHeight ? 0 : (this.Height - _SplitHeight) / 2;
rect.Width = this.SplitterWidth;
rect.Height = this.SplitterWidth*3;
}
else
{
rect.X = this.Width <= _SplitHeight ? 0 : (this.Width - _SplitHeight) / 2;
rect.Y = this.SplitterDistance;
rect.Width = this.SplitterWidth*3;
rect.Height = this.SplitterWidth;
}
}
protected override void OnPaint(PaintEventArgs e)
{
GetSplitBmpRect();
e.Graphics.SetClip(rect);
e.Graphics.Clear(this.BackColor);
//绘制
GraphicsUnit unit = GraphicsUnit.Pixel;
e.Graphics.DrawImage(m_bmp, rect, m_bmp.GetBounds(ref unit), GraphicsUnit.Pixel);
base.OnPaint(e);
}
private bool MouseInRectBound(Point p)
{
if (rect.Contains(p))
{
if (!m_IsInRect)
IsInRect = true;
}
else if (m_IsInRect)
IsInRect = false;
return false;
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (!rect.Contains(e.Location))
base.OnMouseDown(e);//把事件吃掉
}
protected override void OnMouseMove(MouseEventArgs e)
{
MouseInRectBound(e.Location);
base.OnMouseMove(e);
}
protected override void OnMouseClick(MouseEventArgs e)
{
if (rect.Contains(e.Location))
{
IsCollpase = !m_IsCollpase;
IsInRect = false;
return;
}
base.OnMouseClick(e);
}
private Bitmap CreateCollapseImage()
{
Bitmap bmp = new Bitmap(_SplitWide, _SplitHeight);
for (int i = 0; i < _SplitHeight - 5; i += 5)
{
for (int j = 0; j < _SplitWide - 3; j += 3)
{
bmp.SetPixel(j,i, Color.Black);
}
}
int p = (_SplitHeight - _SplitWide) / 2, q = p + _SplitWide;
using (Graphics dc = Graphics.FromImage(bmp))
{
Point point1 = new Point(0, p + _SplitWide / 2);
Point point2 = new Point(_SplitWide - 1, p);
Point point3 = new Point(_SplitWide - 1, q);
Point[] curvePoints = { point1, point2, point3 };
// Define fill mode.
System.Drawing.Drawing2D.FillMode newFillMode = System.Drawing.Drawing2D.FillMode.Winding;
dc.FillPolygon(Brushes.Black, curvePoints, newFillMode);
}
return bmp;
}
}
{
const int _SplitWide = 19;
const int _SplitHeight = _SplitWide * 3;
bool m_IsCollpase = false;
Rectangle rect = new Rectangle();
bool m_IsInRect = false;
int m_SplitLocate;
Bitmap m_bmp=null, m_bmpbck;
private bool IsInRect
{
get
{
return m_IsInRect;
}
set
{
if (value)
{//MoveEnter
this.Cursor = Cursors.Hand;
//prj.Win32.User32.SetCapture(this.Handle);
Capture = true;
}
else
{//MoveOut
this.Cursor = Cursors.Default;
//User32.ReleaseCapture();
Capture = false;
}
m_IsInRect = value;
}
}
public bool IsCollpase
{
get { return m_IsCollpase; }
set {
if (value)
{
m_SplitLocate = this.SplitterDistance;
this.SplitterDistance = Panel1MinSize;
}
else
{
this.SplitterDistance = m_SplitLocate;
}
m_IsCollpase = value;
RotateBmp();
}
}
new public Orientation Orientation
{
get { return base.Orientation; }
set
{
base.Orientation = value;
RotateBmp();
}
}
public SplitContainerEx()
{
this.SplitterWidth = 9;
this.Panel1MinSize = 0;
m_bmpbck = CreateCollapseImage();
RotateBmp();
}
protected override void Dispose(bool disposing)
{
if (m_bmp != null)
m_bmp.Dispose();
base.Dispose(disposing);
}
private void RotateBmp()
{
if (m_bmp != null)
m_bmp.Dispose();
m_bmp = (Bitmap)m_bmpbck.Clone();
if (this.Orientation == System.Windows.Forms.Orientation.Horizontal)
m_bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
if (m_IsCollpase)
m_bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
private void GetSplitBmpRect()
{
if (this.Orientation == Orientation.Vertical)
{
rect.X = this.SplitterDistance;
rect.Y = this.Height <= _SplitHeight ? 0 : (this.Height - _SplitHeight) / 2;
rect.Width = this.SplitterWidth;
rect.Height = this.SplitterWidth*3;
}
else
{
rect.X = this.Width <= _SplitHeight ? 0 : (this.Width - _SplitHeight) / 2;
rect.Y = this.SplitterDistance;
rect.Width = this.SplitterWidth*3;
rect.Height = this.SplitterWidth;
}
}
protected override void OnPaint(PaintEventArgs e)
{
GetSplitBmpRect();
e.Graphics.SetClip(rect);
e.Graphics.Clear(this.BackColor);
//绘制
GraphicsUnit unit = GraphicsUnit.Pixel;
e.Graphics.DrawImage(m_bmp, rect, m_bmp.GetBounds(ref unit), GraphicsUnit.Pixel);
base.OnPaint(e);
}
private bool MouseInRectBound(Point p)
{
if (rect.Contains(p))
{
if (!m_IsInRect)
IsInRect = true;
}
else if (m_IsInRect)
IsInRect = false;
return false;
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (!rect.Contains(e.Location))
base.OnMouseDown(e);//把事件吃掉
}
protected override void OnMouseMove(MouseEventArgs e)
{
MouseInRectBound(e.Location);
base.OnMouseMove(e);
}
protected override void OnMouseClick(MouseEventArgs e)
{
if (rect.Contains(e.Location))
{
IsCollpase = !m_IsCollpase;
IsInRect = false;
return;
}
base.OnMouseClick(e);
}
private Bitmap CreateCollapseImage()
{
Bitmap bmp = new Bitmap(_SplitWide, _SplitHeight);
for (int i = 0; i < _SplitHeight - 5; i += 5)
{
for (int j = 0; j < _SplitWide - 3; j += 3)
{
bmp.SetPixel(j,i, Color.Black);
}
}
int p = (_SplitHeight - _SplitWide) / 2, q = p + _SplitWide;
using (Graphics dc = Graphics.FromImage(bmp))
{
Point point1 = new Point(0, p + _SplitWide / 2);
Point point2 = new Point(_SplitWide - 1, p);
Point point3 = new Point(_SplitWide - 1, q);
Point[] curvePoints = { point1, point2, point3 };
// Define fill mode.
System.Drawing.Drawing2D.FillMode newFillMode = System.Drawing.Drawing2D.FillMode.Winding;
dc.FillPolygon(Brushes.Black, curvePoints, newFillMode);
}
return bmp;
}
}
相关文章推荐
- 使用dojo中的dijit的组件中TabContainer制作可以关闭的tab
- 创建悬浮对话框和触摸任何位置都可以关闭的对话框
- vs2010 用 vax的话 可以关闭 IntelliSecen 提高运行速度
- android,viewpage实现应用程序员宝典;扩展包不管什么android版本都可以用;第一次安装使用从封面到提示帮助界面
- (转)扩展EXT时间控件,可以选择到时分秒
- firefox的plugin-container.exe进程如何关闭?
- 短信平台(提供数据接口,可以与任何软件扩展)
- 就是左边是一个FRAME,右边也是一个FRAME,两个之间有分隔线,在分隔线上可以设一个小图标,一点击左边的FRAME就缩进去了,整个屏幕都显示右边的那个FRAME
- cas用httpclient登录,并获取ticket,可以很方便扩展,如果要ajax登录可以基于这个接口,在resp种植castgc的cookie到浏览器
- 具有双击或者右击关闭标签页功能的chrome扩展程序汇总
- SplitContainer.SplitterDistance属性值设置应注意的与FixedPanel有关
- PAE(物理地址扩展)开启与关闭的方法(32位系统支持4G以上内存)
- WinForm 选项卡在左边(虽然可以直接设置但是文字错误方向,也许是VS2010的BUG)
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。
- 跟着教程学习MP3播放器编写,遇到奇怪事,扩展名为MP3、jpg、gif的都可以下载,唯独lrc的下载总失败,终于找到原因!
- toggle一个div,显示与隐藏,可以扩展成自定义下拉框
- NoAds 2006.07.28(可以自动关闭网页浏览时弹出的广告小视窗)zkacb汉化版
- 左边select内容选择到右边select内容里面的js实现方法(可以多选和全选)
- hdu 3068 最长回文 (Manacher O(n) ) (扩展KMP和后缀数组也都可以做 O(nlogn))
- 对jbpm提供了扩展,大家可以直接用我的包,轻松的取出各种列表,待办,已办,办结,待签,已签