У нас есть несколько собственных приложений, встроенных в MFC, с процедурами рисования OpenGL. Все они используют один и тот же код для рисования на экране и либо распечатывают экран, либо сохраняют его в файл JPEG. В Windows XP все работает нормально, и мне нужно найти способ заставить их работать в Vista.
В трех наших приложениях все работает. В оставшейся части я могу получить границу окна, строку заголовка, меню и панель задач, но интерьер никогда не отображается. Как я уже сказал, эти приложения используют один и тот же код для записи на экран и захвата изображения окна, и единственное отличие, которое я вижу, выглядит так, как будто это может иметь значение, в том, что проблемное приложение использует интерфейс нескольких документов MFC, в то время как эта работа использует единый интерфейс документа.
Либо ответа нет в сети, либо я в Гугле хуже, чем думал. Я спросил на форумах MSDN, и единственное практическое предложение, которое я получил, было использовать GDI +, а не GDI, и это ничего не изменило. Я пробовал разные вещи с каждой частью кода, которая захватывает и печатает или сохраняет, учитывая указатель на окно, так что, очевидно, это вопрос самого окна. Я еще не перестроил приложение-нарушитель с помощью SDI, и у меня действительно нет других идей.
Кто-нибудь видел что-нибудь подобное?
У меня есть четыре приложения. Они используют много общего кода и обмениваются действительными файлами .h и .cpp, поэтому я знаю, что код для рисования и захвата экрана идентичен.
Существует подпрограмма WindowtoDIB (), которая принимает * pWnd, исходный прямоугольник и размер назначения. Это выглядит как слегка адаптированный код Microsoft, и я нашел другие функции в этом файле на сайте Microsoft. Из моих четырех приложений три справляются с этим просто отлично, но одно - нет. Самым очевидным отличием является то, что проблемой является MDI.
Мне кажется, что проблема в * pWnd. Я далеко не гуру MFC, и мне кажется, что проблема может заключаться в том, что у нас есть одна настройка окна в SDI и больше, чем в MDI. Возможно, я передаю неправильный * pWnd функции.
Между тем, он начал нормально работать на 64-битной машине Vista, хотя он все еще не работает на 32-битной машине Vista. Понятия не имею почему. Со времени последних тестов я ничего не изменил, и я не думал, что кто-то еще это сделал. (В 32-разрядной версии клавиша Print Screen работает, как и ожидалось, но не сохраняет экран в формате JPEG.)