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 属性 /// /// Gets 获取屏幕分辨率当前物理大小. /// 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; } } /// /// Gets 当前系统DPI_X 大小 一般为96. /// public static int DpiX { get { IntPtr hdc = GetDC(IntPtr.Zero); int dpiX = GetDeviceCaps(hdc, LOGPIXELSX); ReleaseDC(IntPtr.Zero, hdc); return dpiX; } } /// /// Gets 当前系统DPI_Y 大小 一般为96. /// public static int DpiY { get { IntPtr hdc = GetDC(IntPtr.Zero); int dpiX = GetDeviceCaps(hdc, LOGPIXELSY); ReleaseDC(IntPtr.Zero, hdc); return dpiX; } } /// /// Gets 真实设置的桌面分辨率大小. /// 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; } } /// /// Gets 宽度缩放百分比. /// 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; } } /// /// Gets 获取高度缩放百分比. /// 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 } }