본문 바로가기

프로그래밍/MFC

[MFC Dialog 메신져] TreeCtrl 탐색

이제서야 포스팅 할 생각을 하다니...

오늘 한 일

1. SERVER는 server에 접속한 client들의 상태를 기록한다.
2. server에 접속한 client의 수가 2이상일때(적어도 누군가의 친구가 있을때) 서버는 2번째 접속한 사용자와 기존 접속되어있는 사용자의 관계를 확인한다.
만약, 둘 사이가 친구라면

기존 접속한 client의 친구 목록에 후에 접속한 client의 id를 online으로 표시한다.

만약, 둘 사이가 친구가 아니라면

아무일도 일어나지 않는다.
 
그렇다면 TreeCtrl 을 탐색하는 기능이 필요하다(client의 사용자 명을 저장하지 않았다.
여기서 잠깐!

- 사용자 명을 저장해놓는다면?
   1) 사용자 명을 저장해놓는 변수가 있고, 그 변수를 treeCtrl와 연결해 놓고, update시 변수 내용을 바꿔서 다시 갱신한다면?
   2) 사용자 명을 저장해 놓고 이걸 다시 탐색해서 사용한다면..(일을 두번하는구나)

그리하여 탐색하는 코드를 작성...

 
void CsunClientDlg::searchTree(HTREEITEM parent, CString text)
{
	CString *str;
	HTREEITEM item=NULL;
	HTREEITEM child=NULL;
	
	
	if ( parent == NULL ) //최상위 노드일 경우
	{
		item = m_Tree.GetRootItem();
		searchTree(item, text);
		return ;
	}

	/* 현재 level을 검사한다.*/
	item = parent;
	while ( item != NULL) // 현재 노드가 NULL이 아니라면. 그러니까.. 막 가다가 자식이 널인 경우
	{
		//현재 노드 검사
		str = strSplit(m_Tree.GetItemText(item), " "); // split 은 내가 만든 함수.. 문자열 걸러내는게 필요해서
		if ( !str[1].Compare( text)) // 찾았다면
		{
			m_Tree.SetItemText(item, "(login) " + text);
			return ; // 끝
		}
		
		child = m_Tree.GetChildItem(item); // 자식노드를 받아움

		if ( child != NULL) // 자식이 널이 아니면
		{
			searchTree(child, text);  // 다시 탐색 
		}  
		item = m_Tree.GetNextItem(item, TVGN_NEXT); // 형제 노드로 이동
	} 
}

이 다음번에 할 내용
client간 자료전송

'프로그래밍 > MFC' 카테고리의 다른 글

[MFC] 포인터 해제?  (0) 2011.11.14
[MFC Dialog] PreTranslateMessage  (0) 2011.10.27
[MFC] SendMessage  (4) 2011.10.27
[MFC Dialog] OnKeyDown message  (0) 2011.10.27
[MFC Dialog] TreeCtrl에 더블클릭 이벤트 주기 ON_NOTIFY  (0) 2011.10.19