2008-11-12 4 views
6

Tôi phát triển phần mềm ứng dụng khách phong phú trên Mac OS X và Linux. Tôi muốn chuyển một ứng dụng sang Windows và không phải là người dùng các sản phẩm của Microsoft, tôi không quen thuộc với Windows nói chung.Tôi nên chọn API Windows nào cho ứng dụng khách phong phú?

Điều tôi quen thuộc với:

Trên Mac OS X, tôi có tùy chọn Ca cao và C hoặc Carbon mục tiêu và C/C++. Trên Linux, tôi có tùy chọn GTK + và C/C++ hoặc Qt và C++. Tôi thích Cocoa trên Mac OS X và GTK + trên Linux. Giao diện Builder cho Cocoa và Glade cho GTK + làm cho cuộc sống của tôi dễ dàng. Đó là thú vị để tạo khách hàng phong phú trong các hệ điều hành này.

Lớp lõi của tôi hoặc "mô hình" trong MVC, được viết bằng nền tảng C++. Các lớp giao diện người dùng, hoặc "xem và điều khiển" trong MVC, được viết bằng ngôn ngữ "ưa thích" và GUI API cho mỗi nền tảng tương ứng.

C++ là ngôn ngữ tôi quen thuộc nhất. Tôi sử dụng thư viện Tăng cường rộng rãi. Đặc biệt là con trỏ thông minh, chủ đề và thư viện mạng asio. Đối với Unicode, bản địa hóa, vv, tôi sử dụng các thành phần quốc tế cho Unicode (ICU).

Câu hỏi 1: Ngôn ngữ "ưa thích" và GUI API cho nền tảng Windows tương thích với các lớp mô hình đa nền tảng của tôi là gì?

Câu hỏi 2: Làm cách nào để truy cập vào các lớp mô hình đa nền tảng của tôi?

Ví dụ: trên Mac OS X, tôi truy cập các lớp mô hình của mình thông qua các lớp trình điều khiển. Các lớp điều khiển được thực hiện trong Objective-C++. Objective-C++ là sự kết hợp của C++ và Objective-C. Xem đối tượng "nói chuyện với" đối tượng điều khiển trong Objective-C trong khi bộ điều khiển đối tượng "nói chuyện với" đối tượng mô hình trong C++.

Trên Linux, tất cả các lớp được triển khai trong C++.

Trả lời

1

GTK + hoạt động tốt trên Windows. Nếu bạn đã quen thuộc với nó, đó là những gì tôi muốn sử dụng. Mặc dù hiệu năng có thể không phù hợp với các lib của Windows UI gốc, như MFC, nó đủ tốt trừ khi ứng dụng của bạn thực sự phụ thuộc vào hiệu năng. Một ví dụ lớn về việc sử dụng GTK + cho tất cả các nền tảng là Pidgin.

Không thể trả lời câu hỏi thứ hai của bạn mà không nhìn thấy một số mã, nhưng tôi không thấy lý do tại sao nó khác với phương pháp tiếp cận mô hình-bộ điều khiển trên các nền tảng khác.

+0

đúng, không có cách nào để viết mã chỉ dành cho cửa sổ khi bạn có thể giữ cho nền tảng chéo. tất nhiên, tôi muốn Qt hơn GTK + (không có hiệu suất trên không, hoặc GUI mistmatch!), nhưng câu hỏi được đề cập đã thích GTK +, vì vậy chỉ cần giữ nó. – Javier

1

Windows Presentation Foundation (WPF) là tiêu chuẩn ứng dụng phong phú mới của Microsoft dành cho Windows. C++ của bạn sẽ chuyển sang nó, nhưng hầu hết mọi người phát triển C# chống lại nó.

2

Nếu bạn có thể nhận được C++ để biên dịch với chuỗi công cụ Visual Studio (thay vì gcc hoặc mingw), tôi sẽ khuyên bạn nên tạo một .lib và sau đó liên kết nó với một hội đồng C++/CLI nơi bạn trưng ra API được quản lý vào thư viện của bạn.

