Выдвинуть окно на самый верх

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем artsb, 24 дек 2009.

  1. artsb

    artsb Гость

    Всем привет!
    Использую такой код, чтобы выдвинуть окно на самый верх и сделать его активным:
    Код (Text):
     ShowWindow(Application->Handle, SW_SHOWNORMAL);
    ShowWindow(frm->Handle, SW_SHOW);
    SetForegroundWindow(frm->Handle);
    В висте (да в ХР, наверное) отлично работает, а вот в вин7 не хочет выдвигать окно вперёд, просто кнопка приложения мигает и всё.
    У кого-нибудь есть мысли по этому поводу?
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Почитать последний msdn по этим ф-м?=)
     
  3. artsb

    artsb Гость

    Тоже вариант :) Завтра, действительно, гляну.
     
  4. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Отпишитесь здесь о результатах изысканий, пожалуйста. Мне вот тоже интересно)
     
  5. artsb

    artsb Гость

    Полазил на сайте MSDN и некоторых зарубежных сайтах и решил проблему!
    Вся беда в том, что функция SetForegroundWindow и ей подобные корректно отрабатывают только из активного процесса. А у меня была ситуация, что я отправляю сообщение из активного приложения в неактивное и уже из него пытаюсь "выдвинуть" окно.
    В общем, вот:
    Код (Text):
    SetLastError(0);
    if(!CreateMutex(NULL, true, "CarInsurance"))
    return 1;
    else if(GetLastError() == ERROR_ALREADY_EXISTS) {
    void *window;
    window = FindWindow("TMainForm", NULL);
    if(window && (window = GetWindow(window, GW_OWNER))) {
    ShowWindow(window, SW_SHOWNORMAL);
    SetForegroundWindow(window);
    return 1;
    }
    }
     
Загрузка...

Поделиться этой страницей