|
skjoon 님이 쓰신 글 :
: 트리뷰의 노드들 중에서 검색을 해서 해당되는 노드를 선택으로 해주고, 스크롤 바를 이동시켜 해당 노드의 위치를 트리뷰의 가운데 오게 하려고 합니다.
: MSDN을 보니 SetScrollPos()라는 함수가 있어서 쓰려고 하는데요..
:
: int nPos = ....; // 이부분을...
: SetScrollPos(TreeView1->Handle, SB_VERT, nPos, true );
:
: 스크롤의 위치를 계산하지를 못하겠습니다..
:
: 고수님들 도움 부탁드립니다..
for ( int i = 0; i < TreeView1->Items->Count; i++) {
if ( TreeView1->Items->Item[i]->Text == sFindText ) { << Compare..
nFindPos = i;
TreeView1->Selected = TreeView1->Items->Item[i];
NodeLevel = TreeView1->Items->Item[i]->Level;
break;
}
}
검색을 해서 해당하는 노드를 찾았지요?
그런 다음 노드의 레벨도 알아냅니다.
for ( int index = 0; index < nFindPos; index++) {
if ( NodeLevel > TreeView1->Items->Item[index]->Level )
nPos++;
}
여기까지는 무슨 소리인지 아시겠죠?
그런데 중간으로 하는 것은 문제가 있네요..
스크롤이 자동으로 되면 몰라도 이상하게 안되서리.. 전 그냥 꽁수를 썼습니다.
꽁수라하믄
if ( nPos > 9)
nPos -= 8;
-_- 중간에 오도록 스크롤 시키는거지용.. (__)
SetScrollPos(TreeView1->Handle, SB_VERT, nPos, true );
TreeView1->SetFocus();
완벽하지는 않지만.... 보완을 좀 하시면 되지 않을까 싶어서..올려봅니다. (__) 그럼 수고하시길..
|