You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

394 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Interop;
namespace GeoSigmaViewer
{
public class DrawCursors
{
//public static Cursor Pencil
//{
// get
// {
// return CursorResourceLoader.LoadEmbeddedCursor(Resource1.Pencil);
// }
//}
public static bool IsHightDpi()
{
if (PrimaryScreen.ScaleX >= 1.9 || PrimaryScreen.ScaleY >= 1.9)
{
return true;
}
return false;
}
public static Cursor Default
{
get
{
//return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curDefault);
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curDefault);
}
}
public static Cursor Select
{
get
{
if (IsHightDpi())
{
// return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curSelectSmall);
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curSelect);
}
else
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curSelect);
//return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curSelectSmall);
}
}
}
public static Cursor ViewWindow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.viewWindow);
}
}
public static Cursor Pan
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curPan);
}
}
public static Cursor Pan1
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curPan1);
}
}
public static Cursor Line
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.Line);
}
}
public static Cursor Ellipse
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.Ellipse);
}
}
public static Cursor Rectangle
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.Rectangle);
}
}
public static Cursor PolyHandle
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.PolyHandle);
}
}
public static Cursor Pencil
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.Pencil);
}
}
public static Cursor CurveDraw
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curCurve);
}
}
public static Cursor AddHandle
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curAddHandle);
}
}
public static Cursor CurveMovePoint
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curMoveHandle);
}
}
public static Cursor CurveMove
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curMove4Way);
}
}
public static Cursor TrackNWSE
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.trcknwse);
}
}
public static Cursor TrackNESW
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.trcknesw);
}
}
public static Cursor TrackNS
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.trckns);
}
}
public static Cursor TrackWE
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.trckwe);
}
}
public static Cursor Track4Way
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.trck4way);
}
}
public static Cursor Move4Way
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curMove4Way);
}
}
public static Cursor Copy4Way
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curCopy4Way);
}
}
public static Cursor Rotate
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curRotate);
}
}
public static Cursor ShearHor
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curShearHor);
}
}
public static Cursor ShearVert
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curShearVert);
}
}
public static Cursor HArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curHArrow);
}
}
public static Cursor VArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curVArrow);
}
}
public static Cursor LBArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curLBArrow);
}
}
public static Cursor RBArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curRBArrow);
}
}
public static Cursor HShearArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curShearHor);
}
}
public static Cursor VShearArrow
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curShearVert);
}
}
public static Cursor Range
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curRange);
}
}
public static Cursor BreakCurve
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curBreakCurve);
}
}
public static Cursor SelectElement
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curSelectElement);
}
}
public static Cursor Delete
{
get
{
return CursorResourceLoader.LoadEmbeddedCursor(Resource1.curDelete);
}
}
}
public class PrimaryScreen
{
#region Win32 API
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr ptr);
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(
IntPtr hdc, // handle to DC
int nIndex // index of capability
);
[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
#endregion
#region DeviceCaps常量
const int HORZRES = 8;
const int VERTRES = 10;
const int LOGPIXELSX = 88;
const int LOGPIXELSY = 90;
const int DESKTOPVERTRES = 117;
const int DESKTOPHORZRES = 118;
#endregion
#region 属性
/// <summary>
/// Gets 获取屏幕分辨率当前物理大小.
/// </summary>
public static Size WorkingArea
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
Size size = new Size();
size.Width = GetDeviceCaps(hdc, HORZRES);
size.Height = GetDeviceCaps(hdc, VERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return size;
}
}
/// <summary>
/// Gets 当前系统DPI_X 大小 一般为96.
/// </summary>
public static int DpiX
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
ReleaseDC(IntPtr.Zero, hdc);
return dpiX;
}
}
/// <summary>
/// Gets 当前系统DPI_Y 大小 一般为96.
/// </summary>
public static int DpiY
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int dpiX = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(IntPtr.Zero, hdc);
return dpiX;
}
}
/// <summary>
/// Gets 真实设置的桌面分辨率大小.
/// </summary>
public static Size DESKTOP
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
Size size = new Size();
size.Width = GetDeviceCaps(hdc, DESKTOPHORZRES);
size.Height = GetDeviceCaps(hdc, DESKTOPVERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return size;
}
}
/// <summary>
/// Gets 宽度缩放百分比.
/// </summary>
public static float ScaleX
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
int t = GetDeviceCaps(hdc, DESKTOPHORZRES);
int d = GetDeviceCaps(hdc, HORZRES);
float scaleX = (float)GetDeviceCaps(hdc, DESKTOPHORZRES) / (float)GetDeviceCaps(hdc, HORZRES);
ReleaseDC(IntPtr.Zero, hdc);
return scaleX;
}
}
/// <summary>
/// Gets 获取高度缩放百分比.
/// </summary>
public static float ScaleY
{
get
{
IntPtr hdc = GetDC(IntPtr.Zero);
float scaleY = (float)(float)GetDeviceCaps(hdc, DESKTOPVERTRES) / (float)GetDeviceCaps(hdc, VERTRES);
ReleaseDC(IntPtr.Zero, hdc);
return scaleY;
}
}
#endregion
}
}