Cho đến nay hầu hết các câu trả lời ở đây là khá nhiều trên nhãn hiệu và bạn sẽ làm tốt để chú ý lời khuyên của họ. Tuy nhiên, có một chút nữa cho câu chuyện này. Đối với câu hỏi cụ thể của bạn về khi bạn sẽ ghi đè lên một hoặc khác, tôi sẽ thử và tóm lại mọi thứ một chút.
CreateParams();
Nói chung, phần lớn thời gian bạn thực sự cần làm là ghi đè CreateParams(). Nếu tất cả những gì bạn muốn làm là subclass (nhớ kiểu Windows "subclassing?" Xem công việc của Petzold seminal trên Windows programming) một lớp điều khiển hiện có và bọc nó trong một điều khiển VCL, bạn làm điều này từ CreateParams. Bạn cũng có thể kiểm soát các bit kiểu được thiết lập và các tham số khác nhau. Chúng tôi đã thực hiện quá trình tạo "phân lớp" rất dễ dàng. Chỉ cần gọi CreateSubClass() từ phương thức CreateParams() của bạn. Xem các điều khiển VCL lõi cho một ví dụ như TCheckBox hoặc TButton.
CreateWnd();
Bạn sẽ ghi đè điều này nếu bạn cần làm nhiều hơn một chút với xử lý cửa sổ sau khi được tạo. Ví dụ, nếu bạn có một điều khiển đó là một số loại danh sách, cây, hoặc nếu không yêu cầu cấu hình sau khi tạo, bạn sẽ làm điều đó ở đây. Gọi CreateWnd kế thừa, và khi nó trả về (bạn biết bạn có một handle hợp lệ nếu bạn quay trở lại từ CreateWnd bởi vì nó sẽ tăng một ngoại lệ nếu có gì đó không ổn), chỉ cần áp dụng phép thuật phụ của bạn. Một tình huống phổ biến là lấy dữ liệu được lưu trữ trong một danh sách TStrings instance và thực sự di chuyển nó vào trong điều khiển cửa sổ nằm bên dưới. TListBox là một ví dụ điển hình về điều này.
CreateWindowHandle();
Tôi phải làm mới bộ nhớ của mình trên bộ nhớ này, nhưng có vẻ như đây là một trong những điều hiếm khi, nếu có, bị ghi đè. Trong một vài trường hợp bên trong VCL, nó xuất hiện rằng nó được sử dụng để làm việc xung quanh phiên bản Windows cụ thể và các vùng địa phương kỳ lạ với một số điều khiển, chẳng hạn như TEdit và TMemo. Trường hợp rõ ràng hơn khác trong chính TCustomForm. Trong trường hợp này, nó có hỗ trợ mô hình MDI cũ (giao diện tài liệu mutli). Trong trường hợp này, không thể tạo các MDI cho trẻ em bằng cách sử dụng API CreateWindowEx() bình thường, bạn phải gửi một thông điệp đến khung cha mẹ MDI để thực sự tạo ra các xử lý. Vì vậy, lý do duy nhất để vượt qua phương thức này là nếu quá trình thực tế của việc tạo ra xử lý được thực hiện thông qua một phương tiện hoàn toàn khác với phương thức CreateWindowEx() đã thử nghiệm và thực sự cũ.
Tôi đã nhận thấy rằng câu hỏi của bạn chỉ đơn thuần là hỏi về quy trình tạo, nhưng có các phương pháp tương ứng bị ghi đè trong một số trường hợp cho cả việc xử lý sự phá hủy và "voodoo" đôi khi bao quanh xử lý giải trí. Nhưng đây là những chủ đề khác cần được bảo vệ riêng :-).
Nguồn
2009-02-24 21:44:54
Câu trả lời hay. Chỉ muốn thêm một tài nguyên web đẹp để hoàn thành câu trả lời vì câu hỏi ban đầu đề cập đến VCL: http://edn.embarcadero.com/article/20569 – Ampere