2012-06-19 59 views
9

Thông thường có sử dụng Hộp thoại làm Windows chính không? Vì vậy, không cần đăng ký bất kỳ lớp người dùng nào thông qua RegisterClassEx? Tôi có thể làm mọi thứ tôi làm thông qua CreateWindow() không? Tại sao tôi nên tạo các điều khiển như các nút, hộp chỉnh sửa, vv thông qua CreateWindow() thay vì chỉ tạo một Hộp thoại và sử dụng nó làm cửa sổ chính?Hộp thoại làm cửa sổ chính?

Tôi cũng muốn biết sự khác biệt chính giữa hộp thoại và cửa sổ và tại sao lại sử dụng điểm đầu tiên thay vì hộp thoại thứ hai.

Cảm ơn

+0

Bạn trông hơi bối rối ... 5 câu hỏi này có thể cần câu trả lời rất dài. Bắt đầu đọc http://msdn.microsoft.com/en-us/library/windows/desktop/ms632597(v=vs.85).aspx để biết tổng quan về cửa sổ và nhận xét của http://msdn.microsoft này .com/vi-us/library/windows/desktop/ms645452 (v = vs.85) .aspx để hiểu hộp thoại là gì. –

+0

Câu trả lời ngắn gọn (Tôi chắc rằng ai đó sẽ cung cấp câu trả lời mở rộng hơn): 1) có, rất nhiều; 2) không có bạn cần phải đăng ký cửa sổ bạn sẽ sử dụng; 3) không (nếu với tất cả mọi thứ bạn có nghĩa là bạn sẽ không cần bất kỳ mã nào khác), có nếu bạn có nghĩa là bạn không thực sự cần phải tạo một tài nguyên thoại; 4) thường bạn không phải làm điều đó và nếu nó xảy ra _usually_ đó là bởi vì bạn không biết nội dung thực sự của một cửa sổ tại thời gian biên dịch; 5) một hộp thoại (nhiều hơn hoặc ít hơn) LÀ một cửa sổ, chỉ là phương thức. –

+0

2 xu của tôi: Nếu bạn sử dụng Visual Basic, Delphi, hoặc .NET bạn sẽ không cần phải lo lắng về những thứ cấp thấp như thế và bạn sẽ có nhiều, hiệu quả hơn nhiều. Một cửa sổ được abstracted là một container hình chữ nhật với các thuộc tính. –

Trả lời

4

Thông thường có sử dụng Hộp thoại làm Windows chính không?

Có, điều này khá phổ biến.

Vì vậy, không đăng ký bất kỳ lớp người dùng nào qua RegisterClassEx?

Hộp thoại thường là lớp cửa sổ được xác định trước, vì vậy thường không cần đăng ký.

Tôi cũng muốn biết sự khác biệt chính giữa hộp thoại và cửa sổ và tại sao lại sử dụng một hộp thoại đầu tiên thay vì hộp thoại thứ hai.

Vâng, hai sự khác biệt lớn là bạn không thể thay đổi kích thước hộp thoại và không có nút thu nhỏ hoặc tối đa hóa (theo mặc định, nhưng có giải pháp cho việc này). Hãy ghi nhớ tên, hộp thoại. Nói cách khác, chúng được sử dụng để có một hộp thoại với người dùng (nhận đầu vào và hiển thị tin nhắn cho người dùng). Trong một nghĩa nào đó, chúng giống như bất kỳ cửa sổ nào khác, bên dưới CreateWindowxx, vv được gọi, vv Tuy nhiên, chúng là một số cửa sổ được xác định trước có thể được thực hiện nhanh chóng và có những hạn chế đối với những gì bạn có thể làm với chúng.

Ngoài ra, một hộp thoại sử dụng một thủ tục thoại chứ không phải là một thủ tục cửa sổ, mà hiện một số chế biến mặc định cho bạn, chẳng hạn như khởi tạo một số điều khiển, vv

+0