Sau đó, bạn có thể sử dụng C# và WinForms API hoặc WPF và có một cửa sổ cực kỳ phong phú và bản địa tìm kiếm ứng dụng. Công việc này khá đơn giản và nếu bạn sẵn sàng viết lại GUI, nó sẽ có kết quả tốt nhất và dễ triển khai nhất.

Một lưu ý là nếu bạn cần nó để làm việc trên các máy mà .NET có thể không có mặt - nếu có, tôi sẽ dính vào .NET 2.0 (và WinForms). Bạn cũng nên cài đặt và cài đặt nó. Nếu bạn sẵn sàng cài đặt .NET 3.5 nếu không có thì hãy vào WPF.

4

Không thực sự là ngôn ngữ và API "ưa thích" trên Windows, giống như nhiều lựa chọn hơn. Những người rõ ràng là các cuộc gọi Win32 thô trực tiếp đến hệ điều hành (thực sự chỉ là các cuộc gọi C), hoặc một sự trừu tượng mỏng trên đó (ví dụ WTL, Thư viện Mẫu Windows, C++), hoặc trừu tượng dày hơn (ví dụ MFC) C++).

Microsoft những ngày này đang đẩy WPF khá khó khăn, nhưng đó là một phần của thế giới .NET được quản lý. Bạn có thể viết C++ trong đó, vì vậy bạn có thể có thể chuyển ứng dụng của bạn, nhưng tôi hy vọng nó sẽ là nỗ lực đáng kể. Nếu bạn đang sử dụng GTK + hoặc QT trên Linux, điều hiển nhiên sẽ là xem xét sử dụng cả hai thứ trên Windows, vì cả hai đều tồn tại - theo cách đó bạn có thể giữ cho các phiên bản Linux và Windows gần như giống hệt nhau. Chúng không phải là sự lựa chọn tự nhiên cho một ứng dụng chỉ dành cho Windows, vì chúng không phải ban đầu từ thế giới Windows, nhưng với nền của bạn chúng sẽ có nhiều ý nghĩa. Bạn có thể cần phải dành chút thời gian để chỉnh sửa chúng để có được giao diện ứng dụng Windows và cảm nhận vừa phải, nhưng điều đó sẽ được bù đắp nhiều hơn do thiếu sự cần thiết phải viết một lớp trình bày hoàn toàn mới.

4

Qt hoạt động tốt với cửa sổ. Hơn nữa nó là nền tảng độc lập.

0

Tôi đang hướng tới Quỹ thuyết trình Windows. Tôi cho rằng đó là câu trả lời của Microsoft đối với Cocoa trên Mac OS X là "nhằm mục đích thống nhất một số dịch vụ ứng dụng: giao diện người dùng, bản vẽ 2D và 3D, tài liệu cố định và thích nghi, kiểu chữ tiên tiến, đồ họa vector, đồ họa raster, hoạt hình, ràng buộc dữ liệu , Âm thanh và video." Đó là âm thanh như Cocoa với tôi :-)

Tôi cho rằng việc thực hiện sẽ tương tự thực hiện của tôi Mac OS X:

  • mẫu: cross-platform C++ lớp
  • Xem: WPF và C#
  • Bộ điều khiển: C++/CLI hoặc một cái gì đó khác

Trong khi đó, trên Mac OS X, các lớp xem được thực hiện trong Objective-C trong khi các lớp điều khiển được thực hiện Mục tiêu-C++. Xem đối tượng "nói chuyện với" đối tượng điều khiển trong Objective-C trong khi bộ điều khiển đối tượng "nói chuyện với" đối tượng mô hình trong C++.

Là C++/CLI trên Windows như Objective-C++ trên Mac OS X hoặc là C# classes Tôi xác định không thể truy cập trong C++/CLI?

Cách "đúng" hoặc "ưa thích" để truy cập các lớp C++ từ ngôn ngữ .Net được quản lý là gì?

+0

Bạn sẽ xây dựng khung nhìn C# thành một assembly và gọi ra một assembly khác được xây dựng trong C++/CLI. Bạn có thể xây dựng các lớp C++ đa nền tảng của bạn vào assembly C++/CLI theo một số cách, ví dụ bằng cách liên kết các tệp đối tượng như một thư viện gốc tĩnh hoặc bằng cách biên dịch mã nguồn thành mã được quản lý. – tragomaskhalos