글
TreeView CommonController 사용시 주의할 점
1. TreeView_DeleteItem() 을 사용시, TreeView_DeleteItem(hTree, NULL); 처럼 HTREEITEM 인자에 NULL 값을 주면 전체 노드가 삭제된다. 이게 왜 주의할 점이냐면, TreeView_DeleteItem(hTree,TreeView_GetChild(hTree, Node)); 처럼 사용할 경우, Node의 자식 노드가 존재하지 않을 경우 TreeView_GetChild() 가 NULL을 리턴한다. 즉, 의도하지 않게 전체 노드가 삭제될 수 있다는 이야기다.
삭제를 위한 반복문에서 이 경우를 신경쓰지 않고 코딩을 하면 이런 버그를 만날 수 있다.
물론 이를 방지하기 위해서는 다음과 같이 자식 노드가 존재하는지를 미리 체크해주는 루틴을 넣어주면 된다.
if( NULL != TreeView_GetChild(hTree, Node)) {
TreeView_DeleteItem(hTree, TreeView_GetChild(hTree,Node));
}
2. TreeView_GetItem() 을 사용하여 노드의 텍스트를 가져올 때, cchTextMax도 설정해주어야 한다.
ex)
TVITEM tvi;
char buf[25];
tvi.hItem = Node;
tvi.mask = TVIF_TEXT;
tvi.cchTextmax = 20;
tvi.pszText = buf;
TreeView_GetItem(hTree, &tvi);
3. 어지간하면 TreeView_Expand() 는 맨 마지막에.
TreeView에 데이터를 넣다 보면 여기 저기 갖가지 부모 노드에 자식 노드를 넣어야 하는 경우가 있다. 이럴 경우 노드 처리 작업을 모두 진행한 후에 TreeView_Expand() 를 해줘야지 해당 노드가 제대로 펼쳐진다. 즉, 미리 TreeView_Expand() 명령을 때려놓고 노드 삽입/삭제 작업을 진행하면 Expand가 풀려버리게 된다는 말이다.
'IT/Programming > WinAPI' 카테고리의 다른 글
(WinAPI/MFC) GUI 프로그래밍을 하면서 콘솔을 임의로 띄워 테스트하기 (0) | 2013.10.17 |
---|---|
(WinAPI) editbox 에 줄바꿈 삽입이 안될 때 (0) | 2013.10.16 |
(WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트 (0) | 2013.07.10 |
(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR) (0) | 2013.07.08 |
TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인 (0) | 2013.07.08 |