Невозможно восстановить свернутое окно - PullRequest
1 голос
/ 03 февраля 2012

Я работаю над фреймом приложения, используя родной C и win32 API.Написание обработчиков для размещения собственного окна внутри фрейма в зависимости от манипуляций пользователя.Пока у меня есть:

case WM_WINDOWPOSCHANGED:

    GetWindowRect(hwnd, &rect);
    SetWindowPos(
        hexp, HWND_TOP, rect.left + 5, rect.top + 30,
            0, 0, SWP_SHOWWINDOW | SWP_NOSIZE );

Это прекрасно работает, за исключением того, что я не могу восстановить его из свернутого состояния.Я искал на форуме и попробовал несколько вещей с обработчиком SC_RESTORE, в том числе:

case SC_RESTORE:

    ShowWindow(hwnd, SW_RESTORE);
    SetForegroundWindow(hwnd);
    BringWindowToTop(hwnd);    // Doesn't work

Я также пробовал:

case SC_RESTORE:

    SendMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);    // no luck either

Ничего не работает.Я должен щелкнуть правой кнопкой мыши и выбрать восстановление, когда приложение свернуто.Любые подсказки будут приветствоваться.

** Обновление ** Я нашел улучшение.

Прежде всего, я не уверен, что это хорошая идея - использовать событие WM_WINDOWPOSCHANGED для манипулирования множеством окон.Система, кажется, вызывает это много.Кроме того, в то время как я все еще использую это, я решил проверить, свернуто ли окно сначала.Похоже, что система продолжала проверять изменения позиции при минимальном уровне.Это то, что, по-видимому, заставило панель задач зависнуть.Теперь работает намного лучше, спасибо.Заставлять вещи, кажется, тоже ни к чему хорошему не относится: /

1 Ответ

1 голос
/ 04 февраля 2012

Интересно, разрешено ли нам отвечать на наши вопросы? Ну, я никогда особо не касался C с помощью API, и, похоже, я начал с «неправильной» концепции. Я думал, что собираюсь написать фрейм, который владеет и управляет окнами, и оказывается, что ОС говорит мне заблудиться. Кажется, все дело в том, чтобы войти в "Режим ожидания" и висит на панели задач. И тогда я понимаю, что уже есть окна, которыми можно управлять. Они называются «Диалоги». Поэтому я перестану пытаться склеивать окна и работать с соответствующими диалогами. Это был веселый экспериментальный путь с этой стороны. Жаль не торопиться с вопросами новичка. Что ж, теперь вы знаете, если ваше окно висит на панели задач, «Windows» отбросило его, и оно никогда не вернется.

Теперь, чтобы вернуться на правильный путь: \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...