⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winmain.tool.cs

📁 一个C#开发的类似PHOTOSHOP的软件,用到了很多图形算法.
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Windows.Forms;
using PhotoSprite.Tool;
using PhotoSprite.ImageProcessing;

namespace PhotoSprite
{
  public partial class WinMain
  {
    /******************************
     * 
     * 主工具条
     * 
     ******************************/

    private void newToolStripButton_Click(object sender, EventArgs e)
    {
      this.newToolStripMenuItem_Click(sender, e);
    }

    private void openToolStripButton_Click(object sender, EventArgs e)
    {
      this.openToolStripMenuItem_Click(sender, e);
    }

    private void saveToolStripButton_Click(object sender, EventArgs e)
    {
      this.saveAsToolStripMenuItem_Click(sender, e);
    }

    private void printPreviewToolStripButton_Click(object sender, EventArgs e)
    {
      this.printPreviewToolStripMenuItem_Click(sender, e);
    }

    private void printToolStripButton_Click(object sender, EventArgs e)
    {
      this.printToolStripMenuItem_Click(sender, e);
    }

    private void cutToolStripButton_Click(object sender, EventArgs e)
    {
      this.cutToolStripMenuItem_Click(sender, e);
    }

    private void copyToolStripButton_Click(object sender, EventArgs e)
    {
      this.copyToolStripMenuItem_Click(sender, e);
    }

    private void pasteToolStripButton_Click(object sender, EventArgs e)
    {
      this.pasteToolStripMenuItem_Click(sender, e);
    }

    private void undoToolStripButton_Click(object sender, EventArgs e)
    {
      this.undoToolStripMenuItem_Click(sender, e);
    }

    private void redoToolStripButton_Click(object sender, EventArgs e)
    {
      this.redoToolStripMenuItem_Click(sender, e);
    }

    private void ieToolStripButton_Click(object sender, EventArgs e)
    {
      this.ieToolStripMenuItem_Click(sender, e);
    }

    private void fireworksToolStripButton_Click(object sender, EventArgs e)
    {
      this.fireworksToolStripMenuItem_Click(sender, e);
    }

    private void photoshopToolStripButton_Click(object sender, EventArgs e)
    {
      this.photoshopToolStripMenuItem_Click(sender, e);
    }

    private void helpToolStripButton_Click(object sender, EventArgs e)
    {
      this.contentToolStripMenuItem_Click(sender, e);
    }


    /******************************
     * 
     * 风格工具条
     * 
     ******************************/

    private void InitStyleToolbar()
    {
      // 获取所有已经安装的字体系列
      InstalledFontCollection ifc = new InstalledFontCollection();
      foreach (FontFamily ff in ifc.Families)
      {
        this.fontFamilyToolStripComboBox.Items.Add(ff.Name);
      }

      // 初始化画笔宽度
      for (int i = 1; i < 100; i++)
      {
        this.brushWidthToolStripComboBox.Items.Add(i.ToString());
      }

      // 初始化图案
      this.hatchStyleToolStripComboBox.Items.Add("Solid Brush");
      foreach (string styleName in Enum.GetNames(typeof(HatchStyle)))
      {
        this.hatchStyleToolStripComboBox.Items.Add(styleName);
      }
      this.hatchStyleToolStripComboBox.SelectedIndex = 0;
      this.hatchStyleToolStripComboBox.ComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
      this.hatchStyleToolStripComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
      this.hatchStyleToolStripComboBox.DropDownWidth = 190;
      this.hatchStyleToolStripComboBox.ComboBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.hatchStyleToolStripComboBox_DrawItem);

      // 初始化前背景按扭
      this.fgColorToolStripButton.Image = ColorPickerDialog.DrawColorButton(this.foreColor);
      this.bgColorToolStripButton.Image = ColorPickerDialog.DrawColorButton(this.backColor);
    }

