Я работаю над фреймом приложения, используя родной 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 для манипулирования множеством окон.Система, кажется, вызывает это много.Кроме того, в то время как я все еще использую это, я решил проверить, свернуто ли окно сначала.Похоже, что система продолжала проверять изменения позиции при минимальном уровне.Это то, что, по-видимому, заставило панель задач зависнуть.Теперь работает намного лучше, спасибо.Заставлять вещи, кажется, тоже ни к чему хорошему не относится: /