2014-06-17 6 views
0

CListCtrl (또는 목록보기 컨트롤)에 아이콘을 추가 할 때 왜 이렇게 검은 색 윤곽선이 표시되는지 잘 모르겠습니다.목록보기 아이콘을 표시 할 때 검정색 배경이 왜 나타 납니까?

enter image description here

내가 같은로드 :

//HICON hIcon; 
LoadIconWithScaleDown(theApp.m_hInstance, MAKEINTRESOURCE(Icon_ID), 15, 15, &hIcon); 

나는 다음과 같은 내 이미지 목록을 만들 :

//CImageList iml; 
iml.Create(15, 15, ILC_COLOR32, numberIcons, 0); 
iml.Add(hIcon); 

목록보기는 처음 수험 공부를하게된다

//CListCtrl lst; 
lst.SetExtendedStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | 
    LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_SUBITEMIMAGES); 
lst.ModifyStyle(0, LVS_SHOWSELALWAYS); 

아이콘은 목록의 하위 항목에 다음과 같이 표시됩니다.

int nInd = lst.InsertItem(c, L"Main label"); 

lst.SetItem(nInd, nSubitemIndex, LVIF_TEXT | LVIF_IMAGE, L"2 files", nIconInd, 0, 0, 0); 

그래서 내가 뭘 잘못하고 있니?

추신. 필자는 Windows 8.1에서 32 비트 트루 컬러 디스플레이 설정으로이 테스트를 실행했습니다.

enter image description here

: I는 작은 크기 & 심플한 디자인 알파 채널과 32 비트 아이콘상의 공간을 낭비 할 이유가 표시되지 않기 때문에

아이콘 비록 자체는 256 색 이미지

+1

흰색 배경이 있기 때문에 투명감을 원할 경우 알파 채널이 필요합니다. –

+0

_ "나는 32 비트 아이콘에 공간을 낭비 할 이유가 없습니다 "_ -이 문제에 실제로 낭비하는 시간은 몇백 바이트를 절약 할 가치가 있습니까? –

+0

배경은 CP의 사용자 선택에 따라 다릅니다. 따라서 반드시 흰색 일 필요는 없습니다. 알파 채널 아이콘을 추가 할 때 - Windows 8.1에서는 정상적으로 보이지만 16 비트 색상 체계가있는 이전 XP 컴퓨터에서 응용 프로그램을로드하면 여전히 검정색 배경이 표시됩니다. 게다가 아이콘이 하나도 없습니다. 그것은 그 이상입니다. – c00000fd

답변

2

LVS_EX_FULLROWSELECTtransparency issues on XP입니다. 그럴 가능성이 있습니다. 투명성을 유지하려면 소유자보기 이미지를 목록보기로 그릴 수 있습니다. 또는 이미지를 하나의 이미지 목록에로드 한 다음 목록보기의 색과 일치하는 배경색의 이미지 사본을 별도의 이미지 목록으로 렌더링 한 다음 목록보기에서 두 번째 이미지 목록을 사용합니다.

+0

@ c00000fd : 예, XP는 투명성을 제대로 처리하지 못합니다. 내가 너라면리스트 뷰 중 _all_을 맞춤 묘사로 렌더링 할 것입니다. 그렇게 어렵지 않습니다. [여기에] (http://www.codeproject.com/Articles/79/Neat-Stuff-to-Do-in-List-Controls-Using-Custom-Dra) 올바르게 수행하는 방법을 보여주는 멋진 샘플 코드. – ahmd0

+0

XP와 관련이없는 것 같습니다. 그리고 XP는 투명성을 잘 처리합니다. 소유자 그리는 것은 확실히 여기에 필요하지 않습니다. –

0

체크 한 C++ 파일이 트릭했던이 줄을 추가 여기 Getting alpha blending to work with CImageList

이 스레드 :

enter code here 
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 

도 묻지 마세요 ...하지만

을 것을 알아 내게 오랜 시간이 걸렸습니다
+0

감사합니다. 문제가 해결되면이를 확인하거나 부정 할 수 없습니다. 내가 그것을 엉망으로 한동안 잠시 있었어. – c00000fd

0

어쩌면 지금까지 다리 밑으로 물이 왔을 지 모르지만, 문제가되는 이미지 목록에서 8 비트의 colordepth 설정을 발견했습니다. 32로 설정하면 투명 함이 예상대로 작동합니다 ...

관련 문제