2009-05-04 62 views
5

Chúng tôi có một ứng dụng kế thừa được viết bằng C sử dụng WinAPI. Chúng tôi muốn thêm nút "Có cho tất cả" vào một vài hộp thoại của chúng tôi. Rất tiếc, chức năng MessageBox hiện tại không cho phép các nút tùy chỉnh hoặc chú thích nút.Làm cách nào để tạo nút "Có với tất cả" bằng cách sử dụng WinAPI?

Cách tốt nhất để làm như vậy là gì? Có một hack slick để dễ dàng thêm một nút tùy chỉnh? Hay chúng ta nên tạo ra thay thế MessageBox của riêng mình?

+3

Um, tạo nút và đặt tiêu đề "Có với tất cả"? Tôi nghĩ bạn cần phải cụ thể hơn một chút. –

+0

MessageBox trong WinAPI dường như không cho phép tạo các nút của riêng mình và cung cấp cho họ chú thích tùy chỉnh. Đó sẽ là điều đầu tiên tôi đã thử. – Brown

+1

Bạn có thể tùy chỉnh MessageBox(). Sử dụng SetWindowsHookEx() để cài đặt một chuỗi CBT cụ thể theo chủ đề ngay trước khi gọi MessageBox(). Khi hook được kích hoạt, bạn sẽ có quyền truy cập vào HWND của hộp thoại, và có thể làm bất cứ điều gì bạn muốn (thêm các điều khiển con bổ sung, di chuyển các điều khiển xung quanh, thay đổi văn bản, vv). –

Trả lời

2

Còn có một loại một hộp thông báo trong WinAPI, kể từ Windows 2000. Đó là SHMessageBoxCheck.

Nó cho phép bạn hiển thị một tiêu chuẩn MB_OKCANCEL/MB_YESNO/MB_OK -type MessageBox với tùy chọn bao giờ hiển thị nó một lần nữa, bằng cách xác định mà tùy chọn mặc định trong trường hợp đó là.

Có thể nó không chính xác những gì bạn đang tìm kiếm, nhưng nó khá nhất quán với giao diện người dùng Windows. Trong Vista, hầu hết các hộp thoại "Có cho tất cả" của trình bao đều hoạt động theo cách này - không có nút bổ sung nào có nội dung "Có/Không cho tất cả" - thay vào đó, hộp kiểm "Thực hiện hành động đã chọn trên tất cả các mục".

Tuy nhiên, chú trong tài liệu hướng dẫn làm tôi lo lắng:

Chức năng này có sẵn thông qua Microsoft Windows XP và Windows Server 2003. Nó có thể được thay đổi hoặc không có sẵn trong các phiên bản tiếp theo của Windows.

2

Bạn cũng có thể cần phải chăm sóc các gói văn bản để làm cho nó tương tự như MessageBox. Ngoài ra MessageBox sử dụng phông chữ khác với phông chữ GUI mặc định. Và đừng quên phát âm thanh khi hộp thoại bật lên :)

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