Bild frei drehen



  • Hallo leute,

    ich sitze jetzt seit längerem vor dem Visual Studio 2008 C++ und komme einfach nicht klar damit.
    Ich habe bisher mit Visual Basic gearbeitet. C Programmieren kann ich auch und deshalb versuche ich momentan an C++ Projekt auf die Beine zu stellen, habe aber mit dem Visual Studio 2008 C++ noch keine Erfahrung.

    Folgendes Problem: Ich möchte ein Bild frei drehen. Habe viel gegoogelt und auch viel dazu gefunden. Doch leider gibt es irgendwie die ganzen sachen bei mir nicht die da so verwendet werden.
    In einem Beispiel hängts schon an der Initialisierung:

    Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;

    Da gibt es unter Graphics z.B. überhaupt kein TBitmap.

    Andere Beispiele nutzen das bitplg, welches es im Visual Studio nicht zu geben scheint.
    Wiedrum andere zeichnen mit der canvas Funktion, welche es bei mir auch nicht gibt...

    Dann habe ich es mit GDI+ nach dieser Anleitung probiert:
    http://supercomputingblog.com/graphics/getting-started-with-gdi-in-visual-studio/
    ...Funktioniert ebenfalls nicht. Da findet er die ganzen gdiplus-Funktionen nicht...

    Kann mir eventuell jemand ein Beispiel nennen wie man ein Bild drehen kann und auch dazu erklären was man da vielleicht vorher einrichten muss?

    Als Projekt am Anfang wähle ich immer Windows Forms-Anwendung aus. Wie muss ich dann weiter machen, dass ein Bild mit 10 Grad drehung auf dem Formular dargestellt wird?



  • http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
    Wenn du C++ programmieren willst, dann programmier C++ und nicht C++/CLI. WinForms hat nichts mit C++ zu tun und C++/CLI ist nicht für die Entwicklung von GUI-Anwendungen gedacht. Wenn du das willst, dann nimm C#.
    TBitmap sieht mir nach VCL aus, das ist eine GUI Bibliothek die du nur bei Borland bekommst. Mit .NET oder WinForms hat das überhaupt noch weniger zu tun als alles andre...



  • Vielen Dank für die schnelle Antwort.
    Das löst schonmal viele Fragezeichen bei mir auf, warum mir dieses Visual C++ irgendwie total unsymphatisch erscheint.

    C# scheint aber auch nicht ganz Zielführend für das zu sein was ich vor habe. Vielleicht beschreibe ich es kurz:

    Es geht darum eine Roboter-Simulation zu schreiben. Dabei soll in einem Formular eine Umgebung mit dem Roboter abgebildet sein. Der roboter bewegt sich dann auf der Karte in der Simulation.

    Das ganze habe ich schonmal unter Visual Basic 6.0 entwickelt. Das Problem ist dann nur: Wenn man dann in der Simulation eine Funktion schreibt, dann mann man die von der Basic-Sprache erst in die C-Sprache übersetzen damit man sie auf den Roboter laden kann.
    Deshalb war nun die Idee die Simulation einfach in C++ zu entwickeln um eben den Transfer von Funktionen zu vereinfachen.

    Da lag Visual Studio 2008 C++ halt auf der Hand.
    Oder nicht? Was würdet ihr da empfehlen zu nehmen?



  • Also wie es scheint, sind die Beispiele die ich gefunden habe für Borland C++

    Ich denke dann werde ich das ganze in Borland C++ schreiben, wenn einen das Visual Studio so im Stich lässt...

    Vielen Dank trotzdem für die Mühe.

    Gruß



  • Umsteiger schrieb:

    Was würdet ihr da empfehlen zu nehmen?

    C# für das UI und C++ für die Kommunikation mit dem Roboter.



  • Umsteiger schrieb:

    Dann habe ich es mit GDI+ nach dieser Anleitung probiert:
    http://supercomputingblog.com/graphics/getting-started-with-gdi-in-visual-studio/
    ...Funktioniert ebenfalls nicht. Da findet er die ganzen gdiplus-Funktionen nicht...

    Habs aus Neugier mal ausprobiert und es läuft wie erwartet.
    Die Stelle an der GdiplusStartup() aufgerufen werden soll habe ich allerdings in den WM_CREATE
    case verschoben. Kann es sein, das du vergessen hattest mit gdiplus.lib zu linken ?

    Alternativ:

    #pragma comment(lib, "gdiplus.lib")
    

    Der Rest sieht bei mir so aus ..

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    	HDC hdc;
        ULONG_PTR           gdiplusToken=NULL;
    	GdiplusStartupInput gdiplusStartupInput;
    
    	switch (message)
    	{
    	case WM_CREATE:
    		// initialize GDI+
    		GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    		break;
    	case WM_PAINT:
    		hdc = BeginPaint(hWnd, &ps);
    		// TODO: Hier den Zeichnungscode hinzufügen.
    		MyOnPaint(hdc);
    		EndPaint(hWnd, &ps);
    		break;
    	case WM_DESTROY:
    		GdiplusShutdown(gdiplusToken);
    		PostQuitMessage(0);
    		break;
    	case WM_COMMAND:
    		wmId    = LOWORD(wParam);
    		...
    

    Wenn du 3D-Animationen vorhast wäre evtl. auch C++ mit OpenGL eine gute Wahl.

    Achso mit MFC hat beides nichts zu tun - das geht mit der Express-Version wohl auch nicht ...



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten