2008-08-07 29 views
21

Tôi có kinh nghiệm viết giao diện điều khiển và ứng dụng khách/máy chủ mạng trong C và C++, nhưng tôi biết bên cạnh không có gì về việc sử dụng API trực quan win32, MFC, Qt, wxWidgets, v.v. đâu là nơi tốt để bắt đầu và phương pháp nào nên tôi chuyên về, để tương lai sẵn sàng và mạnh mẽ?Đâu là nơi tốt để bắt đầu lập trình GUI cho các cửa sổ?

Trả lời

43

Đây là một câu hỏi khá rộng, vì các ứng dụng GUI lập trình trong Windows có thể được thực hiện theo nhiều cách.

Có hai phần chính để phát triển bất kỳ ứng dụng GUI: các ngôn ngữAPI/khuôn khổ. Xem xét bạn quan tâm đến việc học cách xây dựng các ứng dụng Windows GUI, ngôn ngữ không thực sự là một điểm tập trung cho bạn. Do đó, bạn nên chọn một ngôn ngữ bạn đã biết và làm việc với một khuôn khổ hoặc API có thể được khai thác bằng ngôn ngữ bạn đã chọn.

Nếu bạn muốn sử dụng C, bạn bị giới hạn khá nhiều đối phó với API Win32, trong trường hợp đó, hãy đọc Petzold hoặc Richter sẽ là những nơi tuyệt vời để bắt đầu. API Win32 có thể khá khó khăn, nhưng cũng rất đáng để học (imho). Có rất nhiều hướng dẫn trên Win32 trên web và luôn có MSDN, với tham chiếu/hướng dẫn đầy đủ về API Win32. Hãy chắc chắn rằng bạn bao gồm không chỉ API, nhưng các khu vực khác như tài nguyên/hộp thoại khi họ đang xây dựng các khối cho ứng dụng Win32 của bạn.

Nếu bạn muốn sử dụng C++, bạn có tất cả các tùy chọn mà bạn có khi sử dụng C cộng với một số tùy chọn khác. Tôi khuyên bạn nên đi với Win32 API trực tiếp, và sau đó chuyển sang một khuôn khổ đã biết như MFC, Qt, wxWindows hoặc GTK để bạn có thể dành ít thời gian làm việc với mã boilerplate và thay vào đó tập trung vào viết logic ứng dụng của bạn. 3 tùy chọn cuối cùng tôi vừa liệt kê có lợi ích bổ sung là nền tảng chéo, vì vậy bạn không phải lo lắng quá nhiều về các vấn đề cụ thể cho nền tảng. Cho rằng bạn đã nói rằng bạn muốn làm việc với Windows, tôi cho rằng bạn muốn tập trung vào điều đó hơn là nền tảng chéo - vì vậy hãy đi với MFC, nhưng dành chút thời gian với API Win32 để làm quen với một số các khái niệm.

Khi giao dịch với MFC và API Win32, bạn nên thử và hiểu rõ thuật ngữ trước khi viết mã. Ví dụ, bạn cần hiểu message pump là gì và cách hoạt động. Bạn cần biết về các khái niệm như "owner-drawn điều khiển" và subclassing. Khi bạn hiểu những điều này (và hơn thế nữa), bạn sẽ thấy dễ dàng hơn khi làm việc với MFC vì nó sử dụng thuật ngữ tương tự trong giao diện lớp của nó (ví dụ: bạn cần biết "dịch thông điệp" nghĩa là gì trước khi bạn có thể hiểu sử dụng PreTranslateMessage).

Bạn cũng có thể sử dụng Managed C++ để viết các ứng dụng .NET GUI, nhưng tôi đã đọc ở một vài nơi mà Managed C++ không thực sự được sử dụng theo cách này. Thay vào đó, nó nên được sử dụng như một cổng vào giữa mã nguồn gốc/không được quản lý và mã được quản lý. Nếu bạn đang sử dụng .NET, tốt nhất bạn nên sử dụng ngôn ngữ .NET như VB.NET hoặc C# để xây dựng GUI của mình.

