본문 바로가기

Visual C++/CListCtrl example

MFC CListCtrl example

CListCtrl을 상속하여 생성한 클래스에서 리스트의 컬럼과 아이템을 추가, 삭제, 갱신하는 예


void DCMListCtrl::CreateHead()

{

CRect clientRect;

GetClientRect(&clientRect);

int picColWidth = clientRect.right-(50+80+80+80+85);


SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_GRIDLINES );


SetRedraw(FALSE);

DeleteAllItems();


InsertColumn(0, _T("순번"), LVCFMT_CENTER, 50, -1); 

InsertColumn(1, _T("환자이름"), LVCFMT_CENTER, 80, -1); 

InsertColumn(2, _T("환자번호"), LVCFMT_CENTER, 80, -1); 

InsertColumn(3, _T("환자성별"), LVCFMT_CENTER, 80, -1);

InsertColumn(4, _T("진료날짜"), LVCFMT_CENTER, 85, -1); 

InsertColumn(5, _T("사진파일"), LVCFMT_LEFT, picColWidth, -1);


for(int i = 0;i < GetHeaderCtrl()->GetItemCount();++i)

SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);


SetRedraw(TRUE);

Invalidate();

//칼럼 추가 인덱스, 칼람명, 정렬방향, 칼럼폭, 서브아이템 갯수

}



void DCMListCtrl::CreateBody()

{

if(this->vecResult==NULL) return;

SetRedraw(FALSE);

DeleteAllItems();

/*

CString msg;

msg.Format(_T("CreateBody()아이템수=%d"), this->vecResult->size());

AfxMessageBox(msg);

*/

for(UINT i=0;i<this->vecResult->size();i++)

{

PatientTokenVO patient;

FileNameTokenizer::toPatientTokenVO(CString((*vecResult)[i]), &patient);

int seq = i;

CString seq_string;

seq_string.Format(_T("%d"),seq+1);

DateUtility::ParseStrDate(patient.GetStudyDate());

CString studyDate = DateUtility::Format();

CString patientID = patient.GetPatientID();

CString patientName = patient.GetPatientName();

CString patientSex = patient.GetPatientSex();

CString dcmFullPath = patient.GetFileName();


int nItem = 0;

nItem = InsertItem(0,seq_string); 

SetItem(nItem,1,LVIF_TEXT,patientName,0,0,0,NULL);

SetItem(nItem,2,LVIF_TEXT,patientID,0,0,0,NULL);

SetItem(nItem,3,LVIF_TEXT,patientSex,0,0,0,NULL); 

SetItem(nItem,4,LVIF_TEXT,studyDate,0,0,0,NULL); 

SetItem(nItem,5,LVIF_TEXT,dcmFullPath,0,0,0,NULL);

//AfxMessageBox(studyDate+" "+patientID+" "+patientName+" "+patientSex+"\n"+dcmFileName);

}

SetRedraw(TRUE);

Invalidate();

}