You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.9 KiB
159 lines
4.9 KiB
#if NETFX || NETCORE
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Apewer.Surface
|
|
{
|
|
|
|
/// <summary>基本窗体。</summary>
|
|
public class BaseForm : Form
|
|
{
|
|
|
|
#region this & base
|
|
|
|
private IContainer _components = null;
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.SuspendLayout();
|
|
|
|
this.AutoScaleMode = AutoScaleMode.None;
|
|
this.BackColor = FormsUtility.White;
|
|
this.Font = FormsUtility.DefaultFont;
|
|
this.ClientSize = new Size(600, 400);
|
|
this.FormBorderStyle = FormBorderStyle.None;
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
this.KeyPreview = true;
|
|
|
|
this.ResumeLayout(false);
|
|
}
|
|
|
|
/// <summary>构造函数。</summary>
|
|
public BaseForm()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region override
|
|
|
|
private bool _resizeable = true;
|
|
|
|
/// <summary>是否能够调整窗体大小。</summary>
|
|
public bool Resizeable
|
|
{
|
|
get { return _resizeable; }
|
|
set { _resizeable = value; }
|
|
}
|
|
|
|
/// <summary>释放资源。</summary>
|
|
/// <param name="disposing">释放非托对象。</param>
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && (_components != null)) _components.Dispose();
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
///// <summary>允许点击任务栏最小化。</summary>
|
|
//protected override CreateParams CreateParams
|
|
//{
|
|
// get
|
|
// {
|
|
// const int WS_MINIMIZEBOX = 0x00020000; // winuser.h
|
|
// CreateParams cp = base.CreateParams;
|
|
// cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作
|
|
// return cp;
|
|
// }
|
|
//}
|
|
|
|
/// <summary>允许调节窗口大小。</summary>
|
|
protected override void WndProc(ref Message m)
|
|
{
|
|
const int htleft = 10;
|
|
const int htright = 11;
|
|
const int httop = 12;
|
|
const int httopleft = 13;
|
|
const int httopright = 14;
|
|
const int htbottom = 15;
|
|
const int htbottomleft = 0x10;
|
|
const int htbottomright = 17;
|
|
|
|
switch (m.Msg)
|
|
{
|
|
case 0x0084:
|
|
base.WndProc(ref m);
|
|
if (Resizeable)
|
|
{
|
|
Point vPoint = new Point((int)m.LParam & 0xFFFF,
|
|
(int)m.LParam >> 16 & 0xFFFF);
|
|
vPoint = PointToClient(vPoint);
|
|
if (vPoint.X <= 5)
|
|
if (vPoint.Y <= 5)
|
|
m.Result = (IntPtr)httopleft;
|
|
else if (vPoint.Y >= ClientSize.Height - 5)
|
|
m.Result = (IntPtr)htbottomleft;
|
|
else m.Result = (IntPtr)htleft;
|
|
else if (vPoint.X >= ClientSize.Width - 5)
|
|
if (vPoint.Y <= 5)
|
|
m.Result = (IntPtr)httopright;
|
|
else if (vPoint.Y >= ClientSize.Height - 5)
|
|
m.Result = (IntPtr)htbottomright;
|
|
else m.Result = (IntPtr)htright;
|
|
else if (vPoint.Y <= 5)
|
|
m.Result = (IntPtr)httop;
|
|
else if (vPoint.Y >= ClientSize.Height - 5)
|
|
m.Result = (IntPtr)htbottom;
|
|
}
|
|
break;
|
|
case 0x0201: // 左键
|
|
m.Msg = 0x00A1; // 更改消息为非客户区按下鼠标
|
|
m.LParam = IntPtr.Zero; // 默认值
|
|
m.WParam = new IntPtr(2); // 鼠标放在标题栏内
|
|
base.WndProc(ref m);
|
|
break;
|
|
default:
|
|
base.WndProc(ref m);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public accessor
|
|
|
|
#endregion
|
|
|
|
#region protected derivation
|
|
|
|
/// <summary>界面线程调用器。</summary>
|
|
protected delegate void Invoker();
|
|
|
|
/// <summary>优化性能:开启双缓冲。</summary>
|
|
protected void Optimize()
|
|
{
|
|
// SetStyle(ControlStyles.ResizeRedraw, value);
|
|
// SetStyle(ControlStyles.Selectable, true);
|
|
|
|
SetStyle(ControlStyles.UserPaint, true);
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
|
SetStyle(ControlStyles.DoubleBuffer, true);
|
|
|
|
// SetStyle(ControlStyles.Opaque, true);
|
|
|
|
UpdateStyles();
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|