2009-04-15 29 views
5

Gần đây tôi đã bắt đầu học MFC (sách Prosise), và tôi cảm thấy rất khó. Nhưng phần khó nhất dường như là tạo giao diện người dùng. Có vẻ như bạn phải biết vị trí các điều khiển của bạn nên được định vị tại (không phải trường hợp với các ứng dụng dựa trên hộp thoại).Tạo GUI với MFC

Làm thế nào để bạn vượt qua điều đó? Trước tiên bạn có vẽ ứng dụng trong Photoshop, sau đó đo khoảng cách ở đó không?

Và ngoài ra, có bất kỳ nhà thiết kế GUI nào cho nó không? (để giảm đau). Tôi thích nó rất nhiều, đặc biệt là vì tốc độ và thực tế nó không đòi hỏi một khuôn khổ lớn.

Bất cứ ai lập trình MFC thường xuyên đều được chào đón để cho tôi lời khuyên về cách làm việc tốt tại lập trình MFC.

Trả lời

0

Rất nhiều thời gian bạn sử dụng trình chỉnh sửa tài nguyên hộp thoại và ràng buộc dữ liệu để tạo giao diện người dùng trong MFC (bạn có thể có chế độ xem dựa trên hộp thoại). Nếu bạn không tạo ra một hộp thoại, sau đó thường bạn có một số thuật toán trong tâm trí cho bố trí của các điều khiển, và thực hiện điều đó.

2

MFC là một nỗi đau, IMO. Trừ khi bạn cần lập trình với C++, tôi khuyên bạn nên sử dụng C# với WPF hoặc WinForms. Nó dễ dàng hơn nhiều. Và nếu bạn cần sử dụng C++ thì có các giải pháp GUI tốt hơn, như Qt.

+0

Nếu bạn cần C++ vì có rất nhiều libs và muốn một gui tôi khuyên bạn nên wxWidgets hoặc QT. Tôi sẽ khuyên bạn nên đi con đường MFC. – schoetbi

1

Một ứng dụng MFC điển hình có cửa sổ khung cấp cao nhất và một số cửa sổ xem con và thanh điều khiển. Không có thứ nào trong số những thứ đó thường cần được định vị theo cách thủ công, mặc dù đôi khi bạn cần xác định kích thước ban đầu trong khi xây dựng. Bạn có thể sử dụng trình soạn thảo hộp thoại của Visual Studio để bố trí hộp thoại. Rất hiếm khi phải viết mã định vị theo cách thủ công.

4

Tôi phải đồng ý rằng đối với công việc MFC, trình chỉnh sửa tài nguyên là một phần của Visual studio có lẽ là cách dễ nhất để bắt đầu với MFC. Bạn chỉ có thể đặt điều khiển của bạn ra trên một hộp thoại và kéo dài chúng đến tỷ lệ thích hợp. Đối với bản ghi, MFC một khuôn khổ chỉ là nó đi kèm đi kèm như một phần của Windows.

Nếu bạn muốn điều khiển đổi kích thước, bạn sẽ cần phải thêm một số mã để xử lý các thay đổi kích cỡ (ON_SIZE tôi nghĩ là) thư được phân phối khi hộp thoại được thay đổi kích thước. Đây không phải là quá xấu miễn là bạn không muốn thay đổi kích thước/định vị lại quá nhiều thứ cùng một lúc.

Cá nhân, tôi khuyên bạn nên tránh MFC có lợi cho WxWidgets. Có một số chương trình bố cục GUI tuyệt vời như wxDesigner có thể giúp tạo các hộp thoại và trang thuộc tính có thể định lại khá dễ dàng.

1

Bạn đang sử dụng phiên bản Visual C++ nào? Tất cả các phiên bản tôi đã sử dụng đi kèm với một công cụ đồ họa khá tốt để đặt và chỉnh sửa các thành phần GUI. Tôi thường thêm các thành phần cơ bản yêu cầu viết một số mã cho họ để xem cách họ nhìn và sau đó di chuyển mọi thứ xung quanh cố gắng bố trí khác nhau trước khi tôi giải quyết trên một và thêm các bộ phận thành phần khác.

Mặc dù tôi đã viết và tắt các ứng dụng MFC trong nhiều năm và khá giống như vậy, tôi phải đồng ý với người đăng ký đã hỏi tại sao bạn đang bận học tập. Những ngày này bạn có lẽ sẽ tốt hơn khi sử dụng thời gian của bạn để học C# hoặc Java.

+0

+1 từ tôi. Đó là cách tôi sử dụng để hack cùng các ứng dụng MFC. Bây giờ, tôi sử dụng wxPython nó không mất thời gian ở tất cả để có được một chương trình làm việc chạy và sử dụng được! –

4

