|
|
|
|
|
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 System.Drawing.Size WorkingArea
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
IntPtr hdc = GetDC(IntPtr.Zero);
|
|
|
|
|
|
System.Drawing.Size size = new System.Drawing.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 System.Drawing.Size DESKTOP
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
IntPtr hdc = GetDC(IntPtr.Zero);
|
|
|
|
|
|
System.Drawing.Size size = new System.Drawing.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
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|