Выделение дочернего окна и пунктов меню

Тема в разделе "WASM.WIN32", создана пользователем seiko, 2 фев 2009.

  1. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    1: все ли компоненты отображающие текст являются окнами?
    2: как провести поиск в главном меню программы (то есть получить указатель на голову, и искать по дочерним пунктам, кстати неплохо было бы что-нить аналогичное EnumChildWindows только с пунктами меню)?
    3: как выделить окно (то показать родителя и допустим показать ту вкладку где лежит заголовок окна, чей хендл известен)? Нужно ли запоминать для этого всех его родителей или достаточно отправить ему какое-нить сообщение?
    4: аналогично симулировать попадание в известный подкаталог меню?
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Нет
    GetMenu(), GetSubMenu()
    Толком вопрос не ясен. Возможно имеется ввиду ShowWindow(hWnd, SW_RESTORE) или просто SetForegroundWindow(). Для получения родителя - GetParent()/GetAncestor().
    Тебе развернуть меню или произвести клик?
     
  3. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    допустим найден какой-нить текстовый заголовок, нужно показать окно им владеющее (ведь оно может быть скрыто) и выделить текст заголовка. С меню аналогично (раскрыть все родительские ветки наглядно показав путь до заданного пункта и выделить его (в принципе можно еще и мышь перетащить туда, тогда задача выделения снимается), эмулировть клик не нужно
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Заголовок есть только у главного окна. Окно им владеющее - десктоп. Подразумеваю, что вопрос поставлен некорректно. Возможно имелось ввиду: "Найти hWnd окна по заданному тексту и отобразить его _главного_ родителя". Если так, то задача тривиальна, хоть и не всегда решаема (в том случае, когда текст "нарисован" на окне, найти его не выйдет).

    По поводу показа заданного меню. Честно говоря, я не знаю легальных и элегантных способов это сделать. Единственное, что приходит на ум - вычислить позицию меню относительно самого первого элемента (того, который обычно в левом верхнем углу окна). Позицию не в координатах (естественно ;) ), а в количестве и направлении шагов, требуемых для отображения данного пункта меню с помощью стрелок на клавиатуре. Дальше эмулируем нажатие Alt (активируем самый первый пункт меню) и нажатия соответствующих стрелок. Т.е., к примеру, чтобы добраться до пункта "О программе" стандартного блокнота, нам нужно поочередно имитировать нажатия следующих клавиш: Alt, 4 раза вправо, 2 раза вниз.

    Естественно, при таком поиске нам необходимо учитывать недоступные пункты и сепараторы, они считаться не должны.
     
  5. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    Конкретизирую и сужаю третий вопрос.
    ну есть у нас какой-нить статичный текст в окне (допустим - что-нить типа дельфовского лейбла). Мы же можем мышкой выделить текст, так какое сообщение надо отсылать окну, чтобы выделить находящийся в нем текст?
     
  6. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну вот ни как ты в дельфовом лейбле текст не выделишь. Мало того - дельфовый лейбл (TLabel) не окно, тебе не узнать, что там написано. Что ты будешь искать?

    Если все же речь идет о текстовых полях (на что я искренне надеюсь :) ), то EM_SETSEL поможет.