여기에 대한 답은 대부분 여기에 달려 있으며 조언을 듣는 것이 좋습니다. 그러나이 이야기에는 조금 더 많은 것이 있습니다. 하나 또는 다른 것을 덮어 쓰는시기에 대한 구체적인 질문에 대해 조금만 시도해 보겠습니다.
CreateParams();
일반적으로 대부분의 경우 CreateParams()를 재정의해야합니다. Windows 스타일 "서브 클래 싱"을 기억하고 싶다면 기존 컨트롤 클래스를 Petzold의 정액 작업으로 보아서 VCL 컨트롤로 래핑하면 CreateParams에서이 작업을 수행 할 수 있습니다. 설정되는 스타일 비트 및 기타 다양한 매개 변수를 제어 할 수도 있습니다. 우리는 "하위 클래스"를 만드는 과정을 매우 쉽게 만들었습니다. CreateParams() 메서드에서 CreateSubClass()를 호출하면됩니다. TCheckBox 또는 TButton과 같은 예를 보려면 핵심 VCL 컨트롤을 참조하십시오.
CreateWnd();
일단 창 핸들을 만들면 좀 더 많은 작업을해야 할 경우이 설정을 덮어 쓰게됩니다. 예를 들어, 어떤 종류의 목록, 트리 또는 기타 컨트롤이 포스트 생성 구성을 필요로한다면 여기에서 그렇게 할 것입니다. 상속 된 CreateWnd를 호출하고 반환하면 (뭔가 잘못되었을 때 예외를 발생시킬 수 있기 때문에 CreateWnd에서 반환하면 유효한 핸들이 있음을 알 수 있습니다.) 추가 마법을 적용하면됩니다. 일반적인 시나리오는 인스턴스 TStrings 목록에 캐시 된 데이터를 가져와 실제로 기본 창 컨트롤로 이동하는 것입니다. TListBox는 이것의 전형적인 예입니다.
CreateWindowHandle();
나는이 일에 내 기억을 새로 고쳐야 만했지만, 이것은 거의 보지 못했다. VCL 내부의 몇몇 경우에는 TEdit 및 TMemo와 같은 일부 컨트롤에서 특정 Windows 버전 및 로케일 이상한 점을 해결하는 데 사용되는 것으로 보입니다. 또 다른 명확한 사례는 TCustomForm 자체에 있습니다. 이 경우 이전 MDI (다중 문서 인터페이스) 모델을 지원할 수 있습니다. 이 경우 일반 CreateWindowEx() API를 사용하여 MDI 자식을 만들 수 없으므로 핸들을 실제로 만들려면 MDI 부모 프레임에 메시지를 보내야합니다. 그래서이 메소드를 덮어 쓰는 유일한 이유는 핸들을 생성하는 실제 프로세스가 오래된 Try-and-True CreateWindowEx()와 완전히 다른 방법을 통해 수행된다면입니다.
나는 당신의 질문은 단지 창조 과정에 관해 묻는 것이었지만, 어떤 경우에는 파괴 파괴와 때로는 레크리에이션을 둘러싼 "부두"둘 모두에 대해 무시되는 상응하는 방법이 있음을 알았습니다. 그러나 이것들은 별도로 다루어야하는 다른 주제들입니다 :-).
좋은 답변입니다. 원래 질문이 VCL을 언급 한 이후로 답변을 완성하기위한 멋진 웹 리소스를 추가하고 싶었습니다. http://edn.embarcadero.com/article/20569 – Ampere