问题是这样的:    为了更好的运行我所编写的程序,我需要在程序运行的时候 更改windows的分辨率为1024*768,当该程序退出时,在修改为原来的分辨率,请问各位大侠,我该如何实现,请 给出用vc解决的详细办法,因为我用的是vc,不胜感激,谢了先。

解决方案 »

  1.   

    int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
    int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
    bool bChanged=0;
    if(nFullWidth!=800 || nFullHeight!=600)//change from && to ¦¦
    {
    DEVMODE lpDevMode;
    lpDevMode.dmBitsPerPel=16;//Change from 24 to 16
    lpDevMode.dmPelsWidth=800;
    lpDevMode.dmPelsHeight=600;
    lpDevMode.dmDisplayFrequency=85;
    lpDevMode.dmSize=sizeof(DEVMODE);
    lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL|DM_DISPLAYFREQUENCY;
    LONG result;
    //EnumDisplaySettings(NULL,ENUM_REGISTRY_SETTINGS,&lpDevMode);
    result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);
    if (result==DISP_CHANGE_SUCCESSFUL)
    {
    result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,CDS_UPDATEREGISTRY,NULL);bChanged=1;
    }
    else
    {
    result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);
    }
    }
      

  2.   

    有关分辨率的解决都在这里了:列出所有分辨率模式为了列出所有可用的分辨率模式,要使用函数EnumDisplaySettings,我们调用这个函数,直到返回FALSE:
    BOOL bRetVal;
    CString sDevMode;iMode = 0;do
    {
    bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);
    iMode++;
    if (bRetVal)
    {
    sDevMode.Format("%d x %d, %d bits %dhtz",
    devmode.dmPelsWidth, devmode.dmPelsHeight,
    devmode.dmBitsPerPel, devmode.dmDisplayFrequency);// list box for all modes (see demo) 
    if (m_lb1.AddString(sDevMode)==LB_ERR)
    AfxMessageBox("An error occurred!!!");
    }
    }
    while (bRetVal);得到当前分辨率设置EnumDisplaySettings的参数iModeNum为ENUM_CURRENT_SETTINGS.。
    if (::EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode))
    {
    sDevMode.Format("%i x %i, %i bits %dhtz",
    devmode.dmPelsWidth, devmode.dmPelsHeight,
    devmode.dmBitsPerPel, devmode.dmDisplayFrequency);m_lb1.SelectString(0, sDevMode);
    }改变当前分辨率如果要改变当前分辨率,需要用到函数ChangeDisplaySettings。
    BOOL bRetVal;iMode = m_lb1.GetCurSel();
    bRetVal = ::EnumDisplaySettings(NULL, iMode, &devmode);
    if (bRetVal)
    {
    devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | 
    DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
    ::ChangeDisplaySettings(&devmode, 0);
    }
      

  3.   

    DEVMODE dm;
    dm.dmSize = sizeof(DEVMODE) ;
    EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dm);
    LONG result;
    dm.dmBitsPerPel = 16;
    dm.dmPelsHeight = 768;
    dm.dmPelsWidth = 1024;
    dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    result = ChangeDisplaySettings(&dm,0);