2010-03-16 5 views
3

"라이브".NET 객체를 호스팅하고 가이드 라인 (그리드), 객체 선택 등을 위해 자체 드로잉을 수행하는 간단한 폼 빌더에 대해 연구 중입니다. 아래에서 보듯이 사용자 정의 페인팅은 잘되지 않습니다. 항상 호스팅 된 컨트롤 뒤에 페인트되므로 정확하게 최적입니다..NET에서 호스팅 된 컨트롤의 "맨 위에"그리는 방법은 무엇입니까?

Selection Sample http://img405.imageshack.us/img405/8572/selectsample01.png

어떻게 모든 컨트롤을 호스팅의 "위에"그리는 내 그림 논리를 수정할 수 있습니다?

이미지가 당신의 SO가 여기 볼 수 있습니다보기에없는 경우 : http://img405.imageshack.us/img405/8572/selectsample01.png

답변

1

Z 주문 관련 문제가 아닙니다. 문제는 다른 윈도우의 클라이언트 사각형 내부를 그릴 수 없다는 것입니다. 귀하의 경우 "텍스트"창. "양식"과 같은 창에 WS_CLIPCHILDREN 스타일 플래그가 설정되어 있습니다.

Windows Forms 디자이너가 컨트롤 주위에서 선택 핸들을 그리는 방법을 잘 모르겠습니다. 그러나 Spy ++로 디자이너를 볼 때 디자인 영역의 크기 인 보이지 않는 두 개의 창이 표시됩니다. 이름은 "OverlayControl"및 "AdornerWindow"입니다. 내 생각 엔 디자이너가 실제로 해당 창 중 하나 (OverlayControl)에 핸들을 그리고 Windows 배경이 투명하다는 것을 알 수 있습니다.

this thread에서 비슷한 트릭을 사용 했으므로 코드를 활용할 수 있습니다. 당신은 또한 이것을 봐야만합니다. magazine article.

+0

+1 매우 유망 해 보입니다. (내일 개념을 수행하는 데 몇 시간이 걸릴 것입니다.) 일종의 오버레이 아이디어가 올지 모르지만 MFC 일 이후에는 다루지 않았습니다. 더 간단한 .NET 솔루션을 원했지만 이러한 링크는 훌륭한 리드입니다! 대단히 고마워요! 그런데 오버레이를 사용하면 몇 가지 다른 디자이너 관련 문제도 해결됩니다. –

0

는 호스팅 컨트롤이 여전히 앞에 페인트하는 것을 의미 포커스가 나타납니다 스크린 샷에서.

호스트 된 컨트롤에서 포커스를 제거하고 z 순서가 올바르게 설정되었는지 확인하십시오.

z 순서를 제어하는 ​​경우 z 순서에 따라 그림을하고 있는지 확인하십시오.

z 주문이없는 경우 구현해야합니다.

+0

초점을 바꾸려고했는데 어떻게 설정했는지에 관계없이 내 그림이 다른 컨트롤 뒤에 나타납니다. 이러한 컨트롤은 내가 그린 패널에서 호스팅되므로 z 순서를 많이 할 수 있는지 확신 할 수 없습니다. –

관련 문제