2008-11-12 6 views
6

Rozwijam oprogramowanie dla bogatych klientów na Mac OS X i Linux. Chciałbym przenieść aplikację do systemu Windows i nie być użytkownikiem produktów Microsoft, nie jestem zaznajomiony z systemem Windows.Co wybrać interfejs API systemu Windows dla bogatej aplikacji klienckiej?

Co ja znam:

W systemie Mac OS X, mam możliwość Kakao i Objective C lub węgiel i C/C++. W Linuksie mam opcję GTK + i C/C++ lub Qt i C++. Wolę Cocoa na Mac OS X i GTK + na Linuksie. Generator interfejsów dla kakao i polany dla GTK + ułatwia życie. To fun umożliwia tworzenie bogatych klientów w tych systemach operacyjnych.

Moje główne klasy lub "model" w MVC są napisane w wieloplatformowym C++. Klasy interfejsu użytkownika lub "widok i kontroler" w MVC są napisane w "preferowanym" języku i GUI API dla każdej odpowiedniej platformy.

C++ jest językiem, który najbardziej mi się podobał. Używam obszernie bibliotek Boost. Szczególnie inteligentne wskaźniki, wątki i biblioteki sieciowe Asio. W przypadku Unicode, lokalizacji itp. Używam International Components dla Unicode (ICU).

Pytanie 1: Jaki jest preferowany język i interfejs API GUI dla platformy Windows, która jest zgodna z moimi klasami modeli międzyplatformowych?

Pytanie 2: W jaki sposób uzyskać dostęp do moich klas modeli międzyplatformowych?

Na przykład w systemie Mac OS X uzyskuję dostęp do moich klas modeli za pomocą klas kontrolerów. Klasy kontrolerów są implementowane w Objective-C++. Objective-C++ to połączenie C++ i Objective-C. Zobacz obiekty "rozmawiaj z" obiektami kontrolera w Objective-C, podczas gdy kontroler obiektów "rozmawia" z obiektami modelu w C++.

W systemie Linux wszystkie klasy są zaimplementowane w C++.

Odpowiedz

1

GTK + działa dobrze na Windowsie. Jeśli już się z tym zapoznałeś, to właśnie bym użył. Chociaż wydajność prawdopodobnie nie jest zgodna z macierzystymi bibliotekami UI systemu Windows, takimi jak MFC, jest wystarczająco dobra, chyba że aplikacja jest zależna od wydajności. Jednym z przykładów używania GTK + na wszystkich platformach jest Pidgin.

Nie mogę odpowiedzieć na twoje drugie pytanie bez zobaczenia jakiegoś kodu, ale nie rozumiem, dlaczego byłby on inny niż twój model kontrolujący widok na innych platformach.

+0

racja, nie ma sensu pisać kodu tylko w systemie Windows, kiedy można zachować format krzyżowy. oczywiście wolałbym Qt od GTK + (brak narzutu wydajnościowego, lub mistmatch GUI!), ale wspomniane już pytanie lubiło GTK +, więc po prostu zatrzymaj to. – Javier

1

Windows Presentation Foundation (WPF) to nowy, bogaty w Microsoft standard aplikacji dla systemu Windows. Twoje C++ przeniesie się do niego, ale większość ludzi opracowuje C# przeciwko niemu.

2

Jeśli możesz zmusić C++ do kompilacji przy użyciu toolchaina Visual Studio (zamiast gcc lub mingw), bardzo poleciłabym utworzenie pliku .lib, a następnie połączenie go z zestawem C++/CLI, w którym można wyświetlić zarządzany interfejs API do biblioteki.

Następnie można użyć API C# i WinForms lub WPF i mieć niezwykle bogatą i natywną aplikację do wyświetlania okien. Ta praca jest całkiem prosta i jeśli chcesz przerobić GUI, uzyska najlepszy wynik i będzie najłatwiejszy do wdrożenia.

Jednym z ostrzeżeń jest to, że potrzebujesz go do pracy na maszynach, na których może nie być .NET - jeśli tak, to trzymałbym się .NET 2.0 (i WinForm). Powinieneś również poprosić instalatora, aby to wykrył i zainstalował. Jeśli chcesz zainstalować .NET 3.5, jeśli nie jest obecny, przejdź do WPF.

4

Nie ma naprawdę preferowanego języka i interfejsu API w systemie Windows, bardziej jak wiele opcji do wyboru. Oczywiste to bezpośrednie wywołania Win32 do systemu operacyjnego (tak naprawdę tylko wywołania C) lub cienka abstrakcja (np. WTL, biblioteka szablonów Windows, która jest C++) lub grubsza abstrakcja (np. MFC, również C++).

Microsoft w dzisiejszych czasach przepycha dość ciężki WPF, ale jest to część zarządzanego świata .NET. Możesz napisać w tym języku C++, więc możesz przesłać swoją aplikację, ale spodziewam się, że będzie to duży wysiłek.

Biorąc pod uwagę, że korzystasz z GTK + lub QT na Linuksie, oczywiste jest, aby przyjrzeć się używaniu obu tych systemów w systemie Windows, ponieważ oba istnieją - w ten sposób można utrzymać wersje systemu Linux i Windows niemal identyczne. Nie są one naturalnymi wyborami dla aplikacji tylko dla systemu Windows, ponieważ nie pochodzą ze świata Windows, ale biorąc pod uwagę ich tło, miałyby sens. Być może trzeba będzie poświęcić trochę czasu na ich ulepszenie, aby wygląd i działanie aplikacji Windows były prawidłowe, ale to powinno być zrekompensowane przez brak konieczności pisania zupełnie nowej warstwy prezentacji.

4

Qt działa dobrze z oknami. Co więcej, jest niezależny od platformy.

0

Pochylam się do Windows Presentation Foundation. Przypuszczam, że jest to odpowiedź Microsoftu na Cocoa na Mac OS X, ponieważ "ma na celu ujednolicenie szeregu usług aplikacji: interfejs użytkownika, rysowanie 2D i 3D, dokumenty stałe i adaptacyjne, zaawansowana typografia, grafika wektorowa, grafika rastrowa, animacja, wiązanie danych , dźwięk i wideo." To brzmi jak kakao do mnie :-)

Przypuszczam, że realizacja byłaby podobna do mojej realizacji Mac OS X:

  • modelu: cross-platform klas C++
  • Widok: WPF i C#
  • Kontroler: C++/CLI lub coś innego

Natomiast w systemie Mac OS X klasy widoku są implementowane w Objective-C, a klasy kontrolerów są implementowane Objective-C++. Zobacz obiekty "rozmawiaj z" obiektami kontrolera w Objective-C, podczas gdy kontroler obiektów "rozmawia" z obiektami modelu w C++.

Czy C++/CLI na Windowsie takie jak Objective-C++ na Mac OS X lub C# klasy Definiuję niedostępne w C++/CLI?

Jaki jest "właściwy" lub "preferowany" sposób dostępu do zajęć w C++ z zarządzanego języka .Net?

+0

Można zbudować widok C# w jednym zestawie i wywołać inny zestaw zbudowany w C++/CLI. Można tworzyć wieloplatformowe klasy C++ w zespole C++/CLI na wiele sposobów, np. Łącząc pliki obiektów jako statyczną bibliotekę macierzystą lub kompilując kod źródłowy do kodu zarządzanego. – tragomaskhalos