MFC rất đơn giản khi bạn tiếp tục với giới hạn về những gì nó phải làm (Doc/View cơ bản, hộp thoại, không có giao diện người dùng kẹo lạ mắt ...); ngay sau khi bạn cần phải mở rộng hành vi cơ bản, nó trở nên khó khăn hơn và khó hơn để làm.

1

Ứng dụng MFC có thể trở nên khá cồng kềnh (ví dụ:kích thước thực thi ứng dụng lớn, dấu chân bộ nhớ và/hoặc yêu cầu các tệp DLL thời gian chạy được sử dụng cùng với ứng dụng của bạn). Nếu bạn đang tập trung vào C++, tôi khuyên bạn nên xem xét WTL thay vào đó (được sử dụng để trở thành một thư viện của Microsoft nhưng bây giờ là trên SourceForge). Đó là một thay thế rất nhẹ (sử dụng mẫu) để MFC với cú pháp tương tự.

Gần đây tôi đã bỏ qua C++ cho Java cho hầu hết các ứng dụng của tôi bao gồm GUI, và tôi không có kế hoạch quay trở lại.

+6

MFC bị cồng kềnh và Java không phải là :))? –

+3

Tôi không thể chịu được giao diện của GUI java. Chúng thật là kinh khủng. Tôi không biết ai thích java ui trên UI gốc – Tim

+1

@Tim Java hỗ trợ nhiều giao diện, ví dụ: cửa sổ gốc và vân vân. Vì vậy, Java là tốt nhất, và thực sự là rất dễ dàng để làm việc với, và có bố trí rất mạnh mẽ mà xử lý các vấn đề thay đổi kích thước và ... –

1

Nếu bạn muốn tính năng bố cục của hộp thoại trong ứng dụng MFC lấy được lớp CView của bạn từ CFormView. Điều này có vẻ giống như giao diện dựa trên "biểu mẫu" của .NET WinForms, VB6, v.v ...

Điều này có thể được thực hiện thông qua trình hướng dẫn ứng dụng mới, trong phần thả xuống Lớp cơ sở đã tạo (tôi đã kiểm tra điều này trên VS 2008).

Bạn cũng có thể chỉ cần tạo một ứng dụng dựa trên hộp thoại - dường như bạn đã quen thuộc.

Có một số lớp khác có nguồn gốc từ CView cung cấp các cách khác để thiết kế "chế độ xem" của ứng dụng của bạn. Sử dụng CView mặc định làm lớp cơ sở của bạn (như trình thủ thuật tạo theo mặc định) giả sử bạn sẽ xử lý bằng tay tạo "điều khiển" và/hoặc vẽ màn hình. Vẽ tranh (thực sự vẽ màn hình với GDI) là một nhà phát triển Win32 cũ quen thuộc nhưng thường không bao giờ được thực hiện trong các khung công tác hiện đại hơn.

2

Tôi đã sử dụng MFC trong hơn 10 năm. Nó không phải là xấu và tôi sẽ giới thiệu nó trên khuôn khổ không phải của Microsoft miễn là bạn không quan tâm đến việc chạy ứng dụng của bạn trên các nền tảng khác. Nếu bạn muốn ứng dụng của bạn trông giống như một hộp thoại, sau đó sử dụng CFormView như Aardvark đề xuất và đặt nó ra với trình soạn thảo hộp thoại. Trong rất nhiều chương trình MFC của tôi, các khung nhìn là CListViews hoặc một trình thám hiểm như ứng dụng với một cây bên trái và một ListView ở bên phải. Một cái khác mà chúng tôi sử dụng rất nhiều là một CView chung với một điều khiển tab và một trang thuộc tính. Trong đó, bạn không có vấn đề về bố trí. Bạn chỉ cần tạo các điều khiển và định vị chúng ở một khoảng cách được xác định trước từ các cạnh. Prosise là rất tốt. Đó là những gì đã cho tôi đi trên MFC. Kiểm tra CodeProject.com cho một số lớp mở rộng MFC, ví dụ, thay đổi kích thước hộp thoại và trang thuộc tính. Brian

+0

Thậm chí 6 năm sau, tôi nói rằng MFC vẫn tốt hơn sau đó QT nếu bạn muốn có một ứng dụng cửa sổ hoặc nếu bạn có nhân lực để thiết kế GUI gốc cho mỗi nền tảng. – Lothar

-1

Tìm QT trong mục đích GUI. Tôi chắc chắn bạn sẽ thích nó ..........

+0

Bạn có thể vui lòng cho chúng tôi biết điều gì đó về lợi thế không? –

0

Bạn có thể nhận được kết quả xuất sắc khi sử dụng MFC mà không cần phải thêm bất kỳ khung công tác nào khác. Đây là một số example của một tiện ích mà tôi đã tạo.