Как исправить System.ArgumentException путем преобразования графики с помощью Windows Forms (C ++ / CLI)? - PullRequest
0 голосов
/ 28 апреля 2019

Я новичок в C ++, и для изучения графического программирования мы изучаем C ++ / CLI с WindowsForms (VisualStudio 2017).

Моя задача - нарисовать поезд нажатием кнопки "zeichnen" ипревратить поезд в другую позицию на окнах.

Мне бы хотелось даже изменить положение колес, но в настоящий момент я не могу даже изменить положение, чтобы поезд мог двигаться вперед на экране x, y (50,0).

Я посмотрел в .net Framework-Api из Windows.Там я нашел метод: System.Drawing.Graphics.SetClip (прямоугольник прямоугольник);Я думал, что вышлю старый чертеж и переведу его, но получаю только неправильные ошибки параметров.

То же самое, если я пытаюсь использовать метод Transform.

Конечно, я мог бы скопироватьпервый рисунок для нового метода.Но я не могу себе представить, что это никак не хорошее программирование.Даже если я изменю параметр.Но я попытался ... в результате я получил старое изображение поезда, а над ним - новое изображение поезда х + 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»

Informations über das Aufrufen von JIT-Debuggen anstelle dieses Dialogfelds finden Sie am Ende dieser 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 combMode), даже если я хочу вызвать: System.Drawing.Graphics.SetClip (Rectangle rect)

Я даже пытался сделать матрицу, но даже это ни к чему не привело.На данный момент я разочарован только тем, что сам пытался найти правильный ответ последние два дня ... но, похоже, я не могу найти учебник, который бы работал где-нибудь, как моя программа, или хотел бы сделать что-то похожее.

...