Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#相当于C++;GDI代码_C#_C++_Gdi_Equivalent - Fatal编程技术网

C#相当于C++;GDI代码

C#相当于C++;GDI代码,c#,c++,gdi,equivalent,C#,C++,Gdi,Equivalent,有人能帮我把下面的翻译成C#等价物吗。 mapPicture在GDI代码中是一个图片对象,但在C#中是一个面板。 我做了如下代码 原始MFC代码 CDC *dc = mapPicture.GetDC(); CRect maprect; mapPicture.GetClientRect(&maprect); CPen pen,*oldpen; dc->Rectangle(&rect); pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); oldpen

有人能帮我把下面的翻译成C#等价物吗。 mapPicture在GDI代码中是一个图片对象,但在C#中是一个面板。 我做了如下代码

原始MFC代码

CDC *dc = mapPicture.GetDC();
CRect maprect;
mapPicture.GetClientRect(&maprect); 
CPen pen,*oldpen;
dc->Rectangle(&rect);
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
oldpen=dc->SelectObject(&pen);
dc->SetMapMode(MM_LOMETRIC);
CPoint b1=dc->SetViewportOrg(25,rect.Height()-25);
dc->SetTextColor(RGB(0,0,0));
dc->MoveTo(0,0);
dc->LineTo((2*rect.right - 60),0);
dc->MoveTo(0,0);
dc->LineTo(0,2*rect.bottom);
dc->MoveTo((2*rect.right - 60)-15,8);
dc->LineTo((2*rect.right - 60),0);
dc->LineTo((2*rect.right - 60)-15,-8);
dc->SetTextAlign(TA_RIGHT|TA_BOTTOM);
dc->TextOut((2*rect.right - 55),-55,"X");
到目前为止,我已经完成了C代码

myPen = new Pen(Color.Black, 1);
formGraphics = mapPicture.CreateGraphics();
Rectangle rect = mapPicture.ClientRectangle;
formGraphics.PageUnit = GraphicsUnit.Millimeter;
formGraphics.TranslateTransform(25, rect.Height - 25);
formGraphics.DrawLine(myPen, 0, 0, (2 * rect.Right - 60), 0);
formGraphics.DrawLine(myPen, 0, 0, 0, 2 * rect.Bottom);
formGraphics.DrawLine(myPen, (2 * rect.Right - 60) - 15, 8, (2 * rect.Right - 60), 0);
formGraphics.DrawLine(myPen, (2 * rect.Right - 60), 0, (2 * rect.Right - 60) - 15, -8);
SolidBrush drawBrush = new SolidBrush(Color.Black);
Font drawFont = new Font("Microsoft Sans Serif", 9);
formGraphics.DrawString("X", drawFont, drawBrush, (2 * rect.Right - 55), -55);

如果不设置地图模式,很可能会遇到坐标问题。它在原始代码中是有原因的。我不相信有直接的C#等价物,所以您需要考虑使用PInvoke直接调用Win32 SetMapMode函数

(抄自)

C#签名

[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;

你特别喜欢哪一部分?你问这个问题的方式,看起来你只是要求一个代码审查。你能更具体一点你有什么问题吗?它是否不工作,没有显示什么等等。我还没有实际测试过它,但我想确认的是C#中的SetMapMode和SetViewportOrg等价物。不知道我是否做对了!看起来y坐标是向下的而不是向上的。我该如何反映它呢?反求值…你自己有没有试过这样做?我试着用我所拥有的代码使用本机代码,我似乎得到了一个错误“InvalidoOperationException”。显然是做错了什么。是否有关于gdi DllImport的任何文件?