Vì vậy, nếu bạn sẽ sử dụng .NET, bạn đang có sự lựa chọn của WinForms thư viện, hoặc WPF. Cá nhân tôi cảm thấy rằng bạn sẽ lãng phí thời gian học để xây dựng các ứng dụng WinForms cho rằng WPF được thiết kế để thay thế nó. Theo thời gian, WPF sẽ trở nên phong phú hơn và Winforms rất có thể sẽ chết. WPF có một bộ API phong phú hơn nhiều, và không bị nhiều hạn chế mà Winforms thực hiện. Tuy nhiên, nếu bạn chọn tuyến đường này, bạn sẽ không nghi ngờ gì phải học XAML, là ngôn ngữ đánh dấu để thúc đẩy các ứng dụng WPF. Công nghệ này đang đến tuổi, và có nhiều nơi tuyệt vời để tìm hiểu về nó. Đầu tiên, có các trang web như LearnWPFDrWPF có một số bài viết thực sự tuyệt vời. Thứ hai, có plenty của qualitybooks trên topic.

Vì vậy, để tóm tắt, khi bạn đã chọn ngôn ngữ và công nghệ, đường dẫn thực sự khá dễ dàng. Chỉ cần chọn một hoặc hai cuốn sách, đọc một số blog, nhận được vào một số mẫu mã .. và quan trọng nhất là ... viết mã. Tiếp tục viết, tiếp tục phạm sai lầm và tiếp tục học hỏi từ họ.

Là một lưu ý cuối cùng ...

Nói cách khác, Silverlight. Nếu bạn không muốn đi tuyến đường MS bạn có thể cung cấp cho Adobe Flash/Flex một cái nhìn thấy. Cả Silverlight và Flash/Flex đều xây dựng RIA. Mà tôi nghĩ là nơi chúng tôi đang đứng đầu. Ngày của Office như ứng dụng được đánh số là

Tôi hoàn toàn không đồng ý. Silverlight không giống như WPF. Silverlight là trang web cụ thể và chỉ có một tập hợp con các tính năng của WPF. Cho rằng câu hỏi yêu cầu cho các ứng dụng Windows GUI, Flash/Flex Rich Internet Apps không thực sự là một gợi ý phù hợp. Tôi cũng không đồng ý rằng ngày của các ứng dụng khách hàng phong phú (chẳng hạn như văn phòng) được đánh số.

Tôi hy vọng điều đó sẽ hữu ích. Chúc may mắn :)

+2

Nếu bạn muốn sử dụng API Win32 từ C++, cũng có WTL. Xem http://wtl.sourceforge.net/ –

+0

+1 cho Petzold và Ritcher. –

6

Tôi không biết nếu tôi muốn gọi nó là một nơi tốt để bắt đầu, nhưng nếu bạn muốn sẵn sàng trong tương lai, hãy xem windows presentation foundation được xây dựng hoàn toàn cho mục đích lập trình GUI cho windows

4

Trải nghiệm đầu tiên của tôi viết các ứng dụng GUI đơn giản cho Windows là với C# và Visual Studio. Giao diện xây dựng GUI là một giao dịch kéo và thả đơn giản tạo ra các phương thức khung sườn dựa trên hành động của người dùng tiềm năng. Tôi chỉ làm lập trình khá cơ bản với điều này, nhưng tôi tưởng tượng nó sẽ là một nơi tuyệt vời để bắt đầu tìm hiểu những điều cơ bản và mở rộng thành các khả năng cao cấp hơn khi bạn đi.

0

Đối với các ứng dụng dành cho doanh nghiệp, Windows Forms rất trưởng thành. Nó cung cấp một con đường nhẹ nhàng từ tự động tạo ra rất nhiều cho bạn vào cho phép kiểm soát hạt mịn và lăn của riêng bạn. Có rất nhiều điều khiển của bên thứ ba chất lượng cao và một lượng lớn ví dụ, tài liệu, v.v. Thật khó để chạy vào một vấn đề mà người khác không giải quyết được. Tôi khuyên bạn nên có được một số kiến ​​thức nền tảng về Win32 (ví dụ: Petzold) vì khung WinForms tồn tại trên đầu trang của nó.

