난관 봉착... TCustomControl을 쓸것이냐, TGraphicControl을 쓸것이냐...
나도 저 문제에 봉착 했다.
델파이가 아니고 C++ Builder 지만...
어쨋든 두 툴이 거의 동일하다시피 하기 때문에...
지금의 문제는 TGraphicControl인 경우 배경을 투명하게 하는 것이 브러쉬만 바꿔주면 된다.
Canvas->Brush->Style = bsClear;
그러나 이 경우 Alpla를 적용할 방법이 없다.
투명도 조절이 불가능하다.
투명도를 조절하는 방법으로는 windows 2000이후에 나오는
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, (255 * 70) / 100, LWA_ALPHA);
위의 두코드를 사용하면 되나 저 경우 윈도우 핸들이 있어야 한다.
따라서 윈도우 핸들이 있는 TCustomControl을 상속 받아 사용하는 방법이 있다.
이 경우 배경을 투명하게 하기 위한 처리를 해야 한다.
void __fastcall TDSMText::CreateParams(TCreateParams &Params)
{
TCustomControl::CreateParams(Params);
Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT;
}
위와 같은 방법으로 윈도우 전체를 투명하게 한다.
void __fastcall TRectTracker::WMEraseBkgnd(Messages::TWMMouse &Message)
{
Message.Result = false;
}
위의 코드도 추가한다.
그러나, Tracker에서 배경이 희게 그려지는 현상이 발생하면서 다시 원점으로 갔다.
둘 중 하나를 선택한다면 TGraphicControl을 쓰고 싶다.
윈도우를 받아서 쓰는 부분은 정말 많은 문제가 발생하기 때문이다.
...
'프로그래밍???' 카테고리의 다른 글
socket operation on non-socket (0) | 2008.11.05 |
---|---|
How to add ALPHA to delphi TEXTOUT Tcanvas ? (0) | 2008.08.02 |
알파 블랜드를 이용한 투명.... (0) | 2008.08.01 |
반투명 윈도우 만들기... (0) | 2008.08.01 |
C++ Builder에서의 삽질(MouseDown) (0) | 2008.06.20 |