如何通过使用Windows窗体(C ++ / CLI)变换图形来修复System.ArgumentException?

时间:2019-04-28 15:48:37

标签: .net winforms visual-studio-2017 c++-cli command-line-interface

我是C ++的初学者,为了学习图形编程,我们使用WindowsForms(VisualStudio 2017)学习C ++ / CLI。

我的任务是通过按钮“ zeichnen”绘制火车,并将火车变换到窗户上的其他位置。

我本来想甚至改变轮子的位置,但此刻我什至无法改变位置,让火车在屏幕x,y(50,0)上向前行驶。

我确实从Windows看过.net Framework-Api。 在那里,我找到了方法:System.Drawing.Graphics.SetClip(Rectangle rect); 我以为我会找出旧图并进行翻译,但只会出现错误的参数错误。

如果我尝试使用方法转换,也是如此。

当然可以将第一个图形复制到新方法中。但是我无法想象这无论如何都是好的编程。即使我更改参数。 但是我确实尝试了……结果是我得到了旧的Train-Image,而在此之上是新的Train-Image x + 50。这真的不是我尝试做的。

我不知道如何更改图形的位置。

MyForm.h-> gernereatet WindowsForm 命名空间Zeichnen

    public ref class MyForm : public System::Windows::Forms::Form{
    private: 
    System::Windows::Forms::Button^  btnZeichnen;
    System::Windows::Forms::Button^  btnFahre;
    System::ComponentModel::Container ^components;
    Graphics ^ pg;
private: 
System::Void btnZeichnen_Click(System::Object^  sender, System::EventArgs^  e);
System::Void btnFahre_Click(System::Object^  sender, System::EventArgs^  e);
};
/*everything else is automatic generated*/
}

MyForm.cpp(我的代码) 第一个按钮,没有问题:

   System::Void Zeichnen::MyForm::btnZeichnen_Click(System::Object ^ sender, System::EventArgs ^ e){
pg = CreateGraphics();
/*Create Variables and Draw all parts of the Train e.g.*/
    pg->FillRectangle(sb_dkgray, x_btop, y_btop, w_btop, h_btop);
delete pg;
}

第二个按钮-有问题:

    System::Void Zeichnen::MyForm::btnFahre_Click(System::Object^  sender, System::EventArgs^  e) {
pg->SetClip(Rectangle(0,0,1000,550));
int dx = 50;
pg->TranslateClip(dx, 0);
     }

我通过点击“ Zeichnen”按钮来坐火车。但是我通过按钮“ fahre”得到失败

JIT-Debuggen的信息 安斯特尔(Anstelle)死于Dialogfelds发现,西恩(Sie am Ende)死者梅登(Meldung)。

    ************** Ausnahmetext **************
    System.ArgumentException: Ungültiger Parameter.
       bei System.Drawing.Graphics.SetClip(Rectangle rect, CombineMode combineMode)
       bei System.Drawing.Graphics.SetClip(Rectangle rect)
       bei Zeichnen.MyForm.btnFahre_Click(Object sender, EventArgs e) in         c:\users\michi\dropbox\alfatraining\c++\cli\04-        26\zeichnen\zeichnen\myform.cpp:Zeile 118.
       bei System.Windows.Forms.Control.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       bei System.Windows.Forms.Control.WndProc(Message& m)
       bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
       bei System.Windows.Forms.Button.WndProc(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

我确实知道我做错了。我不知何故需要保存最后一个职位。并且比我将需要改变位置。但是我尝试的一切只会让我更加沮丧。既然每次都是一样的失败。有重载方法。但是说有错误的参数还是不够的。

我不明白为什么调用它:System.Drawing.Graphics.SetClip(Rectangle rect,CombineMode CombineMode),即使我想调用:System.Drawing.Graphics.SetClip(Rectangle rect)

我什至尝试制作一个矩阵,但即使这样也没有正确的地方。目前,我只是感到沮丧,因为最近两天我一直试图自己找到正确的答案……但是看来我找不到任何可以像我的程序一样工作或想要做类似事情的教程。

0 个答案:

没有答案