Click here to Skip to main content
15,912,457 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
// ContactsList.cpp : implementation file
//

#include "stdafx.h"
#include "ChatClient.h"
#include "ContactsList.h"
#include "TestPerson.h"


// CContactsList

// 현시하여야 할 리용자 배렬 
CPtrArray *_listContacts;


IMPLEMENT_DYNAMIC(CContactsList, CListCtrl)

CContactsList::CContactsList()
{
#ifndef _WIN32_WCE
	EnableActiveAccessibility();
#endif

	_listContacts = NULL;
}

CContactsList::~CContactsList()
{
}


BEGIN_MESSAGE_MAP(CContactsList, CListCtrl)

END_MESSAGE_MAP()



// CContactsList message handlers

BOOL CContactsList::InitContacts(CPtrArray *listContacts)
{
	
	_listContacts = listContacts;

	if(_imageList.GetSafeHandle() == NULL)
	{
		_imageList.Create(
			Size_Photo,		//이매지 너비
			Size_Photo,		//이매지 높이  
			ILC_COLOR32 | ILC_MASK,		//32비트  비트매프 사용 
			8,							//초기크기 8
			1							//grow 1
			);
		SetImageList(&_imageList,LVSIL_SMALL);
		SetImageList(&_imageList,LVSIL_NORMAL);
		_imageList.SetImageCount(1);
	}
	//리스트 콘트롤 설정 
	//사진 렬 
	InsertColumn(	0,	_T("사진"),	LVCFMT_CENTER,	Size_Photo + STD_GAP);
	//리용자상태 렬
	InsertColumn(	1,	_T("상태"),	LVCFMT_CENTER,	Size_StateImage + STD_GAP);
	//리용자 이름 및 정보 현시렬 
	InsertColumn( 2,	_T("이름 및 정보"),	LVCFMT_LEFT,
		Size_ContactsList - Size_Photo - Size_StateImage - 2*STD_GAP);

	//리스트 스타일 지정 
	SetExtendedStyle(
		LVS_EX_FULLROWSELECT |
		LVS_EX_INFOTIP |
		LVS_EX_FLATSB |
		LVS_EX_SUBITEMIMAGES
		);
	return TRUE;
}

void CContactsList::UpdateContacts()
{
	DeleteAllItems();
	SetItemCountEx(
		_listContacts->GetCount(),
		LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL
		);
}

void CContactsList::GetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);

	//아이템 지시자 얻기 
	LV_ITEM* pItem= &(pDispInfo)->item;

	//아이템 번호 얻기
	int nItem = pItem->iItem;

	if(_listContacts == NULL){
		AfxMessageBox(_T("CContactsList::_listContacts변수가 초기화되지 않았습니다."));
		return;
	}
	if (nItem > _listContacts->GetCount() - 1)
		return;//안전하게 
	
	//사용자 정보 얻기 
	CPerson *pUser = (CPerson*)_listContacts->GetAt(nItem);
	if(pUser == NULL)
		return;//안전하게 

	CString strTmp;
	switch(pItem->iSubItem){//몇번째 렬인가에 따라 ...
		case 0://사진 
			if(pItem->mask & LVIF_IMAGE){//이매지  가능한 경우에만 ...
				_imageList.Replace(0,pUser->GetPhoto(),NULL);
				pItem->iImage = 0;

			}
			break;
		case 1://상태
			if(pItem->mask & LVIF_IMAGE)
			{
				_imageList.Replace(0,pUser->GetStateImage(),NULL);
				pItem->iImage = 0;
			}
			break;
		case 2://이름 및 정보 
			if(pItem->mask & LVIF_TEXT){//문자렬 가능한 경우에만 ...
				CString strName = pUser->GetName();
				CString strInfo = pUser->GetInfo();
				strTmp = strName + CString(_T("\n")) + strInfo;
				lstrcpyn(pItem->pszText, strTmp, pItem->cchTextMax);
			}
			break;
		default:
			AfxMessageBox(_T("Contacts List 4번째 렬은 없음 !!!"));
			break;
	}
	*pResult = 0;
}

But result is bad :(

Image in list control is blank image
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900