是何异常?也许是内存不够吧。或者是要在FillMemory之前加上pdm=new DEVMODE;

解决方案 »

  1.   

    int  wd,hd;
        DEVMODE  dm;
          FillMemory  (&dm,  sizeof(DEVMODE),0);//此处异常
            dm.  dmSize  =  sizeof(DEVMODE);
          wd=GetSystemMetrics(SM_CXSCREEN);
          hd=GetSystemMetrics(SM_CYSCREEN);
          if(wd==1024&  &  hd==768)
          {
            
            dm.dmPelsWidth=1024;
                                dm.  dmPelsHeight=768;
                            dm.  dmFields=DM_PELSWIDTH|DM_PELSHEIGHT  ;
              ChangeDisplaySettingsEx(NULL,& dm,NULL,CDS_RESET,NULL);
          }
      

  2.   

    BOOL flag;
     LPDEVMODE  gpCurrentMode,gpNewMode;
     gpCurrentMode = new DEVMODE;
     flag = EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, gpCurrentMode);
     gpCurrentMode->dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM
    _DISPLAYFLAGS | DM_DISPLAYFREQUENCY ;
     gpCurrentMode->dmBitsPerPel = 24;
     gpCurrentMode->dmPelsWidth = 1024;
     gpCurrentMode->dmPelsHeight = 768;
     gpCurrentMode->dmDisplayFrequency = 0;
     if ((DM_BITSPERPEL      & gpCurrentMode->dmFields ||
              DM_PELSWIDTH      & gpCurrentMode->dmFields ||
              DM_PELSHEIGHT      & gpCurrentMode->dmFields ||
              DM_DISPLAYFLAGS  & gpCurrentMode->dmFields ||
              DM_DISPLAYFREQUENCY & gpCurrentMode->dmFields ) )
        {
      gpNewMode = gpCurrentMode;
        LONG lResult = ChangeDisplaySettings
                    ( gpNewMode,
                      CDS_TEST );
      if (lResult == DISP_CHANGE_RESTART)
        {
            MessageBox("This mode requires a reboot which\n"  \
                             "is not supported in this sample.",
                   NULL);
      }
      if (DISP_CHANGE_SUCCESSFUL ==lResult)
      {
             lResult = ChangeDisplaySettings
                         ( gpCurrentMode,
                           0 );
      }
     }