Trình hướng dẫn tự động tạo mã để giảm thiểu hộp thoại và không khó để thêm kích thước và tối đa hóa - xem http://stackoverflow.com/a/5739620/5987 –

+0

@MarkRansom: Đúng vậy. Tôi đã suy nghĩ nhiều hơn về "thiết lập mặc định", nhưng có lẽ có cách giải quyết cho hầu như bất cứ điều gì kể từ khi hộp thoại là "chỉ cần cửa sổ". –

2

Có, một ứng dụng có thể dựa trên hộp thoại. Thậm chí có một Wizard cho rằng nếu your'e sử dụng VisualStudio và MFC.

Trong VS2010, tạo dự án mới> Ứng dụng MFC. Trong "Loại ứng dụng", chọn Dialog Based. Nhấp qua phần còn lại của Trình hướng dẫn và bạn sẽ thoát khỏi cuộc đua.

Các ứng dụng dựa trên hộp thoại đơn giản hơn nhiều, kiến ​​trúc hơn các thiết kế khác như Tài liệu/Chế độ xem. Như vậy, những điều đơn giản dễ dàng hơn nhiều để "đập nhanh", nhưng những hạn chế của thiết kế trở nên rõ ràng khi bạn cố gắng làm những điều phức tạp hơn. Bạn có thể sẽ sao chép phần lớn kiến ​​trúc Doc/View trong ứng dụng dựa trên hộp thoại của mình để xây dựng một ứng dụng dựa trên hộp thoại chất lượng sản xuất. Trong trường hợp đó, bạn có thực sự tự cứu mình không?

+0

Ông có thể không sử dụng MFC. –

+0

Điểm công bằng, được chỉnh sửa. –

2

Một hộp thoại là một loại cửa sổ cũng giống như tất cả các các nút điều khiển khác nhau như nút thực sự chỉ là cửa sổ. Bạn có thể nghĩ về một hộp thoại như là một loại cửa sổ với rất nhiều chức năng bổ sung để hỗ trợ các loại hộp thoại được sử dụng cho.

Có hai loại hộp thoại, phương thức hiển thị và mong bạn sử dụng chúng, sau đó loại bỏ chúng và không theo phương thức hiển thị nhưng không nắm bắt và giữ tiêu điểm đầu vào cho đến khi chúng bị loại bỏ.Bạn có thể thấy hai loại này được sử dụng trong các ứng dụng trong đó hộp thoại phương thức được sử dụng để hiển thị lỗi hoặc yêu cầu người dùng thực hiện một số cài đặt và hành vi không phải là phương thức như một hộp công cụ hiển thị và khi bạn cần. trên nó để làm một cái gì đó và lần khác bạn đang sử dụng một số cửa sổ khác trong ứng dụng.

Thông thường một hộp thoại sẽ không có thanh menu nhưng thay vào đó sẽ có tất cả các điều khiển của nó hiển thị hoặc dễ dàng truy cập qua các tab hoặc một số loại bản trình bày khác. Visual Studio và các IDE khác có các nhà thiết kế hộp thoại để cho phép sắp xếp các điều khiển khác nhau cùng với các trình thuật sĩ để cho phép các điều khiển được gắn với các lớp và các thành viên lớp.

Điều này mang lại sự khác biệt lớn giữa hộp thoại và cửa sổ. Một cửa sổ là một trang trống và làm những việc với trang đòi hỏi nhiều công việc hơn. Một hộp thoại có các công cụ giúp thiết kế dễ dàng tuy nhiên bạn cũng bị hạn chế phần lớn bởi hộp công cụ.

Nếu bạn có một ứng dụng tập trung vào cơ bản cho phép người dùng chỉ định một số cài đặt nhất định và sau đó thực hiện một số tác vụ, một hộp thoại hoạt động khá tốt. Nếu bạn có thứ gì đó yêu cầu tương tác người dùng phức tạp hơn, một cửa sổ ứng dụng làm cơ sở để tất cả các hộp thoại và điều khiển khác của bạn sẽ được quản lý và thao tác sẽ cần thiết hơn.

Các vấn đề liên quan