1. 오른쪽 마우스 버튼을 눌러도, 선택하고자 하는 트리 아이템에 포커스가 가지 않는 경우가 있다. 이럴 경우엔
UINT uFlags;
HTREEITEM htree = this->HitTest(point, &uFlags);
if(htree != NULL && (uFlags && TVHT_ONITEM))
this->SelectItem(htree);
이렇게 해주면 된다. 위 내용은 WM_RBUTTONDOWN(OnRbuttonDown)에서 실행할 것이기 때문에, point는 갖다 쓰면 된다. 일반적으로 왼쪽 마우스 버튼은 자동으로 포커스가 가게 되어있다. 하지만 왼쪽 마우스버튼에도 위와 같이 해주면 포커스는 간다.
2. 최상위 루트 아이템이 여러개일 경우에 GetRootItem을 해보면 여러개의 최상위 루트 아이템 중에서도 가장 먼저 나온 녀석이 리턴된다.
자신이 선택한 목록안에서의 최상위 루트를 구하려면 루프를 돌면서 구해야한다.
HTREEITEM hItem_new;
while(1)
{
//GetRootItem을 호출하면 안되고, TreeView_GetParent를 계속 호출하면서,
//해당 노드에서의 루트를 찾아야 한다.
hItem_new = TreeView_GetParent(this->m_hWnd, hItem_old);
if(hItem_new == NULL)
break;
hItem_old = hItem_new;
}
CString str = this->GetItemText(hItem_old);
최상위 루트를 찾았을 경우에, TreeView_GetParent는 NULL을 리턴하게 된다. 그러므로 NULL값을 갖고 있으면 안될것이다. 이전에 찾은 값을 항상 저장해놓고 쓰면 된다.
p.s : MFC함수와 Win32API함수가 섞여있는데...책을 찾아서 하다보니 이렇게 됐다. 어느쪽으로 해도 결과는 당연히 똑같다.
댓글 없음:
댓글 쓰기