    private void hatchStyleToolStripComboBox_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
    {
      e.DrawBackground();
      Rectangle rect = e.Bounds;
      
      if (e.Index != -1)
      {
        if (e.Index > 0)
        {
          Rectangle rd = rect;
          rd.Width = rd.Left + 25;

          Rectangle rt = rect;
          rect.X = rd.Right;

          string displayText = this.hatchStyleToolStripComboBox.Items[e.Index].ToString();
          HatchStyle hs = (HatchStyle)Enum.Parse(typeof(HatchStyle), displayText, true);

          using (HatchBrush hb = new HatchBrush(hs, e.ForeColor, e.BackColor))
          {
            e.Graphics.FillRectangle(hb, rd);
          }

          StringFormat sf = new StringFormat();
          sf.Alignment = StringAlignment.Near;

          using (SolidBrush sb = new SolidBrush(Color.White))
          {
            if ((e.State & DrawItemState.Focus) == 0)
            {
              sb.Color = SystemColors.Window;
              e.Graphics.FillRectangle(sb, rect);
              sb.Color = SystemColors.WindowText;
              e.Graphics.DrawString(displayText, this.Font, sb, rect, sf);
            }
            else
            {
              sb.Color = SystemColors.Highlight;
              e.Graphics.FillRectangle(sb, rect);
              sb.Color = SystemColors.HighlightText;
              e.Graphics.DrawString(displayText, this.Font, sb, rect, sf);
            }
          }
        }
        else
        {
          // Solid brush
          using (SolidBrush sb = new SolidBrush(Color.White))
          {
            if ((e.State & DrawItemState.Focus) == 0)
            {
              sb.Color = SystemColors.Window;
              e.Graphics.FillRectangle(sb, e.Bounds);
              string displayText = this.hatchStyleToolStripComboBox.Items[e.Index].ToString();
              sb.Color = SystemColors.WindowText;
              e.Graphics.DrawString(displayText, this.Font, sb, e.Bounds);
            }
            else
            {
              sb.Color = SystemColors.Highlight;
              e.Graphics.FillRectangle(sb, e.Bounds);
              string displayText = this.hatchStyleToolStripComboBox.Items[e.Index].ToString();
              sb.Color = SystemColors.HighlightText;
              e.Graphics.DrawString(displayText, this.Font, sb, e.Bounds);
            }
          }
        }

        e.DrawFocusRectangle();
      }
    }

    private void brushWidthToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
      this.brushWidth = Convert.ToInt32(this.brushWidthToolStripComboBox.SelectedItem);
    }

    private void hatchStyleToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
      int index = this.hatchStyleToolStripComboBox.SelectedIndex;
      if (index == 0)
      {
        this.hasBrushStyle = false;
      }
      else
      {
        this.hasBrushStyle = true;
        string displayText = this.hatchStyleToolStripComboBox.Items[index].ToString();
        this.hatchStyle = (HatchStyle)Enum.Parse(typeof(HatchStyle), displayText, true);
      }
    }

    private void fgColorToolStripButton_Click(object sender, EventArgs e)
    {
      ColorPickerDialog dlg = new ColorPickerDialog();
      dlg.ArgbColor = this.foreColor;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        this.foreColor = dlg.ArgbColor;
        this.fgColorToolStripButton.Image = ColorPickerDialog.DrawColorButton(this.foreColor);
      }
    }

    private void bgColorToolStripButton_Click(object sender, EventArgs e)
    {
      ColorPickerDialog dlg = new ColorPickerDialog();
      dlg.ArgbColor = this.backColor;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        this.backColor = dlg.ArgbColor;
        this.bgColorToolStripButton.Image = ColorPickerDialog.DrawColorButton(this.backColor);
      }
    }


    /******************************
     * 
     * 字体工具条
     * 详见 TextTool 文字工具类
     * 
     ******************************/



    /******************************
     * 
     * 工具箱
     * 
     ******************************/

    /// <summary>
    /// 选择工具
    /// </summary>
    /// <param name="toolType">工具类型</param>
    private void ToolboxClick(ToolType toolType)
    {
      if (toolType == this.toolType)
        return;
      
      CreateTools(toolType);
      DeactivateToolbox(this.toolType);
      UpdateToolbox(toolType);
      ActivateToolbox(toolType);

      this.toolType = toolType;
    }

    /// <summary>
    /// 建立指定的工具实例
    /// </summary>
    /// <param name="toolType">工具类型</param>
    private void CreateTools(ToolType toolType)
    {
      switch (toolType)
      {
        case ToolType.Move:
          break;

        case ToolType.RectangleSelect:
          rectangleSelectTool = new RectangleSelectTool(this.canvasMain);
          break;

        case ToolType.EllipseSelect:
          ellipseSelectTool = new EllipseSelectTool(this.canvasMain);
          break;

        case ToolType.LassoSelect:
          lassoSelectTool = new LassoSelectTool(this.canvasMain);
          break;

        case ToolType.Pencil:
          pencilTool = new PencilTool(this.canvasMain);
          pencilTool.DrawingFinished += new EventHandler(this.SaveCanvas);
          break;

        case ToolType.Brush:
          brushTool = new BrushTool(this.canvasMain);
          brushTool.DrawingFinished += new EventHandler(this.SaveCanvas);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -