Files
KJD_WebService/TEMUKJD/KJDForms/UploadForms/FissionShowBigImgForm.cs
T
2025-06-29 19:38:31 +08:00

200 lines
7.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using CefSharp;
using LittleRabbit.LittleRabbitForms.BaseForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LittleRabbit.LittleRabbitForms.UploadForms
{
public partial class FissionShowBigImgForm : LRBaseForm
{
public string imgUrl = "";
public string imgId = "";
public FissionShowBigImgForm(string ImgUrl = "", string ImgId = "")
{
this.DoubleBuffered = true;//设置本窗体
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
InitializeComponent();
imgUrl = ImgUrl;
imgId = ImgId;
this.ShowMaximizeBox = true;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0014) // 禁掉清除背景消息
return;
const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case 100: //按下的是100号快捷键
btnShowPrev_Click(null, null); //此处填写快捷键响应代码
break;
case 101: //按下的是101号快捷键
btnShowNext_Click(null, null); //此处填写快捷键响应代码
break;
case 102: //按下的是102号快捷键
this.Close(); //此处填写快捷键响应代码
break;
}
break;
}
base.WndProc(ref m);
}
private void ShowBigImgForm_Load(object sender, EventArgs e)
{
ShowImg();
}
public void ShowImg()
{
if (string.IsNullOrEmpty(imgId))
{
this.btnShowPrev.Visible = false;
this.btnShowNext.Visible = false;
}
if (!string.IsNullOrEmpty(imgUrl))
{
try
{
Task.Run(() =>
{
System.Threading.Thread.Sleep(10);
AllBase.WebClientx web = new AllBase.WebClientx();
var imgArr = web.DownloadData(imgUrl);
MemoryStream ms = new MemoryStream(imgArr);
Invoke(new Action(() =>
{
this.pnlImg.BackgroundImage = Image.FromStream(ms);
ms.Dispose();
}));
});
}
catch
{
}
}
}
private void ShowBigImgForm_SizeChanged(object sender, EventArgs e)
{
var deltaNumber = this.Height - 60;
if (this.Width - 28 < this.Height - 60)
deltaNumber = this.Width - 28;
this.pnlImg.Width = deltaNumber;
this.pnlImg.Height = deltaNumber;
this.pnlImg.Location = new Point((this.Width - 2) / 2 - this.pnlImg.Width / 2, (this.Height - 32 - 2) / 2 - this.pnlImg.Height / 2);
}
private void btnShowNext_Click(object sender, EventArgs e)
{
if (btnShowNext.Visible == false)
return;
var fiss = Fission.GetInstance();
if (fiss != null && fiss.browser != null && fiss.browser.IsBrowserInitialized)
{
var jsCode = @"ShowNextImg('" + this.imgId + "');";
Fission.GetInstance().browser.GetMainFrame().EvaluateScriptAsync(jsCode, null);
}
}
private void btnShowPrev_Click(object sender, EventArgs e)
{
if (btnShowPrev.Visible == false)
return;
var fiss = Fission.GetInstance();
if (fiss != null && fiss.browser != null && fiss.browser.IsBrowserInitialized)
{
var jsCode = @"ShowPrevImg('" + this.imgId + "');";
Fission.GetInstance().browser.GetMainFrame().EvaluateScriptAsync(jsCode, null);
}
}
/// <summary>
/// 窗体激活时注册快捷键
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FissionShowBigImgForm_Activated(object sender, EventArgs e)
{
//注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.None, Keys.Left);
//注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.None, Keys.Right);
//注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.None, Keys.Escape);
}
/// <summary>
/// 窗体离开时注销快捷键
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FissionShowBigImgForm_Leave(object sender, EventArgs e)
{
//注销Id号为100的热键设定
HotKey.UnregisterHotKey(Handle, 100);
//注销Id号为101的热键设定
HotKey.UnregisterHotKey(Handle, 101);
//注销Id号为102的热键设定
HotKey.UnregisterHotKey(Handle, 102);
}
}
class HotKey
{
//如果函数执行成功,返回值不为0。
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定义热键的窗口的句柄
int id, //定义热键ID(不能与其它ID重复)
KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
Keys vk //定义热键的内容
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消热键的窗口的句柄
int id //要取消热键的ID
);
//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Ctrl = 2,
Shift = 4,
WindowsKey = 8
}
}
}