2011-10-29 14 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

?あなたがこれを尋ねたやり方では、コードレビューを求めているようです。 –

+0

あなたは、あなたが何か問題を抱えているかについて少し具体的になりますか? – TJB

+0

私は実際にはまだテストしていませんが、私が確認したいのは、C#でSetMapModeとSetViewportOrgに相当するものでした。私はそれを正しくしたかどうかわからない! – nixgadgets

答えて

3

マップモードを設定せずに、あなたも問題が発生することがあります座標と一緒に。それは理由のために元のコードにあった。私はC#と同等のものがあるとは思わないので、PInvokeを使ってWin32のSetMapMode関数を直接呼び出す必要があります。 (http://www.pinvoke.net/default.aspx/gdi32/SetMapMode.htmlからコピー)

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