GSI

ListCtrl의 한줄로 선택되도록 처리 하는 방법 + 그리드 라인을 같이 그려주는 코드
생성시에 한번 호출해서 설정해 주면 됩니다.


m_listPortSequencePerAddress.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);

컬럼 설정하는 방법

// 리스트 컬럼 추가함수
void CDlgSequencePage::AddColumn()
{
 //컬럼 채우기
 int m_nColWidths[] = { 90, 60}; // sixty-fourths
 TCHAR * lpszHeaders[] = {
        _T("Port/Sequence"),
        _T("Address"),
        NULL };

 int i;
 LV_COLUMN lvcolumn;
 memset(&lvcolumn, 0, sizeof(lvcolumn));

 // add columns
 for (i = 0; ; i++) {
  if (lpszHeaders[i] == NULL)
   break;

  lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
  lvcolumn.fmt = LVCFMT_LEFT;
  lvcolumn.pszText = lpszHeaders[i];
  lvcolumn.iSubItem = i;
  lvcolumn.cx = m_nColWidths[i];
  m_listPortSequencePerAddress.InsertColumn(i, &lvcolumn);
 }
}

데이터 추가시
Lparam도 같이 추가할 때

void CDlgSequencePage::AddData(CString portName, int Address, lpFixtureElement pFixEle)
{
 CString strText;
 int index = 0;
 index = m_listPortSequencePerAddress.GetItemCount();

 // Insert the item, select every other item.
 strText = portName;
 int id = m_listPortSequencePerAddress.InsertItem(LVIF_TEXT|LVIF_PARAM, index, strText, 0, 0, 0, (LPARAM)pFixEle);

 // Insert 10 items in the list view control.
 strText.Format(TEXT("%d"), Address);
 m_listPortSequencePerAddress.SetItemText(index, 1, strText);
}

해당 Row를 선택시에 Lparam의 값을 가져와서 처리 하는 방법

void CDlgSequencePage::OnLvnItemchangedSequenceListInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

 static int oldSelectItemLine = -1;

 // 해당 아이템 번호가 항상 3번 호출되고 다른 번호가 들어오기 때문에
 // 여기서 걸러 준다.
 if(pNMLV->iItem != oldSelectItemLine) {
  oldSelectItemLine = pNMLV->iItem;

  // 리스트 컨트롤에 저장된 포인터 정보를 사용해서
  // 선택정보를 변경하자.
  lpFixtureElement pFixEle = (lpFixtureElement)m_listPortSequencePerAddress.GetItemData(pNMLV->iItem);
  ASSERT(pFixEle);
  FixtureArray::GetInstance().ChangedFixtureElement(pFixEle);

  // PixelMap View 화면을 업데이트 한다.
  g_PixelMapView->Invalidate();
 }

 *pResult = 0;
}


 

Posted by gsi
: