📄 designpane.cs
字号:
DoPaint();
if(OnMoveFinished!=null)
OnMoveFinished(this.mSelectedObjects);
}
}
}
}
#endregion
#region Control Overrides
protected override void OnMouseDown(MouseEventArgs e)
{
DesignPane_MouseDown(this,e);
}
#endregion
#region Public Functions
public void ClearSelections()
{
this.mSelectedObjects.Clear();
}
public void SelectObjects(ArrayList SelectedObjects)
{
this.mSelectedObjects.Clear();
if (SelectedObjects != null)
{
if (SelectedObjects.Count > 0)
{
foreach (ICustomPaint CurrentObject in SelectedObjects)
{
this.mSelectedObjects.Add(CurrentObject);
selectionRectangle = new TrackerRectangle(CurrentObject.GetRegion(),CurrentObject.HorizontalAlignment, CurrentObject.VerticalAlignment);
trackerImage = (Bitmap)drawingImage.Clone();
selectionRectangle.DrawSelectionTrackers((Bitmap)trackerImage);
PaintImage(trackerImage);
}
}
else
{
//selectedObject = null;
selectionRectangle = null;
PaintImage(drawingImage);
}
}
else
{
selectionRectangle = null;
PaintImage(drawingImage);
}
this.Invalidate();
}
public void SetSize(PageSettings settings)
{
this.Size = new System.Drawing.Size(settings.Bounds.Width, settings.Bounds.Height);
drawingImage = new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height);
}
public void SetObjects(ICustomPaint[] staticElements,ICustomPaint[] dynamicElements,PageSettings thePageSettings)
{
staticObjects = staticElements;
dynamicObjects = dynamicElements;
pageSettings = thePageSettings;
//this.Invalidate();
}
#endregion
#region Public Properties
public bool ShowGrid
{
get {return showGrid;}
set
{
showGrid = value;
CreateBackImage();
DoPaint();
}
}
public int GridSize
{
get {return gridSize;}
set
{
gridSize = value;
CreateBackImage();
DoPaint();
}
}
#endregion
#region Private Functions
private void CreateBackImage()
{
backImage = new Bitmap(gridSize,gridSize);
Graphics g = Graphics.FromImage(backImage);
g.FillRectangle(new SolidBrush(this.BackColor),0,0,gridSize,gridSize);
g.FillEllipse(gridBrush,0,0,2,2);
g.FillEllipse(gridBrush,0,gridSize,2,2);
g.FillEllipse(gridBrush,gridSize,0,2,2);
g.FillEllipse(gridBrush,gridSize,gridSize,2,2);
}
private void DesignPane_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
DoPaint();
}
private void DoPaint()
{
drawingImage.Dispose();
drawingImage = new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height);
Graphics g = Graphics.FromImage(drawingImage);
if (showGrid && gridSize!=0)
{
brushBg = new TextureBrush(backImage,WrapMode.Tile);
g.FillRectangle(brushBg, this.ClientRectangle);
}
else
{
brushBg = new SolidBrush(this.BackColor);
g.FillRectangle(brushBg, this.ClientRectangle);
}
PaintMargins(g);
PaintStaticObjects(g);
PaintDynamicObjects(g);
brushBg.Dispose();
g.Dispose();
PaintImage(drawingImage);
PaintSelection(g);
}
private void MoveSelection(ICustomPaint CurrentObject, int xOrigin,int yOrigin)
{
if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.None)
CurrentObject.X = xOrigin;
if (CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.None)
CurrentObject.Y = yOrigin;
if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.None || CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.None)
{
selectionRectangle = new TrackerRectangle(CurrentObject.GetRegion(), CurrentObject.HorizontalAlignment, CurrentObject.VerticalAlignment);
trackerImage.Dispose();
trackerImage = (Bitmap)drawingImage.Clone();
selectionRectangle.DrawSelectionTrackers((Bitmap)trackerImage);
PaintImage(trackerImage);
shouldRepaint = true;
}
}
private void PaintDynamicObjects(Graphics g)
{
if (dynamicObjects == null) return;
for (int i=0;i<dynamicObjects.Length;i++)
{
dynamicObjects[i].Paint(g);
}
}
private void PaintImage(Image i)
{
Graphics g = this.CreateGraphics();
g.DrawImage(i, this.ClientRectangle);
g.Dispose();
}
private void PaintMargins(Graphics g)
{
if (pageSettings != null)
{
Rectangle marginRectangle = new Rectangle(pageSettings.Margins.Left,pageSettings.Margins.Top,this.ClientRectangle.Width-pageSettings.Margins.Right-pageSettings.Margins.Left,this.ClientRectangle.Height-pageSettings.Margins.Bottom-pageSettings.Margins.Top);
g.DrawRectangle(new Pen(Color.LightGray,1),marginRectangle);
g.DrawString("margins (not printable)",new Font("Tahoma",8),new SolidBrush(Color.Silver),marginRectangle.X+1,marginRectangle.Y);
}
}
private void PaintSelection(Graphics g)
{
if (selectionRectangle == null) return;
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
selectionRectangle = new TrackerRectangle(CurrentObject.GetRegion(), CurrentObject.HorizontalAlignment, CurrentObject.VerticalAlignment);
trackerImage.Dispose();
trackerImage = new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height);
selectionRectangle.DrawSelectionTrackers((Bitmap)trackerImage);
PaintImage(trackerImage);
}
}
private void PaintStaticObjects(Graphics g)
{
if (staticObjects == null) return;
for (int i=0;i<staticObjects.Length;i++)
{
staticObjects[i].Paint(g);
}
}
#endregion
#region Private Properties
private ICustomPaint FindObjectAt(int x,int y)
{
if (this.mSelectedObjects.Count>0)
{
foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
{
if (CurrentObject.GetRegion().Contains(x,y))
return CurrentObject;
}
}
for (int i=staticObjects.Length;i>0;i--)
{
if ( staticObjects[i-1].GetRegion().Contains(x,y) )
return staticObjects[i-1];
}
for (int i=dynamicObjects.Length;i>0;i--)
{
if ( dynamicObjects[i-1].GetRegion().Contains(x,y) )
return dynamicObjects[i-1];
}
return null;
}
#endregion
#region Creator and Destructor
public DesignPane()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
drawingImage = new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// DesignPane
//
this.BackColor = System.Drawing.Color.White;
this.Name = "DesignPane";
this.Size = new System.Drawing.Size(428, 436);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DesignPane_MouseUp);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.DesignPane_Paint);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.DesignPane_KeyUp);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DesignPane_KeyDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DesignPane_MouseMove);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DesignPane_MouseDown);
}
#endregion
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -