#perl #winapi
#perl #winapi
Вопрос:
В документации по Win32::GuiTest я могу найти только две функции для работы с элементами управления в виде дерева, GetTreeViewSelPath
и SelTreeViewItemPath
. Кто-нибудь может порекомендовать способ определения открытого / закрытого состояния узлов в дереве?
Ответ №1:
Мое древовидное представление на самом деле представляет собой «лес» (кучу деревьев). Я обнаружил, что могу перемещаться по корням с:
my $i = 0;
my @states;
for (my $node = Win32::GuiTest::SendMessage($windows[0],
0x1100 10, # Get next
0, # root
0); # N/A
$node != 0;
$node = Win32::GuiTest::SendMessage($windows[0],
0x1100 10, # Get next
1, # Sibling
$node)) { # from current
my $state = Win32::GuiTest::SendMessage($windows[0], 0x1100 39,
$node, 0xff);
$states[$i] = $state;
$i ;
}
Я нашел константы (root, sibling и т.д.) В http://www.xtremevbtalk.com/showthread.php?t=45515:
' messages
Public Const TV_FIRST = amp;H1100
Public Const TVM_GETNEXTITEM = (TV_FIRST 10)
Public Const TVM_GETITEM = (TV_FIRST 12)
' TVM_GETNEXTITEM wParam values
Public Enum TVGN_Flags
TVGN_ROOT = amp;H0
TVGN_NEXT = amp;H1
TVGN_PREVIOUS = amp;H2
TVGN_PARENT = amp;H3
TVGN_CHILD = amp;H4
TVGN_FIRSTVISIBLE = amp;H5
TVGN_NEXTVISIBLE = amp;H6
TVGN_PREVIOUSVISIBLE = amp;H7
TVGN_DROPHILITE = amp;H8
TVGN_CARET = amp;H9
Если бы у меня было обычное дерево, я мог бы сделать:
node = root
for (node = child; node != 0; node = sibling) {
...
}