frmMain.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Collections;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using GraEditor.DrawTools;
  11. using GraEditor.Elements;
  12. namespace GraEditor
  13. {
  14. public partial class frmMain : Form
  15. {
  16. public frmMain()
  17. {
  18. InitializeComponent();
  19. Canvas canvas = Canvas.Instance;
  20. canvas.MainView = this.mainView;
  21. canvas.Modified += new EventHandler(canvas_Modified);
  22. InitPenWidthToolBarButton();
  23. canvas.Init(null, new Size(600, 600), Color.White);
  24. InitGraDrawTool();
  25. UpdateFontPanel();
  26. UpdateColorBtnImage(DrawEnvMgr.Instance.Color);
  27. GraDrawTool.ActiveStateChanged += new EventHandler(GraDrawTool_ActiveStateChanged);
  28. this.mainView.MouseMove += new MouseEventHandler(mainView_MouseMove);
  29. //设置手绘绘制工具,默认
  30. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand);
  31. this.tlBtnFreehand.Pushed = true;
  32. }
  33. private void GraDrawTool_ActiveStateChanged(object sender, EventArgs e)
  34. {
  35. GraDrawTool drawTool = sender as GraDrawTool;
  36. this.sbPanelTip.Text = drawTool.Tip;
  37. }
  38. private void mainView_MouseMove(object sender, MouseEventArgs e)
  39. {
  40. Point pos = new Point(e.X, e.Y);//Temporary end point
  41. pos = GraDrawTool.GetRoundPoint(pos);//Round the end point. The min mouse movement distance is 6.
  42. string text = string.Format("X= {0} Y= {1}", pos.X, pos.Y);
  43. this.sbPanelMousePos.Text = text;
  44. }
  45. private void canvas_Modified(object sender, EventArgs e)
  46. {
  47. Canvas c = Canvas.Instance;
  48. string title = "图形编辑器 -- ";
  49. if (c.Name != null && c.Name.Length > 0)
  50. title += c.Name;
  51. else
  52. title += "NewImage.bmp";
  53. if (c.IsModified)
  54. title += "*";
  55. this.Text = title;
  56. if (Canvas.Instance.GraList.Count > 0)
  57. {
  58. this.tlBtnUndo.Enabled = true;
  59. }
  60. }
  61. private MenuItem selectedPenWidthMenuItem;
  62. private void InitPenWidthToolBarButton()
  63. {
  64. MenuItem[] items = new MenuItem[16];//6
  65. for (int i = 0; i < items.Length; i++)
  66. {
  67. items[i] = new MenuItem(i.ToString());//
  68. items[i].MeasureItem += new MeasureItemEventHandler(GE_MeasureItem);
  69. items[i].DrawItem += new DrawItemEventHandler(PenWidthMenu_DrawItem);
  70. items[i].Click += new EventHandler(PenWidthMenu_Click);
  71. items[i].OwnerDraw = true;
  72. }
  73. this.muPenWidth.MenuItems.AddRange(items);
  74. this.selectedPenWidthMenuItem = items[0];
  75. this.selectedPenWidthMenuItem.Checked = true;
  76. }
  77. private void GE_MeasureItem(object sender, MeasureItemEventArgs e)
  78. {
  79. e.ItemHeight = 20;
  80. e.ItemWidth = 80;//(int)stringSize.Width;
  81. }
  82. /// <summary>
  83. /// OwnerDraw PenWidth toolBar button menu
  84. /// </summary>
  85. /// <param name="sender"></param>
  86. /// <param name="e"></param>
  87. private void PenWidthMenu_DrawItem(object sender, DrawItemEventArgs e)
  88. {
  89. Point pt1 = new Point(e.Bounds.X + 6, e.Bounds.Y + e.Bounds.Height / 2);
  90. Point pt2 = new Point(e.Bounds.Right - 6, pt1.Y);
  91. MenuItem item = sender as MenuItem;
  92. using (Pen p = new Pen(Color.Black, item.Index + 1))
  93. {
  94. e.Graphics.DrawLine(p, pt1, pt2);
  95. }
  96. if (item.Checked)
  97. {
  98. Rectangle r = e.Bounds;
  99. r.Inflate(-4, 0);
  100. e.Graphics.DrawRectangle(Pens.Red, r);
  101. }
  102. }
  103. private void PenWidthMenu_Click(object sender, EventArgs e)
  104. {
  105. MenuItem item = sender as MenuItem;
  106. if (item == this.selectedPenWidthMenuItem)
  107. return;
  108. this.selectedPenWidthMenuItem.Checked = false;
  109. this.selectedPenWidthMenuItem = item;
  110. this.selectedPenWidthMenuItem.Checked = true;
  111. DrawEnvMgr.Instance.PenWidth = item.Index + 1;
  112. if (item.Index > 5) { DrawEnvMgr.Instance.PenWidth = item.Index*2; }
  113. }
  114. private void selectTool_StateChanged(object sender, EventArgs e)
  115. {
  116. SelectDrawTool tool = sender as SelectDrawTool;
  117. if (tool.SelectRectGra != null)
  118. {
  119. this.tlBtnCut.Enabled = true;
  120. this.tlBtnCopy.Enabled = true;
  121. }
  122. else
  123. {
  124. this.tlBtnCut.Enabled = false;
  125. this.tlBtnCopy.Enabled = false;
  126. }
  127. if (tool.CopyImage != null)
  128. {
  129. this.pasteMenuItem.Enabled = true;
  130. }
  131. else
  132. {
  133. this.pasteMenuItem.Enabled = false;
  134. }
  135. }
  136. /// <summary>
  137. /// 最初的绘图工具类型
  138. /// </summary>
  139. private void InitGraDrawTool()
  140. {
  141. //Get the instance of GraDrawToolMgr
  142. GraDrawToolMgr drawToolMgr = GraDrawToolMgr.Instance;
  143. //Add Select draw tool type into GraDrawToolMgr
  144. SelectDrawTool selectTool = SelectDrawTool.Instance;
  145. selectTool.TblBtn = this.tlBtnSelect;
  146. selectTool.StateChanged += new EventHandler(selectTool_StateChanged);
  147. this.selectTool_StateChanged(selectTool, EventArgs.Empty);
  148. GraDrawToolMgr.Instance.AddDrawTool(selectTool);
  149. //Add line draw tool type into GraDrawToolMgr
  150. LineDrawTool lineTool = new LineDrawTool();
  151. lineTool.TblBtn = this.tlBtnLine;
  152. GraDrawToolMgr.Instance.AddDrawTool(lineTool);
  153. ArrowDrawTool arrowTool = new ArrowDrawTool();
  154. arrowTool.TblBtn = this.tlBtnArrow;
  155. GraDrawToolMgr.Instance.AddDrawTool(arrowTool);
  156. MobileViewsDrawTool mobileViewsTool = new MobileViewsDrawTool();
  157. mobileViewsTool.TblBtn = this.tlbtnhand;
  158. GraDrawToolMgr.Instance.AddDrawTool(mobileViewsTool);
  159. //Add lines draw tool type into GraDrawToolMgr
  160. LinesDrawTool linesTool = new LinesDrawTool();
  161. linesTool.TblBtn = this.tlBtnLines;
  162. GraDrawToolMgr.Instance.AddDrawTool(linesTool);
  163. //Add freehand draw tool type into GraDrawToolMgr
  164. FreehandDrawTool freehandTool = new FreehandDrawTool();
  165. freehandTool.TblBtn = this.tlBtnFreehand;
  166. GraDrawToolMgr.Instance.AddDrawTool(freehandTool);
  167. //Add erase draw tool type into GraDrawToolMgr
  168. EraseDrawTool eraseTool = new EraseDrawTool();
  169. eraseTool.TblBtn = this.tlBtnErase;
  170. GraDrawToolMgr.Instance.AddDrawTool(eraseTool);
  171. //Add frame rectangle draw tool type into GraDrawToolMgr
  172. FrameRectDrawTool frameRectTool = new FrameRectDrawTool();
  173. frameRectTool.TblBtn = this.tlBtnFrameRect;
  174. GraDrawToolMgr.Instance.AddDrawTool(frameRectTool);
  175. //Add solid rectangle draw tool type into GraDrawToolMgr
  176. FillRectDrawTool fillRectTool = new FillRectDrawTool();
  177. fillRectTool.TblBtn = this.tlBtnFillRect;
  178. GraDrawToolMgr.Instance.AddDrawTool(fillRectTool);
  179. //Add frame ellipse draw tool type into GraDrawToolMgr
  180. FrameEllipseDrawTool frameEllipseTool = new FrameEllipseDrawTool();
  181. frameEllipseTool.TblBtn = this.tlBtnFrameEllipse;
  182. GraDrawToolMgr.Instance.AddDrawTool(frameEllipseTool);
  183. //Add solid ellipse draw tool type into GraDrawToolMgr
  184. FillEllipseDrawTool fillEllipseTool = new FillEllipseDrawTool();
  185. fillEllipseTool.TblBtn = this.tlBtnFillEllipse;
  186. GraDrawToolMgr.Instance.AddDrawTool(fillEllipseTool);
  187. //Add insert image draw tool type into GraDrawToolMgr
  188. ImageDrawTool imageDrawTool = new ImageDrawTool();
  189. imageDrawTool.TblBtn = this.tlBtnImage;
  190. GraDrawToolMgr.Instance.AddDrawTool(imageDrawTool);
  191. //Add insert text draw tool type into GraDrawToolMgr
  192. TextDrawTool textDrawTool = TextDrawTool.Instance;
  193. textDrawTool.TblBtn = this.tlBtnText;
  194. GraDrawToolMgr.Instance.AddDrawTool(textDrawTool);
  195. tlBtnUndo_Click();
  196. tlBtnRedo_Click();
  197. }
  198. private void GE_toolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e)
  199. {
  200. ToolBarButton b = e.Button;//clicked Toolbar button
  201. if (b != this.tlBtnText)
  202. TextDrawTool.Instance.EndTextEditing(true);
  203. if (b == this.tlBtnLine)//画线
  204. tlBtnLine_Click();
  205. else if (b == this.tlBtnArrow)//画箭头
  206. tlBtnArrow_Click();
  207. else if (b == this.tlBtnLines)//画多段线
  208. tlBtnLines_Click();
  209. else if (b == this.tlBtnFreehand)//铅笔 自由画线
  210. tlBtnFreehand_Click();
  211. else if (b == this.tlBtnFrameRect)//矩形框
  212. tlBtnFrameRect_Click();
  213. else if (b == this.tlBtnFillRect)//实心矩形
  214. tlBtnFillRect_Click();
  215. else if (b == this.tlBtnFrameEllipse)//圆形框
  216. tlBtnFrameEllipse_Click();
  217. else if (b == this.tlBtnFillEllipse)//实心圆
  218. tlBtnFillEllipse_Click();
  219. else if (b == this.tlBtnZoomIn)//放大视图
  220. tlBtnZoomIn_Click();
  221. else if (b == this.tlBtnZoomOut)//缩小视图
  222. tlBtnZoomOut_Click();
  223. else if (b == this.tlbtnhand)//移动视图
  224. tlbtnhand_Click();
  225. else if (b == this.tlBtnZoomResume)//恢复视图
  226. tlBtnZoomResume_Click();
  227. else if (b == this.tlBtnImage)//导入图像
  228. tlBtnImage_Click();
  229. else if (b == this.tlBtnText)//输入文字
  230. tlBtnText_Click();
  231. else if (b == this.tlBtnErase) // 橡皮擦
  232. tlBtnErase_Click();
  233. else if (b == this.tlbtnExit)//退出
  234. this.Close();
  235. }
  236. // select button is clicked
  237. private void tlBtnSelect_Click()
  238. {
  239. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Select);//Set SelectDrawTool as active
  240. }
  241. // line button is clicked
  242. private void tlBtnLine_Click()
  243. {
  244. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Line);//Set LineDrawTool as active
  245. }
  246. private void tlBtnArrow_Click()
  247. {
  248. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Arrow);//Set LineDrawTool as active
  249. }
  250. // lines button is clicked
  251. private void tlBtnLines_Click()
  252. {
  253. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Lines);//Set LineDrawTool as active
  254. }
  255. // freehand button is clicked
  256. private void tlBtnFreehand_Click()
  257. {
  258. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand);//Set FreehandDrawTool as active
  259. }
  260. // erase button is clicked
  261. private void tlBtnErase_Click()
  262. {
  263. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Erase);//Set SelectDrawTool as active
  264. }
  265. // frame rectangle button is clicked
  266. private void tlBtnFrameRect_Click()
  267. {
  268. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FrameRect);//Set FrameRectDrawTool as active
  269. }
  270. // solid button is clicked
  271. private void tlBtnFillRect_Click()
  272. {
  273. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FillRect);//Set FillRectDrawTool as active
  274. }
  275. // frame ellipse button is clicked
  276. private void tlBtnFrameEllipse_Click()
  277. {
  278. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FrameEllipse);//Set FrameEllipseDrawTool as active
  279. }
  280. // solid ellipse button is clicked
  281. private void tlBtnFillEllipse_Click()
  282. {
  283. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FillEllipse);//Set FillEllipseDrawTool as active
  284. }
  285. // sets the insert image as the active tool
  286. private void tlBtnImage_Click()
  287. {
  288. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Image);//Set FillEllipseDrawTool as active
  289. }
  290. // sets the insert text as the active tool
  291. private void tlBtnText_Click()
  292. {
  293. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Text);//Set FillEllipseDrawTool as active
  294. }
  295. // cut button is clicked
  296. private void tlBtnCut_Click()
  297. {
  298. SelectDrawTool.Instance.Cut();//cut operation
  299. }
  300. // zoom in button is clicked
  301. private void tlBtnZoomIn_Click()
  302. {
  303. this.mainView.ScaleView(1.2f);//Zoom in 1.2 times
  304. OnViewZoomChanged();
  305. }
  306. // zoom out button is clicked
  307. private void tlBtnZoomOut_Click()
  308. {
  309. this.mainView.ScaleView(0.8f);//Zoom out 0.8 time
  310. OnViewZoomChanged();
  311. }
  312. private void tlbtnhand_Click()
  313. {
  314. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.MobileViews);//Set FillEllipseDrawTool as active
  315. }
  316. private void OnViewZoomChanged()
  317. {
  318. float scale = this.mainView.ViewMatrix.Elements[0];
  319. string text = scale.ToString("p0");
  320. this.sbPanelViewScale.Text = text;
  321. }
  322. // zoom resume button is clicked
  323. private void tlBtnZoomResume_Click()
  324. {
  325. this.mainView.ResetScale();//Resume to original size
  326. OnViewZoomChanged();
  327. }
  328. // paste button is clicked
  329. // private void tlBtnPaste_Click( )
  330. // {
  331. //
  332. // }
  333. // undo button is clicked
  334. private void GE_toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs e)
  335. {
  336. ToolBarButton b = e.Button;//clicked Toolbar button
  337. if (b != this.tlBtnText)
  338. TextDrawTool.Instance.EndTextEditing(true);
  339. if (b == this.tlBtnNew) // new image button is clicked
  340. tlBtnNew_Click();
  341. else if (b == this.tlBtnOpen) // open an existing image button is clicked
  342. tlBtnOpen_Click();
  343. else if (b == this.tlbtnreload) // 开始新的绘制
  344. tlbtnreload_Click();
  345. else if (b == this.tlbtnSaveExplain) // 保存给制好的说明图片
  346. tlbtnSaveExplain_Click();
  347. else if (b == this.tlBtnSave) // save the current image button is clicked
  348. tlBtnSave_Click();
  349. else if (b == this.tlBtnUndo)//Undo button is clicked
  350. tlBtnUndo_Click();
  351. else if (b == this.tlBtnRedo)//Redo button is clicked
  352. tlBtnRedo_Click();
  353. else if (b == this.tlBtnColor)
  354. tlBtnColor_Click();
  355. else if (b == this.tlBtnFont)
  356. tlBtnFont_Click();
  357. else if (b == this.tlBtnCut)//Cut button is clicked
  358. tlBtnCut_Click();
  359. else if (b == this.tlBtnCopy)//Copy button is clicked
  360. tlBtnCopy_Click();
  361. else if (b == this.tlBtnSelect)//Select button is clicked
  362. tlBtnSelect_Click();
  363. else if (b == this.tlbtnprintpreview)
  364. this.printPreviewDialog1.ShowDialog();
  365. else if (b == this.tlbtnprint)
  366. menuPrint_Click(null, null);
  367. else if (b == this.tlbtnprintSet)
  368. menuPageSetting_Click(null,null);
  369. else if (b == this.tlbtnSaves)
  370. tlBtnSaves_Click();
  371. }
  372. private void menuPrint_Click(object sender, System.EventArgs e)
  373. {
  374. try
  375. {
  376. this.printDocument1.Print();
  377. }
  378. catch (Exception ex)
  379. {
  380. MessageBox.Show("打印文件出错 - " + ex.Message);
  381. }
  382. }
  383. private void menuPageSetting_Click(object sender, System.EventArgs e)
  384. {
  385. try
  386. {
  387. this.pageSetupDialog1.ShowDialog();
  388. }
  389. catch (Exception ex)
  390. {
  391. MessageBox.Show("错误 - " + ex.Message);
  392. }
  393. }
  394. private void tlBtnCopy_Click()
  395. {
  396. SelectDrawTool.Instance.Copy();
  397. }
  398. private void tlBtnColor_Click()
  399. {
  400. ColorDialog dlg = new ColorDialog(); // instantiating new color dialog box
  401. dlg.Color = DrawEnvMgr.Instance.Color; //assigning the DrawEnvMgr.Instance.Color to the dialog
  402. if (DialogResult.OK == dlg.ShowDialog())
  403. {
  404. DrawEnvMgr.Instance.Color = dlg.Color;
  405. UpdateColorBtnImage(dlg.Color); //updating the image with the color selected by user in the dialog box
  406. }
  407. }
  408. private void UpdateColorBtnImage(Color color)
  409. {
  410. int imageIndex = tlBtnColor.ImageIndex;
  411. Image image = this.GE_imageList.Images[imageIndex];
  412. using (Graphics g = Graphics.FromImage(image))
  413. {
  414. using (SolidBrush b = new SolidBrush(color))
  415. {
  416. g.FillRectangle(b, new Rectangle(2, 24, 28, 8));
  417. }
  418. }
  419. this.GE_imageList.Images[imageIndex] = image;
  420. tlBtnColor.ImageIndex = 0;
  421. tlBtnColor.ImageIndex = imageIndex;
  422. int textImageIndex = this.tlBtnText.ImageIndex;
  423. Image textImage = this.GE_imageList.Images[textImageIndex];
  424. using (Graphics g = Graphics.FromImage(textImage))
  425. {
  426. using (SolidBrush b = new SolidBrush(color))
  427. {
  428. g.FillRectangle(b, new Rectangle(0, 24, 32, 8));
  429. }
  430. }
  431. this.GE_imageList.Images[textImageIndex] = textImage;
  432. this.tlBtnText.ImageIndex = 0;
  433. this.tlBtnText.ImageIndex = textImageIndex;
  434. }
  435. private void tlBtnFont_Click()
  436. {
  437. FontDialog dlg = new FontDialog(); //instantiating a new fontdialog box
  438. dlg.Font = DrawEnvMgr.Instance.Font;
  439. if (DialogResult.OK == dlg.ShowDialog(this))
  440. {
  441. DrawEnvMgr.Instance.Font = dlg.Font; // assigning the font selected by the user to DrawEnvMgr.Instance.Font
  442. UpdateFontPanel();
  443. }
  444. }
  445. private void UpdateFontPanel()
  446. {
  447. Font f = DrawEnvMgr.Instance.Font;
  448. string info = string.Format("{0} -- {1}", f.Name, f.Size);
  449. this.sbPanelFont.Text = info;
  450. }
  451. // undo button is clicked
  452. private void tlBtnUndo_Click()
  453. {
  454. GraEditStackMgr.Instance.Undo();//Undo operation
  455. if (Canvas.Instance.GraList.Count == 0)
  456. {
  457. this.tlBtnUndo.Enabled = false;
  458. // this.menuUndo.Enabled = false;
  459. }
  460. if (GraEditStackMgr.Instance.GraRedoList.Count > 0)
  461. {
  462. this.tlBtnRedo.Enabled = true;
  463. // this.menuRedo.Enabled = true;
  464. }
  465. }
  466. // redo button is clicked
  467. private void tlBtnRedo_Click()
  468. {
  469. GraEditStackMgr.Instance.Redo();//Redo operation
  470. if (GraEditStackMgr.Instance.GraRedoList.Count == 0)
  471. {
  472. this.tlBtnRedo.Enabled = false;
  473. }
  474. if (Canvas.Instance.GraList.Count > 0)
  475. {
  476. this.tlBtnUndo.Enabled = true;
  477. }
  478. }
  479. private void InitEditStackMgr()
  480. {
  481. this.tlBtnUndo.Enabled = false;
  482. this.tlBtnRedo.Enabled = false;
  483. GraEditStackMgr.Instance.Clear();
  484. GraDrawTool tool = GraDrawToolMgr.Instance.ActiveDrawTool;
  485. if (tool != null)
  486. tool.IsActive = false;
  487. }
  488. private void tlBtnNew_Click()
  489. {
  490. if (!this.SaveFile(true))
  491. return;
  492. Canvas.Instance.Close();
  493. NewCanvasCfg dlg = new NewCanvasCfg();
  494. dlg.Text = "新建画图";
  495. if (DialogResult.OK != dlg.ShowDialog())
  496. return;
  497. SelectDrawTool.Instance.IsActive = false;
  498. Canvas.Instance.Init(null, dlg.CanvasSize, dlg.CanvasBackColor);
  499. InitEditStackMgr();
  500. Canvas.Instance.Update();
  501. //设置手绘绘制工具,默认
  502. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand);
  503. this.tlBtnFreehand.Pushed = true;
  504. }
  505. // open file button is clicked
  506. private void tlBtnOpen_Click()
  507. {
  508. if (!Canvas.Instance.Open())
  509. return;
  510. SelectDrawTool.Instance.IsActive = false;
  511. InitEditStackMgr();
  512. //设置手绘绘制工具,默认
  513. GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand);
  514. this.tlBtnFreehand.Pushed = true;
  515. Canvas.Instance.Close();
  516. }
  517. private void tlbtnreload_Click()
  518. {
  519. Canvas.Instance.ReloadCanvas();
  520. }
  521. Bitmap sourceBitmap = null;
  522. /// <summary>
  523. /// 要制作说明的原图
  524. /// </summary>
  525. public Bitmap SourceBitmap
  526. {
  527. get { return sourceBitmap; }
  528. set { sourceBitmap = value; }
  529. }
  530. string sourceBitmapFilePath = "";
  531. /// <summary>
  532. /// 要制作说明的原图文件路径
  533. /// </summary>
  534. public string SourceBitmapFilePath
  535. {
  536. get { return sourceBitmapFilePath; }
  537. set { sourceBitmapFilePath = value; }
  538. }
  539. Bitmap eplainBitmap = null;
  540. /// <summary>
  541. /// 当前编辑的说明图
  542. /// </summary>
  543. public Bitmap EplainBitmap
  544. {
  545. get { return eplainBitmap; }
  546. set { eplainBitmap = value; }
  547. }
  548. string eplainBitmapTitle = "";
  549. /// <summary>
  550. /// 当前编辑的说明图标题
  551. /// </summary>
  552. public string EplainBitmapTitle
  553. {
  554. get { return eplainBitmapTitle; }
  555. set { eplainBitmapTitle = value; }
  556. }
  557. string eplainBitmapFilePath = @"C:\TEST\aa";
  558. /// <summary>
  559. /// 当前编辑的说明图文件路径
  560. /// </summary>
  561. public string EplainBitmapFilePath
  562. {
  563. get { return eplainBitmapFilePath; }
  564. set { eplainBitmapFilePath = value; }
  565. }
  566. private void tlbtnSaveExplain_Click()
  567. {
  568. // Canvas.Instance.GetNewBitmap() ;
  569. if (EplainBitmapFilePath.Trim().Length <= 1)
  570. {
  571. MessageBox.Show(this,"保存产品说明图出错,关闭后重试!");
  572. return;
  573. }
  574. if (EplainBitmapTitle.Trim().Length <= 0)
  575. {
  576. frmEplainBitmapTitle frmTitle = new frmEplainBitmapTitle();
  577. if (DialogResult.OK == frmTitle.ShowDialog())
  578. {
  579. }
  580. }
  581. // MessageBox.Show("OK");
  582. }
  583. // save file button is clicked
  584. private void tlBtnSave_Click()
  585. {
  586. this.SaveFile(false);
  587. }
  588. private void tlBtnSaves_Click()
  589. {
  590. menuSaveAs_Click(null,null);
  591. }
  592. private bool SaveFile(bool isNeedWarning)
  593. {
  594. if (!Canvas.Instance.IsModified)
  595. return true;
  596. if (isNeedWarning)
  597. {
  598. DialogResult r = MessageBox.Show(this, "该文件已被修改,你需要保存它吗?", "警告",
  599. MessageBoxButtons.YesNoCancel);
  600. if (r == DialogResult.Cancel)
  601. return false;
  602. if (r == DialogResult.No)
  603. return true;
  604. }
  605. SaveFileDialog dlg = new SaveFileDialog();
  606. dlg.Filter = this.fileFilter;
  607. dlg.RestoreDirectory = true;
  608. if (Canvas.Instance.Name == null ||
  609. Canvas.Instance.Name.Length == 0)
  610. {
  611. dlg.FilterIndex = 1;
  612. if (dlg.ShowDialog() == DialogResult.OK)
  613. {
  614. Canvas.Instance.Name = dlg.FileName;
  615. }
  616. else
  617. return false;
  618. }
  619. else if (!Canvas.Instance.IsSavedOnce)
  620. {
  621. dlg.FileName = Canvas.Instance.Name;
  622. dlg.FilterIndex = GetFilterIndexByFileName(dlg.FileName);
  623. if (dlg.ShowDialog() == DialogResult.OK)
  624. {
  625. Canvas.Instance.Name = dlg.FileName;
  626. }
  627. else
  628. return false;
  629. }
  630. Canvas.Instance.Save();
  631. return true;
  632. }
  633. private string fileFilter = "位图文件|*.bmp;*.jpg;*.gif;*.png|Bitmap files (*.bmp)|*.bmp|Jpg files (*.jpg)|*.jpg|Gif files (*.gif)|*.gif";
  634. private int GetFilterIndexByFileName(string fileName)
  635. {
  636. string ext =System.IO.Path.GetExtension(fileName);
  637. if (ext == ".bmp")
  638. return 1;
  639. else if (ext == ".jpg")
  640. return 2;
  641. else if (ext == ".5gif")
  642. return 3;
  643. else
  644. return 1;
  645. }
  646. //Save as
  647. private void menuSaveAs_Click(object sender, System.EventArgs e)
  648. {
  649. SaveFileDialog dlg = new SaveFileDialog();
  650. dlg.Filter = this.fileFilter;
  651. //dlg.FilterIndex = 1 ;
  652. dlg.RestoreDirectory = true;
  653. dlg.FileName = Canvas.Instance.Name;
  654. dlg.FilterIndex = GetFilterIndexByFileName(dlg.FileName);
  655. if (dlg.ShowDialog() == DialogResult.OK)
  656. {
  657. Canvas.Instance.Name = dlg.FileName;
  658. Canvas.Instance.Save();
  659. }
  660. }
  661. private void toolStripMenuItem1_Click(object sender, EventArgs e)
  662. {
  663. SelectDrawTool.Instance.Paste();
  664. }
  665. private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
  666. {
  667. this.mainView.contextMenu1_Popup(sender, e);
  668. }
  669. private void toolStripMenuItem2_Click(object sender, EventArgs e)
  670. {
  671. ColorDialog dlg = new ColorDialog();
  672. dlg.Color = Canvas.Instance.BackColor;
  673. if (DialogResult.OK == dlg.ShowDialog())
  674. {
  675. foreach (GraElement gra in Canvas.Instance.GraList)
  676. {
  677. if (gra is EraseLinesGra)
  678. {
  679. gra.PenExt.Color = dlg.Color;
  680. }
  681. if (gra is EraseRectGra)
  682. {
  683. gra.PenExt.Color = dlg.Color;
  684. gra.BrushExt.Color = dlg.Color;
  685. }
  686. }
  687. Canvas.Instance.BackColor = dlg.Color;
  688. }
  689. }
  690. private void toolStripMenuItem3_Click(object sender, EventArgs e)
  691. {
  692. NewCanvasCfg dlg = new NewCanvasCfg();
  693. dlg.Text = "修改画布";
  694. dlg.CanvasSize = Canvas.Instance.Size;
  695. if (DialogResult.OK == dlg.ShowDialog())
  696. {
  697. Canvas.Instance.Size = dlg.CanvasSize;
  698. Canvas.Instance.BackColor = dlg.CanvasBackColor;
  699. Canvas.Instance.Update();
  700. }
  701. }
  702. private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  703. {
  704. try
  705. {
  706. Graphics g = e.Graphics;
  707. Region r = new Region(new Rectangle(new Point(0, 0), Canvas.Instance.Size));
  708. Region old = g.Clip;
  709. g.Clip = r;
  710. ArrayList list = Canvas.Instance.GraList;
  711. foreach (GraElement gra in list)
  712. {
  713. if (gra is EraseLinesGra)
  714. {
  715. gra.PenExt.Color = Color.White;
  716. gra.Draw(g);
  717. gra.PenExt.Color = Canvas.Instance.BackColor;
  718. }
  719. else if (gra is EraseRectGra)
  720. {
  721. gra.PenExt.Color = Color.White;
  722. gra.BrushExt.Color = Color.White;
  723. gra.Draw(g);
  724. gra.PenExt.Color = Canvas.Instance.BackColor;
  725. gra.BrushExt.Color = Canvas.Instance.BackColor;
  726. }
  727. else
  728. gra.Draw(g);
  729. }
  730. g.Clip = old;
  731. }
  732. catch (Exception ex)
  733. {
  734. MessageBox.Show("当前文档打印错误 - " + ex.Message);
  735. }
  736. }
  737. private void frmMain_KeyUp(object sender, KeyEventArgs e)
  738. {
  739. if (e.KeyCode == Keys.Delete)
  740. {
  741. SelectDrawTool.Instance.ClearRectGra();
  742. }
  743. else if (e.KeyCode == Keys.A && e.Control)
  744. {
  745. SelectDrawTool.Instance.AllSelectedRect();
  746. }
  747. else if (e.KeyCode == Keys.V && e.Control)
  748. {
  749. SelectDrawTool.Instance.ContextMenuMousePos = new Point(0,0);
  750. SelectDrawTool.Instance.Paste();
  751. }
  752. else if (e.KeyCode == Keys.C && e.Control)
  753. {
  754. SelectDrawTool.Instance.Copy();
  755. }
  756. else if (e.KeyCode == Keys.X && e.Control)
  757. {
  758. SelectDrawTool.Instance.Cut();
  759. }
  760. else if (e.KeyCode == Keys.Escape)
  761. {
  762. SelectDrawTool.Instance.ClerSelected();
  763. }
  764. this.mainView.OnKeyUpTool(e);
  765. }
  766. }
  767. }