CListCtrl 에서 NMITEMACTIVATE->iItem의 값이 -1이 나올때
CListCtrl 사용시에
필드 업데이트 해주는 부분과, 처음 Colomn만드는 부분을 분리하지 않으면 계속 만드는 불상사가 생긴다.
이렇게 바꾸니, Row전체를 인식하고, 또한 값도 정상적으로 Return됨.
BOOL CClassName::OnInitDialog() { CDialogEx::OnInitDialog(); CRect tempRect; m_CClassNameListCtrl.GetClientRect(&tempRect); int tempWidth = (int)(tempRect.Width()/5.0 + 0.5); m_CClassNameListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|\\ LVS_EX_ONECLICKACTIVATE); m_CClassNameListCtrl.InsertColumn(0, _T("ID"), LVCFMT_CENTER, tempWidth, -1); // Col#1 추가 m_CClassNameListCtrl.InsertColumn(1, _T("입력파일명"), LVCFMT_CENTER, \\ (tempRect.Width()-tempWidth), -1); // Col#2 추가 UpdateDataCClassNameList(); // 각 필드 업데이트 ... } void CClassName::UpdateDataInputCalList() { m_pApp = (CClassNameApp *)AfxGetApp(); m_pProjectInfoEx = &(m_pApp->m_ProjectInfoEx); CString InputStr; CPathNameInfo InputStrInfo; CRect tempRect; m_ClassNameListCtrl.GetClientRect(&tempRect); int tempWidth = (int)(tempRect.Width()/4.0 + 0.5); // 리스트 초기화 m_CalFileListCtrl.DeleteAllItems(); //int tempindx = 0; for(int indx = 0;indxm_InputFileNo;indx++) { CString tempStr; tempStr.Format("%d", indx); m_ClassNameListCtrl.InsertItem(indx, tempStr); m_ClassNameListCtrl.SetItem(indx, 0, LVIF_TEXT , tempStr, 0, 0, 0, NULL); tempStr = InputStrInfo.m_FileName.GetString(); m_CalFileListCtrl.SetItem(indx, 1, LVIF_TEXT, tempStr, 0, 0, 0, NULL); } }
필드 업데이트 해주는 부분과, 처음 Colomn만드는 부분을 분리하지 않으면 계속 만드는 불상사가 생긴다.
void CClassName::OnNMClickFileList(NMHDR *pNMHDR1, LRESULT *pResult1) { LPNMITEMACTIVATE pNMItemActivate1 = reinterpret_cast(pNMHDR1); NMITEMACTIVATE* nm1=(NMITEMACTIVATE*)pNMHDR1; m_raw_cal_sel_row = nm1->iItem; m_raw_cal_sel_col = nm1->iSubItem; Invalidate(); *pResult1 = 0; }에서 iItem = -1이 나오는 경우는 대개 OninitDialog()에서, m_CClassNameListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES); 인경우가 있었음.
m_CClassNameListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|\\ LVS_EX_ONECLICKACTIVATE);
이렇게 바꾸니, Row전체를 인식하고, 또한 값도 정상적으로 Return됨.
Comments