프로그래밍/MFC

윈도우 클래스

이재만박사 2020. 11. 17. 11:46

모든 윈도우는 윈도우 클래스로부터 만들어진다


윈도우 클래스는 윈도우를 만들기 위한 형틀이며 생성될 윈도우의 여러가지 특징을 모아놓은 구조체이다


CreateWindow 함수는 첫 번째 인수로 전달된 윈도우 클래스로부터 만들고자 하는 윈도우의 특성을 알아내며 윈도우 클래스가 지정한 특성대로 윈도우를 만든다


CreateWindow 함수의 첫 번째 인수 lpszClassName은 지금 만들고자 하는 윈도우가 어떤 윈도우 클래스로부터 생성될 것인가, 즉 어떤 특성을 가지는 윈도우를 만들 것인가를 지정하며 생략할 수 없다


윈도우 클래스는 윈도우 생성에 꼭 필요한 정보가 있기 떄문에 윈도우 클래스 없이 윈도우를 생성하는 것은 불가능하다


button 윈도우 클래스로부터 만들어지는 윈도우는 버튼 컨트롤이 되고 First 윈도우 클래스로부터 만들어지는 윈도우는 First 윈도우가 된다


윈도우 클래스가 지정하는 윈도우의 특성에는 배경색, 커서, 아이콘 등 겉보기 모양을 지정하는 것도 있고 내부 동작들을 지정하는 것도 있는데 이 정보들 중에서 가장 중요한 것은 메시지 처리 방식을 지정하는 WndProc 함수이며 이 함수가 어떻게 작성되어 있는가에 따라 윈도우의 모양과 기능에 고유성이 부여된다


다른 말로 하면 같은 클래스로부터 만들어진 윈도우는 모양과 기능이 동일하다는 ㅁ뜻이다


프로그램 선두에서 WNDCLASS 구조체를 정의하고 RegisterClass 함수로 윈도우 클래스를 등록한 후 윈도우를 생성할 수도 있고, 아니면 "edit"나 "button"과 같이 운영체제에 미리 등록되어 있는 윈도우 클래스로도 윈도우를 생성할 수 있다


프로그램의 메인 윈도우를 만들기 위해서는 반드시 RegisterClass로 윈도우 클래스를 등록하고 CreateWindow로 윈도우를 생성하는 2단계를 거쳐야 한다


2단계로 윈도우 생성과정을 분리함으로써 하나의 윈도우 클래스로부터 여러 개의 똑같은 윈도우를 만들 수 있으며 운영체제가 미리 정해놓은 윈도우 클래스를 공짜로 쓸 수 도 있다


만약 윈도우 클래스라는 개념이 없으면 윈도우를 만들 때마다 배경색, 커서, 아이콘, 메시지 처리함수 등을 일일히 지정해야 할 것이며 CreateWindow 함수로 20개가 넘는 인수를 전달해야 하는데 이는 너무나도 귀찮은 작업이다