Tôi không có kinh nghiệm WPF, nhưng từ các ứng dụng mẫu tôi đã thấy nó trông giống như một lựa chọn tốt cho các ứng dụng có giao diện sẽ được hưởng lợi từ phép ẩn dụ đồ họa. Vì vậy, nếu bạn đang làm một ứng dụng ngân hàng, có lẽ không đáng giá thêm chi phí thiết kế. Nhưng nếu bạn đang làm, nói rằng, một ứng dụng quản lý kho hàng nó có thể được cải thiện bằng cách thả hộp đẹp vào thùng đẹp.

@StephenCox: trả lời sai câu hỏi sai. OP đang hỏi về các ứng dụng máy tính để bàn và hơn thế nữa, WPF! = Silverlight.

0

Để có một điểm khởi đầu đơn giản để có được đầu của bạn xung quanh bản chất "hướng sự kiện" về cơ bản tất cả các khung được tạo xung quanh xem FLTK.

Dưới đây là một số video khởi đầu nhanh chóng Link

Để sử dụng chuyên nghiệp tôi khuyên bạn nên Qt, đắt tiền nhưng thường giá trị của nó trong các tình huống thương mại.

0

Vì bạn đã quen thuộc với C và C++, tôi khuyên bạn nên học cách viết một ứng dụng Windows GUI đơn giản sử dụng cuốn sách của Charles Petzold. Nó sẽ cung cấp cho bạn sự hiểu biết cơ bản về cách Windows hoạt động. Thật hữu ích khi hiểu rằng hầu hết mọi thứ bạn thấy là một cửa sổ (một nút là một cửa sổ chẳng hạn) và các cửa sổ này trả lời các tin nhắn. Tôi sẽ không dành nhiều thời gian vào điều này mặc dù và bạn không nhất thiết cần phải làm điều này đầu tiên nếu bạn sẽ chọn WPF. Tôi chỉ nghĩ rằng tốt để có một sự hiểu biết cơ bản về điều này.

Có một podcast tốt gần đây trên .Net Rocks được gọi là "Kate Gregory Develops in C++ for Vista!" trên đó cô ấy khuyên rằng ai đó bắt đầu ngay bây giờ không nên sử dụng/tìm hiểu MFC (mặc dù nó đã được cập nhật gần đây). Khi bạn chuẩn bị sẵn sàng cho tương lai, bạn cần phải học WPF, nhưng nó vẫn chưa hoàn thành, do đó tùy thuộc vào loại ứng dụng phía máy khách mà bạn muốn tạo, có thể bạn sẽ cần phải tìm hiểu về WinForms. Đa số mọi người không sử dụng WPF, vì vậy đây là thời điểm tốt để bắt đầu học. Tôi nghĩ bạn sẽ thấy dễ dàng hơn khi sử dụng C# để tìm hiểu nó thay vì thực hiện mã được quản lý bằng C++.

1

Tôi sẽ không bao giờ đi xuống Silverlight, Flash/Flex hoặc bất kỳ tuyến đường tương tự nào. Nó trông đẹp, nhưng vấn đề chính là mã của động cơ chạy nó được đóng hoàn toàn và được kiểm soát bởi một công ty duy nhất. Lấy, ví dụ như phiên bản 64bit của cả hai. Nếu một số nền tảng mới xuất hiện, bạn sẽ không thể di chuyển mã hiện tại của mình sang nền tảng đó.

+1

Hộp kín và công ty đơn lẻ không phải là vấn đề gì cả. Bất kể hộp bạn làm việc trong bạn vẫn có nguy cơ không bao giờ có thể chuyển mã của bạn vào nó. FUD không hợp lý không phải là một đối số để tránh Silverlight hoặc Flash. –

3

Có rất nhiều hướng dẫn Win32 trực tuyến:

http://www.zeusedit.com/forum/viewtopic.php?t=1218

Có rất nhiều trình biên dịch để lựa chọn:

http://www.zeusedit.com/forum/viewtopic.php?t=238

Tôi cũng muốn giới thiệu nhận được Borland Win32 SDK tài liệu ở định dạng tệp WinHelp:

http://www.zeusedit.com/forum/viewtopic.php?t=7

Nó chỉ bao gồm các khái niệm cơ bản của Win32, nhưng khi bắt đầu, điều này có thể hữu ích vì nó ít khó khăn hơn và ít cồng kềnh hơn MSDN.