2014-09-03 324 views
1

我似乎無法獲得一些C++代碼來編譯。我翻轉顯示的方向,但VS2008告訴我的DMDO_90和DMDO_270身份不明:C++更改屏幕方向問題 - DEVMODE dmDisplayOrientation DMDO_90 undefined

error C2065: 'DMDO_90' : undeclared identifier 
error C2065: 'DMDO_270' : undeclared identifier 

我缺少something--一個包括什麼? 按照MSDN DEVMODE結構DMDO應(下dmDisplayOrientation部分)來定義 -
這裏是我的代碼有:

#include <iostream> 
#include <string> 
#include <windows.h> 
using namespace std; 

DISPLAY_DEVICE GetPrimaryDevice() 
{ 
    int index=0; 
    DISPLAY_DEVICE dd; 
    dd.cb = sizeof(DISPLAY_DEVICE); 

    while (EnumDisplayDevices(NULL, index++, &dd, 0)) 
    { 
     if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) return dd; 
    } 
    return dd; 
} 

BOOL SetDisplayResolution(long degrees) 
{ 
    DISPLAY_DEVICE dd = GetPrimaryDevice(); 
    DEVMODE dm; 
    ZeroMemory(&dm, sizeof(dm)); 
    dm.dmSize = sizeof(DEVMODE); 
    if (!EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm)) 
    { 
     printf("EnumDisplaySettings failed:%d\n", GetLastError()); 
     return FALSE; 
    } 
    switch(degrees) 
    { 
    case 90: 
     dm.dmDisplayOrientation = DMDO_90; //error C2065: 'DMDO_90' : undeclared identifier 
     break; 
    case 270: 
     dm.dmDisplayOrientation = DMDO_270; //error C2065: 'DMDO_90' : undeclared identifier 
     break; 
    default: 
     break; 

    } 
    DWORD dwTemp = dm.dmPelsHeight; 
    dm.dmPelsHeight = dm.dmPelsWidth; 
    dm.dmPelsWidth = dwTemp; 

    dm.dmFields = (DM_PELSWIDTH | DM_PELSHEIGHT); 
    if (ChangeDisplaySettings(&dm, CDS_TEST) !=DISP_CHANGE_SUCCESSFUL) 
    { 
     printf("\nIllegal graphics mode: %d\n", GetLastError()); 
     return FALSE; 
    } 

    return (ChangeDisplaySettings(&dm, 0)==DISP_CHANGE_SUCCESSFUL); 
} 

int main() 
{ 
    if (SetDisplayResolution(90)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

} 

回答

0

我使用VS 2008,這個常量在wingdi.h定義(請使用Intellisense或一個好的代碼標記器,如Visual Assist來顯示這些常量的定義)。

wingdi.h頭的相關部分是這樣的:

#if(WINVER >= 0x0501) 
/* DEVMODE dmDisplayOrientation specifiations */ 
#define DMDO_DEFAULT 0 
#define DMDO_90   1 
#define DMDO_180  2 
#define DMDO_270  3 

注意WINVER必須是> = 0x0501,因此更可能需要正確設置WINVER預處理符號。

請訪問以下鏈接來修改WINVER: http://msdn.microsoft.com/en-us/library/6sehtctf.aspx

+0

感謝保羅,即固定它。 – user1211653 2014-09-04 11:38:40