2011-10-29 4 views
1

다음 사람을 C#과 동등한 것으로 번역 할 수 있습니까? mapPicture는 GDI 코드의 그림 개체이지만 C#의 패널입니다. 다음과 같이 내가 코드를 수행 한 ,C# + GDI 코드와 동일한 코드

원래 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); 
+0

(http://www.pinvoke.net/default.aspx/gdi32/SetMapMode.html에서 복사)

? 여러분이이 질문에 답한 것처럼 코드 검토를 요구하는 것처럼 보입니다. –

+0

문제가있는 부분에 대해 좀 더 자세히 설명해 주시겠습니까? 작동하지 않는 것, 나타나지 않는 것 등 – TJB

+0

아직 실제로 테스트하지는 않았지만 C#에서 SetMapMode 및 SetViewportOrg와 동일한 기능을 확인하고 싶습니다. 내가 제대로했는지 확신 할 수 없어! – nixgadgets

답변

3

지도 모드를 설정하지 않고, 당신은 잘 문제가 발생할 수 있습니다 좌표와 함께. 그것은 원래의 코드에 이유가있었습니다. 필자는 Pllvoke를 사용하여 Win32 SetMapMode 함수를 직접 호출해야 할 필요가 있으므로 직접 C#과 동일한 기능이 있다고 생각하지 않습니다.

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; 
+0

당신이 이것을 할 수 있을지 전혀 몰랐습니다. 이 굉장 팁에 대한 감사합니다 – nixgadgets

+0

내가 가진이 원시 코드를 사용하여 시도하고 "InvalidOperationException"오류가 발생하는 것 같습니다. 명백하게 뭔가 잘못하고있는 것. gdi의 DllImport 관련 문서가 있습니까? – nixgadgets