■ ListCtrl (리스트 컨트롤) 헤더의 컬럼(Column) 개수 얻기 및 삭제




1. 리스트 컨트롤 헤더의 컬럼 개수 얻기
   a. 헤더의 인스턴스 포인터를 얻어온다.
         헤더는 CHeaderCtrl 클래스로 관리가 된다.
   b. CHeaderCtrl 포인터로 멤버 함수인 GetItemCount() 함수를 호출한다.
         GetItemCount() 함수는 헤더의 컬럼 개수를 리턴한다. 


CListCtrl   &ctrlList = GetListCtrl();/*< 동적 리스트 컨트롤 핸들 */
CHeaderCtrl *pHeaderCtrl;       /*< 리스트 컨트롤 헤더 인스턴스의 포인터 */

pHeaderCtrl = ctrlList.GetHeaderCtrl();
nCount = pHeaderCtrl->GetItemCount();
if (-1 == nCount)
{
    AfxMessageBox(_T("Header Column not exist"));
    return;
}



2. 헤더의 컬럼 삭제
    - 헤더 컬럼의 삭제는 아래 함수를 이용한다.
      GetListCtrl().DeleteColumn(헤더컬럼 인덱스); 
 
    - 주의할 점
      헤더의 컬럼 개수를 얻어와 컬럼을 삭제하는 코드를 아래와 같이 작성하였다.
      즉, 헤더 컬럼의 개수를 얻고 0 부터 개수(개수-1) 만큼 for() 반복문을 돌면서 삭제 하려 하였다.
CListCtrl   &ctrlList = GetListCtrl();
CHeaderCtrl *pHeaderCtrl;             

pHeaderCtrl = ctrlList.GetHeaderCtrl();
nCount = pHeaderCtrl->GetItemCount();
if (-1 == nCount)
{
    AfxMessageBox(_T("Header Column not exist"));
    return;
}
else if (0 < nCount)
{
     ctrlList.DeleteAllItems();
     for (INT i = 0; i < nCount; i++)
        ctrlList.DeleteColumn(i);
}



   ※ 삭제중인 모습
                                  

                                      첫 컬럼은 제대로 지워진다.

                                              두번째 삭제 과정중, 두번째 컬럼 대신에 세번째 컬럼이 지워졌다.


                        ctrlList.DeleteColumn(i);
                       이 부분에서 DeleteColumn(i) 함수가 호출 되어 컬럼을 삭제 하려고 할 때,
                      그 전에 지워진 컬럼 때문에 i 번째 컬럼이 의도한 컬럼의 인덱스가 되지 않는다.




else if (0 < nCount)
{
     ctrlList.DeleteAllItems();
     for (INT i = 0; i < nCount; i++)
        
ctrlList.DeleteColumn(0);
}


             DeleteColumn(0) 으로 하여서 매번 for()문을 돌때마다
             첫번째 컬럼이 삭제하게 하였다. 모든 컬럼이 삭제 된다.



##
Posted by six605
,