我现在屏幕是16位色,怎样把它改变成32位色?

解决方案 »

  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.   

    不行呀,到ChangeDisplaySettingsEx出错
      

  3.   

    程序中你可以这么做:
     int m_nBitsPerPixel = 32; //这就是你要的颜色数
     int m_nWidthPixels = 1024; //这是横向分辩率,如果不想修改这一项就不要赋值
     int m_nHeightPixels = 768; //这是纵向分辩率,如果不想修改这一项就不要赋值
     DEVMODE lpDevMode;
     lpDevMode.dmBitsPerPel = m_nBitsPerPixel;
     //lpDevMode.dmPelsWidth = m_nWidthPixels; //这是横向分辩率,如果不想修改这一项就不要赋值
     //lpDevMode.dmPelsHeight = m_nHeightPixels; //这是纵向分辩率,如果不想修改这一项就不要赋值
     lpDevMode.dmSize = sizeof(lpDevMode);
     lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
     LONG result = ChangeDisplaySettings(&lpDevMode,0);
     if(result == DISP_CHANGE_SUCCESSFUL)
     {
      AfxMessageBox("修改成功");
      ChangeDisplaySettings(&lpDevMode,CDS_UPDATEREGISTRY);
      //使用CDS_UPDATEREGISTRY表示次修改是持久的,
      //并在注册表中写入了相关的数据 
     }
     else
     {
      AfxMessageBox("修改失败,恢复原有设置");
      ChangeDisplaySettings(NULL,0);
     } 上面的程序就可以帮助楼主解决问题了,但如果有兴趣可以继续看一下下面的内容.
    //补充一些其它说明:
    //获得当前显示模式可以使用下面的函数:Bool 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); 
    设置显示模式的方法如下:rc = ChangeDisplaySettings(&devmode,CDS_FULLSCREEN));
    //这里的devmode就是前面使用EnumDisplaySettings获得的。如果设置正常,返回值DISP_CHANGE_SUCCESSFUL。