Khi người dùng nhấn phím Enter trong một hộp thoại hai điều có thể xảy ra:
- Hộp thoại có một điều khiển mặc định (xem
CDialog::SetDefID()
). Sau đó, WM_COMMAND có ID của điều khiển này được gửi đến hộp thoại.
- Hộp thoại không có điều khiển mặc định. Sau đó WM_COMMAND với ID = IDOK được gửi đến hộp thoại.
Với tùy chọn đầu tiên, có thể xảy ra điều khiển mặc định có ID bằng IDOK. Sau đó, kết quả sẽ giống nhau trong tùy chọn thứ hai.
Theo mặc định, lớp CDialog
có một handler cho WM_COMMAND(IDOK)
đó là gọi để CDialog::OnOk()
, đó là một hàm ảo, và theo mặc định nó gọi EndDialog(IDOK)
đó đóng hộp thoại.
Vì vậy, nếu bạn muốn tránh hộp thoại bị đóng, hãy thực hiện một trong các thao tác sau.
- Đặt điều khiển mặc định thành khác
IDOK
.
- Đặt trình xử lý cho
WM_COMMAND(IDOK)
không gọi EndDialog()
.
- Ghi đè
CDialog::OnOk()
và không gọi triển khai cơ sở.
Giới thiệu IDCANCEL, nó tương tự nhưng không tương đương SetDefID()
và phím ESC được mã hóa cứng. Vì vậy, để tránh hộp thoại bị đóng:
- Đặt trình xử lý cho
WM_COMMAND(IDCANCEL)
không gọi EndDialog()
.
- Ghi đè
CDialog::OnCancel()
và không gọi triển khai cơ sở.
Cho rằng có hai câu trả lời mà dường như để giải quyết các vấn đề cao bình chọn, tôi không chắc chắn những gì này đã bị đóng không rõ ràng. –
Đó là cách * quá dễ dàng đối với những người có * không có đầu mối * để bỏ phiếu cho các câu hỏi gần như không rõ ràng. – rustyx