|
한석복 님이 쓰신 글 :
: 박지훈.임프 님이 쓰신 글 :
: : 임펠리테리입니다.
: :
: : 말씀드렸다시피.. 그리고 말씀하셨다시피.. 그 팁에서 사용하는 방법은 윈도우컨트롤의 윈도우핸들
: : 을 필요로하기 때문에 윈도우컨트롤이 아닌 그래픽컨트롤들은 아니올시다~~입니다.
: :
: : 다른 방법을 알려드리려고 궁리를 해봤는데... 원하시는 목적을 잘 이해가 안되는군요.
: : TShape를 이용해야 하는 이유가 "콘트롤의 테두리 외에는 Parent를 가리는 부분이 있어서는 안되기
: : 때문"이라고 하셨는데, 이 말의 뜻이 잘 이해가 안되네요. 테두리만 있고 안쪽은 투명한 컨트롤?
: : 혹은, 테두리만 없는 컨트롤? ... ^^;;
: :
: : 그럼 다시 질문해주세요...
:
: 테두리만 있고, 안쪽이 투명한 콘트롤입니다...
: 그러니까, TShape->Brush->Style 이 bsClear 모드로 한 경우를 말하는 것이죠.
: 쩝...아는게 엄써서 질문도 제대로 못하구...음...죄송....쑥쓰~~~~ ㅡ.ㅡ;
: 에구 오늘은 구정땜에 고향에 가실텐데....징징....
: 새해 복 많이 받으시구요...
임펠리테리입니다.
윈도우를 가진 컨트롤, 즉 TWinControl에서 상속받는 컨트롤들은 하나하나가 모두 윈도우이기 때문
에 투명해질 수 없습니다. 내부를 그려주는 메시지인 WM_ERASEBKGND를 가로채면 내부를 그리는
동작을 하지 않도록 할 수는 있습니다만, 이것은 투명하다는 것과는 다른 의미입니다. 단순히 내부
를 그리지 않도록 해놓으면 이전에 그려졌던 잔상이 계속 남아 지저분하게 될 뿐이죠.
이에 반해 그래픽컨트롤이 투명할 수 있는 것은 이유가 있습니다. 그래픽 컨트롤은 윈도우가 아닌
그냥 메모리 객체이고 Parent인 윈도우컨트롤의 드로우잉 관련 메시지 처리 루틴 내에 자신의
드로우잉 동작들을 끼워넣기만 해서 구성된 것입니다. 스스로 그리는 것이 아니라 패어런트에 의해
그려진다고 하는 것이 맞는 말이죠. 다시 말하면, 다시 그려질 필요가 있을 때마다 패어런트가
자신의 백그라운드를 그린 후에 차일드 그림을 그려넣으므로 투명한 것처럼 보이는 것입니다.
좀 궁리를 해봤는데.. 간단한 방법은 없군요. 언뜻 생각나기로는, 뒤에 가려진 Parent를 그리게
하되 필요한 그 부분만 그리도록 하면 될것도 같은데, 글쎄요. 좀 복잡할 겁니다.
그럼 참고나 하세요...
|