Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14073] 저도 질문 있습니다 ???
대박왕 [] 2004 읽음    2012-01-29 17:50

빌더 님이 쓰신 글 :
: 하두고 님이 쓰신 글 :
: : DC := GetWindow(GetWindow(FindWindow('Progman', nil), GW_CHILD), GW_CHILD);
: :     Windows.SetParent(handle, DC);
: :
: : 아시는 분들은 다 아시는 코드인데요.
: : Win7 64비트에서는 아예 윈도우가 보이지 않습니다.
: : 방법이 없을까요?
: :
: :
: : <추가내용입니다>
: : 이것 저것 만지작 거리다 보니 Win7 바탕화면의 테마를 Aero로 놓고
: : 이 소스코드를 사용하면 창이 안보이네요.
: :
: : 기본테마나 고전테마로 놓으면 되고요.
: :
: : 그런데 웃기는건 기본테마나 고전테마로 놓아 창이 보이게 하고 나서
: : 테마를 다시 Aero로 돌려놓으면 창이 그대로 보입니다.
: :
: : 문제는 재부팅한 후인데요.
: :
: : Aero테마로 놓고 재부팅을 하면 보였던 창이 다시 안보여요.
: : 이거 어떻게 해결해야 할까요?
:
:
: Aero 테마가 사용되지 않는 경우에는 "Program Manager" Progman 클래스를 패런트로 하는
: 윈도우 패런트/차일드 관계를 이용해서(Proman -> SHELLDLL_DefView -> SysListView32 )
: 윈도우 창을 데스크탑 윈도우 레이어에 두는 방법을 사용하면 되지만...
:
: Aero 테마가 사용되면 윈도우즈 시스템이 위와 같은 패런트/차일드 관계를 이용하지 않고 ...
: WorkerW 라는 클래스 네임을 갖는 워커 윈도우를 패런트로 해서 아래와 같이 다른 패런트/차일드 관계를
: 이용하기 때문에...
:
: WorkerW -> SHELLDLL_DefView -> SysListView32
:
: 기존의 방법 대신 다른 방법을 이용해야 합니다.
:
: 시스템 런타임중에 차일드 윈도우를 갖지 않는 WorkerW 클래스의 다른 윈도우가 있을 수 있으니까
: WorkerW 라는 클래스 네임을 갖는 윈도우를 찾되, 위와 같이 SHELLDLL_DefView와 SysListView32를
: 패런트/차일드 관계로 갖는 WorkerW 계층을 찾아서 해당하는 SysListView32 를 SetParent 로 지정해
: 주면 됩니다.
:
: 데스크탑을 확장해서 이용하는 멀티모니터 환경에서는 패런트/차일드 관계가 바뀌면서 윈도우 Rect 도
: 확장된 데스크탑 레이어의 좌표계를 따르게 돼 있기 때문에  이 점만 주의하면 됩니다.
:
: 가령 1(레프트), 2(라이트) 로 데스크탑을 확장해서 사용하는 듀얼모니터 환경에서...
: 2번이 주모니터(프라이머리)로 설정되어 있다면 SetParent로 윈도우를 데스크탑 레이어로 세팅하는 순간
: 해당 윈도우가 확장된 데스크탑의 좌표게를 따라 주모니터인 2번 모니터의 로컬 좌표계에서 1번 모니터로
: 이동 하게 된다는 거죠. 멀티모니터 환경도 고려한다면 이 부분에 대한 처리도 필요할 겁니다.

 

알려주신 방법대로 해보니까 잘되는데요. 저도 궁금한게 있습니다.

Proman -> SHELLDLL_DefView -> SysListView32

WorkerW -> SHELLDLL_DefView -> SysListView32

제가 궁금한 것은 SysListView32 를 패런트로 해주면 왜 윈도우가 바탕화면 윈도우 계층으로

동작할 수 있는가 하는 부분입니다. ListView 윈도우를 패런트로 해주는 것으로 어떻게 바탕화면

윈도우 계층하고 같은 레벨에서 동작하게되는지 이해가 되질 않습니다????

 


+ -

관련 글 리스트
14069 윈도우를 최하위로 두고 싶은데요. Win7 64비트에서는 안됩니다. 방법이 없을까요? 하두고 2016 2012/01/28
14072     Re:윈도우를 최하위로 두고 싶은데요. Win7 64비트에서는 안됩니다. 방법이 없을까요? 빌더 2574 2012/01/29
14078         Re:Re:빌더님 막상 구현을 하려하니.... 하두고 2091 2012/01/30
14073         저도 질문 있습니다 ??? 대박왕 2004 2012/01/29
14074             Re:빌더님 감사합니다. 그리고 대박왕님 하두고 2141 2012/01/29
14075                 Re: 두분 께 부연해서 말씀 드리면... 빌더 2152 2012/01/30
14077                     Re:Re: 빌더님 부연설명 감사합니다. 하두고 1975 2012/01/30
14076                     Re:Re: 감사합니다 ^^ 대박왕 1843 2012/01/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.