[DllImport("gdi32.dll")]
static extern int SetMapMode(IntPtr hdc, int fnMapMode);
//Mapping Modes
static int MM_TEXT = 1;
static int MM_LOMETRIC = 2;
static int MM_HIMETRIC = 3;
static int MM_LOENGLISH = 4;
static int MM_HIENGLISH = 5;
static int MM_TWIPS = 6;
static int MM_ISOTROPIC = 7;
static int MM_ANISOTROPIC = 8;
//Minimum and Maximum Mapping Mode values
static int MM_MIN = MM_TEXT;
static int MM_MAX = MM_ANISOTROPIC;
static int MM_MAX_FIXEDSCALE = MM_TWIPS;
None.
Please add some!
using System;
using System.Runtime.InteropServices; // For calling Windows API functions.
partial class Form1
{
[DllImport("gdi32.dll")]
static extern int SetMapMode(IntPtr hDC, int nMapMode);
[DllImport("gdi32.dll")]
static extern bool SetViewportOrgEx(IntPtr hDC, int x, int y, Point[] prevPoint);
[DllImport("gdi32.dll")]
static extern bool SetWindowOrgEx(IntPtr hDC, int x, int y, Point[] prevPoint);
[DllImport("gdi32.dll")]
static extern bool SetViewportExtEx(IntPtr hDC, int nExtentX, int nExtentY, Size[] prevSize);
[DllImport("gdi32.dll")]
static extern bool SetWindowExtEx(IntPtr hDC, int nExtentX, int nExtentY, Size[] prevSize);
[DllImport("Gdi32.dll")]
public static extern int CreatePen(int nPenStyle, int nWidth, int nColor);
[DllImport("Gdi32.dll")]
public static extern int GetStockObject(int nStockBrush);
[DllImport("Gdi32.dll")]
public static extern int SelectObject(IntPtr hDC, int hGdiObject);
[DllImport("Gdi32.dll")]
public static extern int DeleteObject(int hBitmap);
[DllImport("Gdi32.dll")]
public static extern int MoveToEx(IntPtr hDC, int x, int y, int nPreviousPoint);
[DllImport("Gdi32.dll")]
public static extern int LineTo(IntPtr hDC, int x, int y);
[DllImport("Gdi32.dll")]
public static extern int Rectangle(IntPtr hDC, int nLeft, int nTop, int nRight, int nBottom);
[DllImport("Gdi32.dll")]
public static extern bool DPtoLP(IntPtr hdc, [In, Out] Point[] lpPoints, int nCount);
// Mapping modes.
const int MM_TEXT = 1;
const int MM_LOMETRIC = 2;
const int MM_HIMETRIC = 3;
const int MM_LOENGLISH = 4;
const int MM_HIENGLISH = 5;
const int MM_TWIPS = 6;
const int MM_ISOTROPIC = 7;
const int MM_ANISOTROPIC = 8;
// Gdi stock objects.
const int WHITE_BRUSH = 0;
const int LTGRAY_BRUSH = 1;
const int GRAY_BRUSH = 2;
const int DKGRAY_BRUSH = 3;
const int BLACK_BRUSH = 4;
const int NULL_BRUSH = 5;
const int HOLLOW_BRUSH = NULL_BRUSH;
const int WHITE_PEN = 6;
const int BLACK_PEN = 7;
const int NULL_PEN = 8;
const int OEM_FIXED_FONT = 10;
const int ANSI_FIXED_FONT = 11;
const int ANSI_VAR_FONT = 12;
const int SYSTEM_FONT = 13;
const int DEVICE_DEFAULT_FONT = 14;
const int DEFAULT_PALETTE = 15;
const int SYSTEM_FIXED_FONT = 16;
// Pen styles.
const int PS_SOLID = 0;
const int PS_DASH = 1;
const int PS_DOT = 2;
const int PS_DASHDOT = 3;
const int PS_DASHDOTDOT = 4;
const int PS_NULL = 5;
const int PS_INSIDEFRAME = 6;
const int PS_USERSTYLE = 7;
const int PS_ALTERNATE = 8;
const int PS_STYLE_MASK = 0x0000000F;
const int PS_ENDCAP_ROUND = 0x00000000;
const int PS_ENDCAP_SQUARE = 0x00000100;
const int PS_ENDCAP_FLAT = 0x00000200;
const int PS_ENDCAP_MASK = 0x00000F00;
const int PS_JOIN_ROUND = 0x00000000;
const int PS_JOIN_BEVEL = 0x00001000;
const int PS_JOIN_MITER = 0x00002000;
const int PS_JOIN_MASK = 0x0000F000;
const int PS_COSMETIC = 0x00000000;
const int PS_GEOMETRIC = 0x00010000;
const int PS_TYPE_MASK = 0x000F0000;
...
...
...
}
// ____________ Place the following code inside an event handler: ____________________________
Graphics dc = this.CreateGraphics();
Debug.Assert(dc != null);
GraphicsContainer graphicsContainer = dc.BeginContainer();
IntPtr hDC = dc.GetHdc();
Debug.Assert(hDC != null);
Point[] point = new Point[1];
Size[] size = new Size[1];
double fAspectRatio = (double)(this.ClientRectangle.Bottom) / (double)(this.ClientRectangle.Right);
SetMapMode(hDC, MM_ANISOTROPIC);
SetViewportOrgEx(hDC,
0,
this.ClientRectangle.Bottom, // So that (0,0) is at the bottom left.
point);
SetWindowOrgEx(hDC,
0,
0,
point);
SetViewportExtEx(hDC,
this.ClientRectangle.Right,
-this.ClientRectangle.Bottom, // Negative so that y gets positive as you go up.
size);
SetWindowExtEx(hDC,
1000,
(int)(1000 * fAspectRatio),
size);
// Create a red pen and select it into the device context.
int hPen = CreatePen(PS_SOLID, 1, 0x000000FF);
int hOldPen = SelectObject(hDC, hPen);
// Draw a line.
MoveToEx(hDC, 10, 25, 0);
LineTo(hDC, 990, (int)(990 * fAspectRatio));
// Create a null brush and select it into the device context.
int hBrush = GetStockObject(NULL_BRUSH);
int hOldBrush = SelectObject(hDC, hBrush);
// Draw a rectangle.
Rectangle(hDC, 10, 25, 990, (int)(990 * fAspectRatio));
// Cleanup.
SelectObject(hDC, hOldPen);
SelectObject(hDC, hOldBrush);
DeleteObject(hPen);
dc.ReleaseHdc();
dc.EndContainer(graphicsContainer);
Do you know one? Please contribute it!