写了个小程序,改变显示器的分辨率,使用了ChangeDisplaySettings()。
在2000/xp系统下正常,可切到win98下,分辨率可以改变,可是却无法改变显示器的刷新频率

解决方案 »

  1.   

    2000/xp和98的确有差别,软硬件都可能是原因。
       DEVMODE devMode;
       ::ZeroMemory(&devMode, sizeof(devMode));
       devMode.dmDisplayFrequency = 70;
       devMode.dmFields = DM_DISPLAYFREQUENCY;
       devMode.dmSize = sizeof(devMode);
       ChangeDisplaySettings(&devMode, 0);
      

  2.   

    可以访问系统注册表HKEY_CURRENT_CONFIG\DISPLAY\SETINGS来获知当前的显示分辨率和颜色数。 
    但常用以下方法: 
    关键的API函数是EnumDisplaySettings和ChangeDisplaySettings。前者用来获得当前显示驱动所支持的所有显示模式,而后者用来改变显示模式。如果有个程序改变了显示模式, 则Windows会向所有正在运行的程序发送WM_DISPLAYCHANGE消息。获得当前显示模式可以使用下面的函数,它比访问注册表可靠。 
    Bool CVideoModes :: GetCurrentVideoSettings(DEVMODE *devmode) 

    HWND hwndDesktop=GetDesktopWindow(); 
    HDC hdc=GetDC(hwndDesktop); 
    devmode -> dmSize =sizeof(DEVMODE); 
    devmode -> dmBitsPerPel=GetDeviceCaps(hdc,BITSPIXEL); 
    devmode -> dmPelsWidth=GetSystemMetrics(SM_CXSCREEN); 
    devmode -> dmPelsHeight=GetSystemMetrics(SM_CYSCREEN); 
    devmode -> dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; 
    return TRUE; 

    下面的代码展示了如何使用EnumDisplaySettings获得当前支持的所有显示模式: 
    int modenum,done; 
    DEVMODE devmode; 
    done=0; 
    modenum=0; 
    do 

    done=!EnumDisplaySettings(NULL,modenum,&devmode); 
    AddToList(&devmode); 
    modenum++; 
    }while (!done); 
      

  3.   

    在程序中有用到 JennyVenus提到的获取系统所支持的所有显示模式,而后在改变显示参数。但在win98下仍然无法改变刷新率。
    另:有哪位知道如何用VC在桌面显示32灰阶画面,就象一些显示器测试软(比如Nokia Test软件一样)能给我思路或相关资料么?我在MSDN中不知道该找哪方面做参考