빌더님이 부러울 뿐입니다.
깊은 감사드립니다.
빌더 님이 쓰신 글 :
: : 알려주신 방법대로 해보니까 잘되는데요. 저도 궁금한게 있습니다.
: :
: : Progman -> SHELLDLL_DefView -> SysListView32
: : WorkerW -> SHELLDLL_DefView -> SysListView32
: :
: : 제가 궁금한 것은 SysListView32 를 패런트로 해주면 왜 윈도우가 바탕화면 윈도우 계층으로
: : 동작할 수 있는가 하는 부분입니다. ListView 윈도우를 패런트로 해주는 것으로 어떻게 바탕화면
: : 윈도우 계층하고 같은 레벨에서 동작하게되는지 이해가 되질 않습니다????
:
:
:
:
: 두분께 부연해서 말씀 드리면....
:
: 바탕화면에 바로가기 아이콘을 생성하고, 익스텐션 모듈들과 연계를 취하는 등...
: 윈도우즈 환경에서 탐색기(explore.exe)는 파일처리, 프로세스 실행 등 다양한 작업을
: 수행하는 쉘(Shell) 역할을 하게 되는데... 내부적으로는 COM(Component Object Model)
: 으로 구현되어 있는 코드의 총체적인 집합체라고 볼수 있습니다.
:
: 외연적으로 볼때... 우리는 탐색기(explore.exe)를 실행할 때 나타나는 창을 볼뿐 이지만
: (탐색기 프로세스에 의해서 생성되는 유저 인터페이스 스레드).. ...
: 데스크탑 화면에 탐색기(explore.exe) 가 하나도 열려있지 않은 상태에서도 explore.exe 는
: 메모리에 남아있으면서 Active 프로세스 상태로 활동하게 됩니다.
:
: 위에서 Progman, WorkerW 같은 클래스 윈도우도 실상은 explore.exe 프로세스에 의해서
: 생성된 클래스 윈도우에 불과하고요. 탐색기(explore.exe) 프로세스가 내부적으로는
: 데스크탑 윈도우에도 관련이 되어있다는 거죠.
:
: 지금은 탐색기(explorer.exe)가 윈도우즈에서 쉘 역할을 하지만, 윈도우즈가 처음 나왔을 때 초창기
: 때는 쉘을 "Program Manager" 라고 불렀습니다. Windows 7 이 나오기 까지도 MS 사의 프로그래머
: 들은 예전의 쉘 명칭을 바꾸지 않고 내부적으로는 소스코드에서 아직 까지도 예전 명칭을 사용하고
: 있나 봅니다.
:
: Aero 기능이 사용되면서 화려한 그래픽 효과를 갖는 데스크탑 윈도우를 처리하기 위해서 MS 사의
: 프로그래머들이 선택한 방식은 기존의 Progman 클래스 윈도우는 이전 방식과의 호환을 유지하기 위해
: 그대로 두고, 새로 WorkerW 라는 클래스 윈도우를 도입했다는 거고요.
:
: WorkerW -> SHELLDLL_DefView -> SysListView32
:
: 위와 같이 계층 구조로 데스탑 관련 윈도우 클래스를 나누어 놓은 것은 바탕화면에 바로가기 생성 등의
: 쉘 메세지도 처리 해야겠고, 마우스 키보드 등의 이벤트도 처리해야 겠고... 계층 구조로 프로그래밍 모델을
: 설계하는 게 구현하기에도 편리해서 였겠죠.
:
: 그리고...
:
: SysListView32 클래스 윈도는 리스트 뷰로 구현된 윈도우 입니다. 바탕화면에 놓여있는 아이콘들을
: 크게/작게 보거나, 정렬 하는 등 리스트 뷰 콘트롤의 기능을 활용하기 위해서 사용 했다고 볼수 있겠죠.
: 바탕화면에 깔려있는 배경이미지를 지우지 않는 속성으로 구현되어 있기 때문에, SysListView32 를 패런트
: 로 지정하면 결과적으로 윈도우가 데스트탑 레이어에서 동작하게 되는 효과를 얻게 되는 것도 이 때문이고요.
:
: 덧붙여서 Desktop Window Manager(dwm.exe)는 그래픽 카드 프로세서인 GPU 리소스를 관리 하는데
: Direct X 를 이용하는 프로그램에 의해서 Direct X 코어가 Initilalize 될 때 dwm.exe 에서 제공하는 펑션을
: 호출하기도 하더군요.
|