Как я могу проверить расширенное состояние элемента управления в виде дерева с помощью Win32 :: GuiTest?

#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) {
   ...
}