Я получаю странные результаты с ChangeDisplaySettings и моей видеокартой Intel.Я обнаружил, что когда я пытаюсь перейти в полноэкранный режим, он не будет делать это так же, как другие программы.
Моя панель управления Intel позволяет обрабатывать различные разрешения тремя способами: растягивать изображение, используя исходное разрешение, но центрировать изображение, или сохранять пропорции с помощью почтового ящика.Я установил значение по умолчанию для поддержания соотношения сторон, и некоторые старые игры на моем компьютере в конечном итоге делают это.Тем не менее, моя программа не будет делать то же самое.Вместо этого он центрируется.
Вот код, который я использую:
#include "windows.h"
DEVMODE DevMode;
DEVMODE UsedDevMode;
struct stOptions
{
char szFiles[260];
int xres;
int yres;
int bpp;
bool bMultiMon;
};
stOptions options;
void ApplyOptions(HWND hWnd)
{
int iModeNum=0;
bool bRes, bBpp, bFreq;
bRes=bBpp=bFreq=false;
bool bResult=true;
bool bChanged=false;
int iFreq;
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DevMode); //Get the current frequency
iFreq=DevMode.dmDisplayFrequency;
//With this, I try to find a DevMode that will work for the display. If it can't match all of the user's
//preferences, it will at least try to match as much as it can.
while (bResult)
{
bResult=EnumDisplaySettings(NULL, iModeNum, &DevMode);
if ((DevMode.dmPelsWidth==options.xres)&&(DevMode.dmPelsHeight==options.yres))
{
if (!bRes) EnumDisplaySettings(NULL, iModeNum, &UsedDevMode);
bRes=true; bChanged=true;
if (DevMode.dmBitsPerPel==options.bpp)
{
if (!bBpp) EnumDisplaySettings(NULL, iModeNum, &UsedDevMode);
bBpp=true;
if (DevMode.dmDisplayFrequency==iFreq)
{
EnumDisplaySettings(NULL, iModeNum, &UsedDevMode);
bFreq=true;
break;
}
}
}
iModeNum++;
}
if (!bChanged)
{
//TODO: add error handling
}
ChangeDisplaySettings(&UsedDevMode, CDS_FULLSCREEN);
MoveWindow(hWnd, 0, 0, options.xres, options.yres, true);
}
Я хотел бы знать, есть ли у кого-нибудь еще с картой Intel такая проблема.1009 *
Заранее спасибо!