[C++] Interfejs graficzny

Witam

 

Otóż napisałem już swój, krótki programik w jezyku c++ jednak chcę aby on jakoś lepiej wyglądał niż jedynie brzydka, konsolowa wersja. Otóż pytanie, jak storzyć mu interfejs graficzny? Jakie polecacie biblioteki i jak z nimi pracować?

Zainteresuj się Qt5

Do tworzenia interfejsu graficznego stosuje się środowiska programistyczne typu RAD, czyli takie w których masz gotowe elementy wizualne jak przyciski, menu, suwaki, które za pomocą myszy umieszczasz na formularzu, który jest swoistym placem budowy interfejsu twojego programu, ale nie tylko. Środowiska typu RAD dla C++ to przede wszystkim środowiska płatne, ale możesz użyć darmowych z ograniczeniami jak Visual C++ 2010 Express czy Visual Studio Express 2013 for Windows. Jedna sprawa C++ stosowany do pisania programów pod konsole to tak zwany czysty C++, czyli w pierwotnej formie, jeśi używasz jakiegś środowiska programistycznego typu Rad (jak Visual C++ Express itd) to zastosowany tam język C++ szczególnie przy tworzeniu aplikacji pod Windows to już zupełnie inny C++, którego będziesz musiał się od nowa nauczyć. Podobie jest w wypadku innych firm. Jeśli użyjesz płatnego środowiska do programowania w C++ typu RAD firmy ZZZ to użyty w niej C++ będzie inny niż w firmie FFF. Oczywiście we wszystkich środowiskach typu Rad możesz programować bez zmian w czystym C++ pod konsolę, ale nie pod Windows. Obecnie dobrym środowiskiem i darmowym typu RAD jest Lazarus Ide, ale on używa języka ObjectPascal a nie C++. Jeśli chcesz programować przy użyciu czystego C++, to można użyć środowisk ale nie typu RAD (bez możliwości szybkiego tworzenia interfejsu programu) jak CodeBlocks, Bloodshed Dev czy innych.

Właśnie używam już CodeBlocks. Jak w nim wygląda tworzenie interfejsu?

Dość prostym rozwiązaniem jest zainteresowanie się biblioteką WinAPI, nie jest to może jakaś super nowość, ale jest dość prosta i pozwala na pisanie aplikacji okienkowych pod Windowsem(WPF) . Jak kiedyś bawiłem się w C++ bardzo pomocny był ten kurs:

WPF to nie WinAPI, to raz, a dwa to przechwytywanie komunikatów w switchach, switche w switchach i jeszcze w switchach jest wg ciebie proste? Oczopląsu można dostać.

 

Zainteresuj się troszkę wyższym poziomem programowania GUI np. QT wyżej wspomniane bo WinAPI to za przeproszeniem “kurwicy” dostaniesz.

Z z tym WPFem się rozpędziłem troszeczke…

Wspomniane tutaj WinAPI czyli po prostu Windows API to niskopoziomowe api będące de facto targetem bardzie dla programistów C, niż C++, ale nie w tym rzecz. Niskopoziomowe, głównie z tego względu, że większość popularnych libów i frameworków vide Qt, wxWidgets, które mniej lub bardziej, ale enkapsulują wywołania natywnych windowsowych metod.

 

Generalnie ujął bym to w ten sposób:

WinAPI - bilbioteka C, czasochłonna i bogata w naleciałości z przeszłości, ale de facto nadal jedyny sposób aby napisać w stu procentach natywną, windowsową aplikację.

MFC (Microsoft Foundation Classess) - wrapper (opakowanie) WinAPI w C++, czyli obiektowa wersja winapi. Wniosek mniej wiecej jak powyższy.

 

Tutaj stawiamy przerwę i bierzemy głęboki wdech.

Qt - przenośna bilbioteka, której core stanowi zestaw klas do budowy GUI i nie tylko. Generalnie jest to cały, ogromny framework do budowy aplikacji. Nie są to natywne aplikacje windowsowe, ale bilbioteka jest bardzo wydajna, posiada bardzo czytelną dokumentację. Samo budowanie aplikacji odbywa się poprzez dodatkowy MOC (meta object compiler), którego celem jest rozwinięcię C++ o kilka dodatkowych fukncjonalności, ale te odstępstwa nie są jakieś dramatyczne i ich ogarnięcie wymaga kilku dodatkowych minut uwagi. Ogromną zaletą jest przenośność na chociażby świat *nixów i czyli linuksy i OSX’y.

Wadą jest to, że gołym kompilatorem nie skompilujesz aplikacji napisanej przy użyciu Qt, ale myślę, że w stosunku do tego, co Qt oferuje i jak bardzo uprzyjemnia pracę z C++, można ten punkt w ogóle pominąć. Szczerze polecam to rozwiązanie jako najlepsze z tutaj wymienionych.

 

wxWidgets - bilbioteka GUI (nie framework jak Qt). Prosta, schludna i szybka biblioteka GUI. W wydaniu na windowsa bardziej przypomina MFC jako wrapper na winapi (korzysta z natywnych windowsowych kontrolek w przeciwieństwie do qt). Temu akurat wystarcza czysty C++ kompilator, więc niestety, ale pewne rozwiazania trzeba osiągnać za pomocą mnogich makrodefinicji, ale nadal nie jest źle.

 

Osobiście polecam dwa ostatnie rozwiazania z naciskiem na pierwsze z nch.