/// <summary> /// /// </summary> /// <param name="m"></param> public C_旋轉(MainWindow m) { this.M = m; u_menu_旋轉 = new U_menu(m); M.but_旋轉.Click += (sender, e) => { u_menu_旋轉.func_open(M.but_旋轉); }; u_menu_旋轉.func_add_menu_icon("順時針 90°", "icon_順時針90", () => { func_旋轉_順時針_90(); }); u_menu_旋轉.func_add_menu_icon("逆時針 90°", "icon_逆時針90", () => { func_旋轉_逆時針_90(); }); u_menu_旋轉.func_add_水平線(); u_menu_旋轉.func_add_menu_icon("水平鏡像", "icon_水平翻轉", () => { func_旋轉_水平(); }); u_menu_旋轉.func_add_menu_icon("垂直鏡像", "icon_垂直翻轉", () => { func_旋轉_垂直(); }); u_menu_旋轉.func_add_水平線(); u_menu_旋轉.func_add_menu_icon("初始化旋轉", "icon_初始化旋轉", () => { if (int_旋轉 == 270) { int_旋轉 = -90; } if (int_旋轉 == 360) { int_旋轉 = 0; } fun_旋轉動畫( M.grid_img, int_旋轉, 0, bool_水平鏡像, false, bool_垂直鏡像, false ); int_旋轉 = 0; bool_水平鏡像 = false; bool_垂直鏡像 = false; // fun_初始化旋轉(0); }); }
/// <summary> /// /// </summary> private void event_複製的選單() { u_menu_複製.func_add_menu("複製 檔案", null, () => { String s_path = M.ar_path[M.int_目前圖片位置]; //檔案或資料夾存在才複製 if (File.Exists(s_path) || Directory.Exists(s_path)) { var f = new System.Collections.Specialized.StringCollection(); f.Add(s_path); Clipboard.SetFileDropList(f); } }); u_menu_複製.func_add_menu("複製 檔名", null, () => { String s_path = M.ar_path[M.int_目前圖片位置]; s_path = s_path.Substring(s_path.LastIndexOf("\\") + 1); try { System.Windows.Forms.Clipboard.SetDataObject( s_path, //text to store in clipboard false, //do not keep after our app exits 5, //retry 5 times 200); //200ms delay between retries } catch { } }); u_menu_複製.func_add_menu("複製 完整路徑", null, () => { String s_path = M.ar_path[M.int_目前圖片位置]; try { System.Windows.Forms.Clipboard.SetDataObject( s_path, //text to store in clipboard false, //do not keep after our app exits 5, //retry 5 times 200); //200ms delay between retries } catch { } }); u_menu_複製.func_add_水平線(); propertyMenu_複製_影像 = u_menu_複製.func_add_menu("複製 影像", null, () => { try { fun_複製影像(); } catch (Exception e2) { MessageBox.Show(e2.ToString()); } }); propertyMenu_複製_png = u_menu_複製.func_add_menu("複製 PNG (低相容)", null, () => { String s_當前目錄 = M.ar_path[M.int_目前圖片位置]; if (File.Exists(s_當前目錄)) { try { System.Drawing.Bitmap bm_transparent = null; MemoryStream ms = new MemoryStream(); if (M.stackPlanel_動圖工具.Visibility == Visibility.Visible) //如果是動圖,就直接抓目前幀的圖片來處理 { BitmapEncoder enc = new PngBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(M.c_P網.fun_取得目前圖片())); enc.Save(ms); } else { String s_附檔名 = M.s_img_type_附檔名; if (s_附檔名 == "PSD" || s_附檔名 == "AI" || s_附檔名 == "PDF" || s_附檔名 == "WEBP") { using (var mi = M.c_影像.c_Magick.getImg(s_當前目錄, s_附檔名)) { bm_transparent = mi.ToBitmap(); } } else if (s_附檔名 == "EXE" || s_附檔名 == "LNK") { bm_transparent = M.c_影像.BitmapFromSource(M.c_P網.fun_取得exe圖示(s_當前目錄, s_附檔名)); } else { bm_transparent = new System.Drawing.Bitmap(s_當前目錄); } bm_transparent.Save(ms, System.Drawing.Imaging.ImageFormat.Png); } System.Windows.Forms.Clipboard.Clear();//先清理剪貼簿 System.Windows.Forms.IDataObject data_object = new System.Windows.Forms.DataObject(); data_object.SetData("PNG", false, ms); System.Windows.Forms.Clipboard.SetDataObject(data_object, false); } catch (Exception e2) { MessageBox.Show(e2.ToString()); } } }); propertyMenu_複製_svg = propertyMenu_複製_影像 = u_menu_複製.func_add_menu("複製 SVG (文字)", null, () => { String s_當前目錄 = M.ar_path[M.int_目前圖片位置]; try { if (File.Exists(s_當前目錄)) { using (StreamReader sr = new StreamReader(s_當前目錄, Encoding.UTF8)) { System.Windows.Forms.Clipboard.SetDataObject(sr.ReadToEnd(), false, 5, 200); } } } catch (Exception e2) { MessageBox.Show(e2.ToString()); } }); propertyMenu_複製_影像 = u_menu_複製.func_add_menu("複製 base64", null, () => { func_複製_base64(); }); }
/// <summary> /// /// </summary> private void event_其他程式啟動_選單(List <data_開啟程式> ar) { M.but_用外部程式開啟.Click += (sender, e) => { u_menu_用外部程式開啟.func_open(M.but_用外部程式開啟); }; u_menu_用外部程式開啟.func_add_menu("檔案右鍵選單", null, () => { fun_顯示原生右鍵選單(false); }); u_menu_用外部程式開啟.func_add_menu("開啟檔案位置", null, () => { M.fun_用檔案總管開啟目前圖片(); }); u_menu_用外部程式開啟.func_add_menu("列印", null, () => { try { var pr = new System.Diagnostics.Process(); pr.StartInfo.FileName = M.ar_path[M.int_目前圖片位置];//文件全稱-包括文件後綴 pr.StartInfo.CreateNoWindow = true; pr.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; pr.StartInfo.Verb = "Print"; pr.Start(); } catch (Exception e2) { MessageBox.Show("找不到對應開啟的程式:\n" + e2.ToString(), "列印失敗"); } }); u_menu_用外部程式開啟.func_add_menu("設成桌布", null, () => { if (File.Exists(M.ar_path[M.int_目前圖片位置])) //判別檔案是否存在於對應的路徑 { try { SystemParametersInfo(20, 1, M.ar_path[M.int_目前圖片位置], 0x1 | 0x2); //存在成立,修改桌布 (uActuin 20 參數為修改wallpaper } catch (Exception e2) { MessageBox.Show("設定桌布失敗:\n" + e2.ToString(), "失敗"); } } }); u_menu_用外部程式開啟.func_add_menu("選擇其他程式", null, () => { if (File.Exists(M.ar_path[M.int_目前圖片位置])) //判別檔案是否存在於對應的路徑 { try { String _path = M.ar_path[M.int_目前圖片位置]; Process.Start(new ProcessStartInfo("rundll32.exe") { Arguments = $"shell32.dll,OpenAs_RunDLL {_path}", WorkingDirectory = Path.GetDirectoryName(_path) }); } catch (Exception e2) { MessageBox.Show(e2.ToString(), "Error"); } } }); u_menu_用外部程式開啟.func_add_水平線(); //使用者自定的名單 for (int i = 0; i < ar.Count; i++) { int xx = i; BitmapSource img = null; try { img = M.c_影像.BitmapToBitmapSource(ar[i].img); } catch { } u_menu_用外部程式開啟.func_add_menu(ar[i].name, img, () => { try { System.Diagnostics.Process.Start(ar[xx].path, "\"" + M.ar_path[M.int_目前圖片位置] + "\""); } catch (Exception e2) { MessageBox.Show(e2.ToString()); } }); }//for }