CListCtrl 에서 NMITEMACTIVATE->iItem의 값이 -1이 나올때

CListCtrl 사용시에


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

Popular posts from this blog

[VS2010][VS2015] "stdafx.h 을 포함 소스를 찾을 수 없습니다" 에러 해결법