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

C++빌더 Q&A
C++Builder Programming Q&A
[39938] Re:Re:Re:해결 방법
鄭明基.발그미 [] 1241 읽음    2005-04-26 21:47
질문이 2003년도 것이라 이미 해결 내지는 포기했으리라 보지만
저와 같이 이런 답을 찾아 헤메시는 분을 위해 여기에 한마디 적을께요..
ListView에 배경그림을 그리는 것은 검색해 보면 나옵니다. WM_ERASEBKGND 를 이용하여 그리는 방법이고요
여기에 Icon을 큰 것으로 선택하고 나면 위의 질문처럼 여백이 흰색이나 기타의 색깔로 나옵니다.
그래서 저도 이곳저곳 검색해 봤더니 다음과 같이 하라더군요. 너무 간단해요.. ㅜㅜ;;

ListView에 onCustomDraw 이벤트에 다음과 같이 3줄을 추가합니다. 아래와 같이요.

void __fastcall TForm1::ListView1CustomDraw(TCustomListView *Sender,
      const TRect &ARect, bool &DefaultDraw)
{
    SetBkMode(ListView1->Canvas->Handle,TRANSPARENT);
    Perform(LVM_SETTEXTBKCOLOR,0,Longint(CLR_NONE));
    ListView_SetBkColor(ListView1->Handle,CLR_NONE);
}

이러면 Transparent 하게 아이콘이 나올 겁니다. 물론 아이콘 밑에 Caption이 지정되어 있는 경우도
투명하게 처리됩니다.  참고로 전 Windows XP에서 실험해 봤습니다.

참고로 WM_ERASEBKGND 를 이용하지 않는 방법은 BitBlt() 함수를 위의 SetBkMode() 앞에 써 주면 됩니다.
한가지 이점은 WM_ERASEBKGND 이용 했을때 생길 수 있는 잔상(?)이 없어 지더군요. 전 다음과 같이 했습니다.
이 방법이 좋은지 나쁜지는 모르겠네요.

void __fastcall TForm1::ListView1CustomDraw(TCustomListView *Sender,
      const TRect &ARect, bool &DefaultDraw)
{
        BitBlt(ListView1->Canvas->Handle, 0, 0, ListView1->Width,
                ListView1->Height, Image1->Canvas->Handle, 0, 0, SRCCOPY);
        SetBkMode(ListView1->Canvas->Handle,TRANSPARENT);
        Perform(LVM_SETTEXTBKCOLOR,0,Longint(CLR_NONE));
        ListView_SetBkColor(ListView1->Handle,CLR_NONE);
}

그럼 이만.

김태우 님이 쓰신 글 :
: 일단 답변 감사드립니다.
: 그런데 저의 경우 이미지 리스트에 아이콘을 넣으면
: 배경색이 일단 흰색으로 지정됩니다.(여백이 흰색이기 때문에)
: 그런데 이미지 리스트에 아이콘들을 넣고 이미지 리스트를 닫은후
: 다시 열면 여백의 색깔이 'none'로 바뀌어 있습니다.
: 때문에 여백이 투명처리가 되지 않구요.
:
: 아시는분은 답변좀 부탁합니다.

+ -

관련 글 리스트
25534 [질문] ListView의 아이콘의 여백을 투명하게 하고싶습니다. 김태우 669 2003/05/10
25541     Re:[질문] ListView의 아이콘의 여백을 투명하게 하고싶습니다. 서비 1629 2003/05/12
25569         Re:Re:[재질문] 여백의 색상이 바뀌질 않는데요..... 김태우 846 2003/05/13
39938             Re:Re:Re:해결 방법 鄭明基.발그미 1241 2005/04/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.