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