GetFirstChild в win32?

Я использую EnumChildWindows для получения всех дочерних окон из главного окна HWND, но я хотел бы получить только первый дочерний элемент данного окна HWND.

BOOL CALLBACK EnumChildProc ( HWND hwndChild, LPARAM lParam)
{
  // logic to call only once 
}

Это правильно? или любой другой простой способ?

~UK


person ukanth    schedule 14.05.2010    source источник
comment
Четыре ответа сразу - и все правильные, я думаю...   -  person egrunin    schedule 14.05.2010


Ответы (3)


BOOL CALLBACK EnumChildProc ( HWND hwndChild, LPARAM lParam)
{
  // process first child window
  return FALSE;
}

В качестве альтернативы HWND top_child = GetWindow(thisWindow, GW_CHILD);

person Jerry Coffin    schedule 14.05.2010
comment
+1, я принимаю этот ответ. потому что это помогает получить это GetWindow (thisWindow, GW_HWNDFIRST), которое я использую - person ukanth; 14.05.2010

Конечно:

BOOL CALLBACK EnumChildProc ( HWND hwndChild, LPARAM lParam)
{
    /* do what you want with the first HWND */

    return FALSE; // stops enumeration.
}

См. MSDN для получения полной информации, но соответствующая строка такова:

Возвращаемое значение

BOOL

Чтобы продолжить перечисление, функция обратного вызова должна вернуть TRUE; чтобы остановить перечисление, он должен вернуть FALSE.

person egrunin    schedule 14.05.2010

GetWindow(...,GW_CHILD) будет дать вам окно в верхней части z-порядка, который, я полагаю, это то, что вам нужно

person Anders    schedule 14.05.2010