200 lines
7.3 KiB
C#
200 lines
7.3 KiB
C#
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
|
||
}
|
||
}
|
||
|
||
}
|