2D Frameworks, wie SDL, SFML usw. haben in einer solchen Anwendung diverse Nachteile, gegenüber regulärer Oberflächenentwicklung. Man ist meist auf ein Fenster beschränkt, man kann dieses ggf. nicht skalieren, Vollbildmodus ist bis auf wenige Ausnahmen ohnehin unwichtig und man muss erst eine entsprechende Bibliothek einbinden, um halbwegs angenehm damit entwickeln zu können (verglichen mit Bibliotheken für GUIs). Es ist nicht unwahrscheinlich, dass auch die Performance schlechter sein könnte, da das Fenster häufig neu gezeichnet wird, ohne dass dies sein müsste, aber das hängt sehr stark von der jeweiligen Bibliothek ab.
Der Sinn hinter entpsrechenden Bibliotheken für diese 2D Frameworks ist meist das Erstellen von UIs für ein Spiel oder andere Anwendungen mit vielen visuellen Elementen (bspw. Simulationen).
Mit der Windowsprogrammierung (also der Programmierung für das Betriebssystem Microsoft Windows) musst du dich nur dann beschäftigen, wenn du auch die WinAPI ansprichst, um deine Fenster und Elemente zu erzeugen. Verwendest du eine der Bibliotheken, die bereits aufgeführt wurden, handhaben diese die Systemspeziefischen Eigenheiten und stellen eine plattformübergreifend einheitliche Schnittstelle zur Verfügung.
Qt, wxWidgets und GTK+ wurden ja bereits genannt. (Eine Empfehlung kann ich mangels Erfahrung nicht geben, würde ich mir aber eine der Bibliotheken ansehen, würde ich wohl mit Qt anfangen.) Da das wohl eine C++ Übung sein soll und dein Fokus wohl nicht auf der Fertigstellung des Programms liegt, wäre ein Umstieg dafür auf C# wohl nicht empfehlenswert. Solltest du die Anwendung möglichst schnell fertig bekommen wollen, wäre C# wahrscheinlich etwas angenehmer in der Handhabung (ich würde aber nicht Windows Forms, sondern eher WPF empfehlen), aber das nur so nebenbei.