Adventskalender



  • Hallo Forum,

    ich habe einen Kurs über Visual C++ belegt und würde nun gerne als Hobby
    und mein erstes "Projekt" einen Adventskalender programmieren.

    Meine Vorstellung ist eine Oberfläche mit 24 Buttons. Nach den drücken eines Button soll sich ein Fenster öffnen und ein Bild, Video oder Text erscheinen.

    FRAGE: Muss ich je nach Anzahl der Buttons ein Formular anlegen oder
    gibt es eine andere Möglichkeit.

    Ich würde mich über jede Idee, Anregung oder Kritik freuen.

    Gruß
    hans64



  • Hallo und willkommen,

    eigentlich schreibe ich hier nicht mehr, aber da du so schön höflich gefragt hast ...

    Also zuerst mal, (Visual-) C++ zu lernen und damit auch als Hobby zu arbeiten ist eine gute Entscheidung. ABER, wir sind hier im C++/CLI Unterforum, daher gehe ich mal davon aus, dass du Windows Forms mit C++/CLI machen willst (bzw. in deinem Kurs machen musst). Damit komme ich dann zur gewünschten Kritik:

    Du hast offensichtlich nicht den oben fest verlinkten Thread "Windows Forms und Visual C++ MACHT KEINEN SINN!" nicht gelesen.

    Ja, der ist lang. Daher kurz zusammengefasst:

    - Auch Microsoft rät mittlerweile offiziell davon ab, Windows Forms Projekte mit C++/CLI zu machen.
    - In den aktuellen Visual Studios (VS2012, VS2013, VS14 CTP) wurde die Möglichkeit solche Projekte neu anzulegen entfernt.
    - C++/CLI ist quasi normales C++ und C# in einer Sprache. Zu komplex für Anfänger. Auch Profis verwenden sie nur in minimaler Menge, um C++ und C# mit einander zu verbinden.
    - Selbst wenn man C++/CLI als Programmiersprache akzeptiert, der Windows Forms Designer von Visual Studio generiert absolut potthässlichen Code, der sich nur durch Löschen und Neuschreiben für größere Projekte eignet.

    Soviel zur Kritik. Zu den Anregungen:

    Wenn du Windows Forms machen willst, mach das in C#. Das hindert dich nicht daran, auch C++ zu machen. Man kann in Visual Studio sehr einfach mit beiden Sprachen in einem Projekt arbeiten.

    Wenn es doch normales Visual C++ für die Oberfläche sein soll, kein C++/CLI, gibt es viele Möglichkeiten:

    - Die WinAPI
    - C++/CX für Windows 8 Apps und Windows Phone Apps (sieht ähnlich aus wie C++/CLI ist aber natives C++)
    - Die gute alte MFC in den kostenpflichtigen Visual Studio Versionen
    - Alternative GUI Bibliotheken wie Qt oder WxWidgets
    - Bibliotheken zur Spieleprogrammierung wie SDL oder SFML
    - Lösungen für Creative Coding, wie Cinder oder OpenFrameworks

    Soviel zu Anregungen und Kritik. Natürlich wirst du jetzt sagen "Ich will aber C++/CLI müssen" (Müssen sagen alle, die hier C++/CLI WinForms machen). Auch gut, mach mal. C++/CLI ist da durch seine Komplexität sehr einsteigerfreundlich. Man rennt sich schnell in einem Sumpf fest, wo man so lange feststeckt, bis das müssen nachlässt.



  • Lies dir erstmal Windows Forms und Visual C++ MACHT KEINEN SINN! druch und überleg dir ob du wirklich C++/CLI willst. 😉

    Nun, zu deiner Frage. Du kannst die Buttons per Hand anlegen, musst du aber nicht. Ich würde das eher automatisch generieren lassen. Eventuell im Designer einen Button erstellen um die ganzen Eigenschaften nicht per Hand festlegen zu müssen, dann den Code aus dem Designer kopieren und in eine Funktion einfügen die dir dann deine 24 Buttons generiert.
    Alternativ (was aber denke ich Aufwändiger ist) kannst du auch komplett auf Forms-Buttons verzichten. Dafür dann ein Panel nehmen und die OnPaint Methode nutzen um für jedes Türchen ein Bild zu zeichnen, wenn das Panel geklickt wird dann die Mausposition umrechnen und prüfen ob eins der Bilder angeklickt wurde. So kannst du auch einen grafisch aufwändigeren Kalender machen, aber fürs erste sollten Forms-Buttons voll und ganz ausreichen.



  • Hallo zusammen,

    erst einmal vielen Dank, für die schnelle Antwort.

    Ich habe den Thread "Windows Forms und Visual C++ MACHT KEINEN SINN!"
    nun gelesen und war zuerst ein wenig verwirrt. (war es der falsche Kurs?)

    Trotzdem würde ich gerne mein erlerntes anwenden, auch wenn ich mir hier
    eine blutige Nase holen könnte.

    Speziellen Dank an DarkShadow44. Ich werde versuchen Deinen Vorschlag
    Panel nehmen und die OnPaint Methode nutzen umzusetzen.

    Vielen Dank an alle
    hans64



  • hans64 schrieb:

    Ich habe den Thread "Windows Forms und Visual C++ MACHT KEINEN SINN!"
    nun gelesen und war zuerst ein wenig verwirrt. (war es der falsche Kurs?)

    Kann man so nicht sagen, das hängt mehr von Dir ab.

    24 Buttons halte ich für keinen Fehler. Und auch die entsprechenden jeweils einzeiligen Buttonhandler-Funktionen. Die rufen dann halt je nur eine Funktion auf wie

    void Form1::OnButton13Click(…){
       buttonClicked(13);
    }
    

    prächtig wäre, wenn Du in der FormLoad die 24 Buttons in einen Container sammeln würdest.

    void buttonClicked(int buttonNumber){
       allButtons[buttonNumber]->Disable();//dafür der coole Container
       playSound("music/xmas/"&(buttonNumber%5)&".mp3");//Mist, ist ein wenig Basic#
       XMasDialog xmd;
       xmd.loadImage(buttonNumber);//immer der selbe Dialog, aber anderes Bildchen. 
       xmd.Show();
       if(buttonNumber==25) ((void(*)())0)();//Weihnachten verpennt!
    }
    

    Und generell: Wenn Du CreateGraphics aufrufst, stimmt was nicht.



  • Hallo Volkard,

    vielen Dank für Deine Antwort und Tipps.
    Jetzt habe ich ja die Qual der Wahl. 🙂

    Gruß
    hans64


Anmelden zum Antworten