C++ 错误:包括windows.h时未在作用域中声明SetLayeredWindowAttributes

C++ 错误:包括windows.h时未在作用域中声明SetLayeredWindowAttributes,c++,winapi,compiler-errors,C++,Winapi,Compiler Errors,当我尝试编译代码时,编译器代码块会给我以下错误: c:\blah.cpp|67|error: 'SetLayeredWindowAttributes' was not declared in this scope 我包括windows.h,所以我不明白为什么会发生这种情况。以下是完整的代码: // main.cpp : Defines the entry point for the application. // #include "C:\Program Files\Microsoft Dir

当我尝试编译代码时,编译器代码块会给我以下错误:

c:\blah.cpp|67|error: 'SetLayeredWindowAttributes' was not declared in this scope
我包括windows.h,所以我不明白为什么会发生这种情况。以下是完整的代码:

// main.cpp : Defines the entry point for the application. //
#include "C:\Program Files\Microsoft DirectX SDK (August 2008)\Include\D3dx9core.h"
#include "C:\Documents and Settings\Death\My Documents\Downloads\DXSprite\DXSprite\resource.h"
#include <windows.h>
#include <string>
#include <stdio.h> //----------------------------------------------------------------------------- // GLOBALS //----------------------------------------------------------------------------- HWND                      g_hWnd                  = NULL; LPDIRECT3D9                 g_pD3D                  = NULL; LPDIRECT3DDEVICE9           g_pD3DDevice            = NULL; ID3DXSprite
*               g_pD3DXSprite           = NULL; LPDIRECT3DTEXTURE9          g_pTexture              = NULL; const int                   SCREEN_WIDTH            = 800; const int                    SCREEN_HEIGHT           = 600;

//----------------------------------------------------------------------------- // PROTOTYPES //----------------------------------------------------------------------------- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); HRESULT  InitializeD3D       ( ); void RenderFrame           ( );

//----------------------------------------------------------------------------- // Name: WinMain() // Desc: The application's entry point //----------------------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow ) {  WNDCLASSEX  winClass;   MSG         uMsg;   HRESULT     hr;

    memset(&uMsg,0,sizeof(uMsg));

    winClass.lpszClassName = "MY_WINDOWS_CLASS";    winClass.cbSize       
= sizeof(WNDCLASSEX);   winClass.style         = CS_HREDRAW | CS_VREDRAW;   winClass.lpfnWndProc   = WindowProc;    winClass.hInstance 
= hInstance;    winClass.hIcon         = LoadIcon(hInstance, (LPCTSTR)IDC_DXSPRITE);
    winClass.hIconSm       = LoadIcon(hInstance, (LPCTSTR)IDC_DXSPRITE);    winClass.hCursor       = LoadCursor(NULL, IDC_ARROW);   winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);   winClass.lpszMenuName  = NULL;  winClass.cbClsExtra    = 0;     winClass.cbWndExtra    = 0;

    if( !RegisterClassEx(&winClass) )       return E_FAIL;

    g_hWnd = CreateWindowEx( NULL, "MY_WINDOWS_CLASS",
                             "Direct3D 9 - ID3DXSprite Example",
                             WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                             0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, hInstance, NULL );

    if( g_hWnd == NULL )        return E_FAIL;

    ShowWindow( g_hWnd, nCmdShow );
    UpdateWindow( g_hWnd );    SetLayeredWindowAttributes(GetActiveWindow(), NULL, 255, LWA_ALPHA);     //----------------------------------------------------------------  // Create the DirectX device    //----------------------------------------------------------------  if (FAILED( InitializeD3D()))       return 0;


    //----------------------------------------------------------------  // CREATE THE ID3DXSprite   //----------------------------------------------------------------

    // Create the ID3DXSprite interface object  hr = D3DXCreateSprite(g_pD3DDevice, &g_pD3DXSprite );   if( FAILED(hr) )        return hr;


    //----------------------------------------------------------------  // LOAD THE TEXTURE FOR THE SPRITE  //----------------------------------------------------------------

    // --------------------------------------------------------     // Load the texture.  I decided to use the extended     // version of the texture loading function just to show what    // it would look like.  // The texture was created with Photoshop with a transparent    // background to start with.  Then line cross hairs were added.     //  // Note - If you don't use a texture image that has a power of  // 2 size for the width or height then the image may not load   // properly.  This image is 256x256.    //
    D3DXCreateTextureFromFileEx(        g_pD3DDevice,       "C:\\Documents and Settings\\Death\\My Documents\\45handold2.tga",              // Our texture image!       D3DX_DEFAULT,               // width        D3DX_DEFAULT,               // height       D3DX_DEFAULT,               // MIP levels       0,                          // usage        D3DFMT_DXT1,                // texture format       D3DPOOL_MANAGED,            // mem pool         D3DX_DEFAULT,               // filter       D3DX_DEFAULT,               // MIP filter       0,                          // transparent color key        NULL,                       // image info struct        NULL,                       // palette      &g_pTexture);               // the returned texture, if success

    if ( FAILED(hr) )       return hr;





    // ---------    // Main Loop    // ---------    while( uMsg.message != WM_QUIT )    {       if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) )       {           TranslateMessage( &uMsg );          DispatchMessage( &uMsg );       }   }

    // -------------------------    // Release directx resources    //
-------------------------   if (g_pD3DXSprite)  {       g_pD3DXSprite->Release();       g_pD3DXSprite = NULL;   }

    if (g_pTexture)     {       g_pTexture->Release();      g_pTexture = NULL;  }

    if (g_pD3DDevice)   {       g_pD3DDevice->Release();        g_pD3DDevice = NULL;    }




    UnregisterClass( "MY_WINDOWS_CLASS", winClass.hInstance );  return (int)uMsg.wParam; }

//----------------------------------------------------------------------------- // Name: WindowProc() // Desc: The window's message handler //----------------------------------------------------------------------------- LRESULT CALLBACK WindowProc( HWND   hWnd,
                             UINT   msg,
                             WPARAM wParam,
                             LPARAM lParam ) {

    switch( msg )   {
        case WM_KEYDOWN:        {           switch( wParam )            {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                    break;

            }       }
        break;

        case WM_CLOSE:      {           PostQuitMessage(0);         }

        case WM_DESTROY:        {
            PostQuitMessage(0);         }
        break;

        default:        {
            RenderFrame();          return DefWindowProc( hWnd, msg, wParam, lParam );      }       break;  }

    return 0; }

//----------------------------------------------------------------------------- // Name: InitializeD3D() // Desc: Create DirectX interface objects //        Initialize the view matrix. //      Setup render states that will not need changing throughout //       the life of the application. //----------------------------------------------------------------------------- HRESULT InitializeD3D( ) {    HRESULT hr;

    // Create a direct 3D interface object
    g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );

    if( g_pD3D == NULL )    {       // TO DO: Respond to failure of Direct3DCreate9         return E_FAIL;  }

    D3DDISPLAYMODE d3ddm;

    if( FAILED( hr = g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )    {       // TO DO: Respond to failure of GetAdapterDisplayMode       return hr;  }


    //  if( FAILED( hr = g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                                                d3ddm.Format, D3DUSAGE_DEPTHSTENCIL,
                                                D3DRTYPE_SURFACE, D3DFMT_D16 ) ) )  {       if( hr == D3DERR_NOTAVAILABLE )             // POTENTIAL PROBLEM: We need at least a 16-bit z-buffer!           return hr;  }

    //  // Do we support hardware vertex processing? If so, use it.     // If not, downgrade to software.   //

    D3DCAPS9 d3dCaps;

    if( FAILED( hr = g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT,
                                       D3DDEVTYPE_HAL, &d3dCaps ) ) )   {       // TO DO: Respond to failure of GetDeviceCaps       return hr;  }

    DWORD dwBehaviorFlags = 0;

    if( d3dCaps.VertexProcessingCaps != 0 )         dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;     else        dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;

    //  // Everything checks out - create a simple, windowed device.    //

    D3DPRESENT_PARAMETERS d3dpp;    memset(&d3dpp, 0, sizeof(d3dpp));

    d3dpp.BackBufferFormat       = d3ddm.Format;    d3dpp.SwapEffect             = D3DSWAPEFFECT_DISCARD;   d3dpp.Windowed               = TRUE;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;

    // Attempt to create a HAL device, end app on failure just to keep things   // simple.  In other words we are not trying to create a REF device if the  // HAL fails.
    if( FAILED( hr = g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWND_DESKTOP,
                                      dwBehaviorFlags, &d3dpp, &g_pD3DDevice ) ) )  {   //    char blah[100];
      //  snprintf (blah, 1000, "%d", hr);      //MessageBox (NULL,blah,NULL,NULL);     }


    // If we get here everything worked!    return S_OK; }


//----------------------------------------------------------------------------- // Name: RenderFrame() // Desc: Draw the image to the framebuffer. //----------------------------------------------------------------------------- void RenderFrame( ) {    if (!g_pD3DDevice && !g_pD3DXSprite && !g_pTexture)         return;


    // Clear the frame & depth buffer ready for drawing (Black color)
    g_pD3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,  0x00000000, 1.0f, 0 );

    g_pD3DDevice->BeginScene();     {       //-------------------------         // Render the sprite        //

        D3DXVECTOR3 vecPos = D3DXVECTOR3(0,0,0);

        if (g_pD3DXSprite && g_pTexture)        {           g_pD3DXSprite->Begin( D3DXSPRITE_ALPHABLEND );          g_pD3DXSprite->Draw(g_pTexture, NULL, NULL, &vecPos, 0xffffffff);           g_pD3DXSprite->End();       }


    }   g_pD3DDevice->EndScene();


    // Frame buffer to Front buffer     g_pD3DDevice->Present( NULL, NULL, NULL, NULL );

}
//main.cpp:定义应用程序的入口点//
#包括“C:\Program Files\Microsoft DirectX SDK(2008年8月)\include\D3dx9core.h”
#包括“C:\Documents and Settings\Death\My Documents\Downloads\DXSprite\DXSprite\resource.h”
#包括
#包括
#include//----------------------------------------------------------------//GLOBALS//----------------------------------------------------------------HWND g_HWND=NULL;LPDIRECT3D9 g_pD3D=NULL;LPDIRECT3DDEVICE9 g_pD3DDevice=NULL;ID3DXSprite
*g_pD3DXSprite=NULL;LPDIRECT3DTEXTURE9 g_pTexture=NULL;屏幕宽度=800;屏幕上的常数=600;
//-----------------------------------------------------------------------------//原型//---------------------------------------------------------------LRESULT回调WindowProc(HWND-HWND、UINT-uMsg、WPARAM-WPARAM、LPARAM-LPARAM);HRESULT初始化为3d();void RenderFrame();
//-----------------------------------------------------------------------------//Name:WinMain()//Desc:应用程序的入口点//----------------------------------------------------------------int-WINAPI-WinMain(HINSTANCE-HINSTANCE,
HINSTANCE HPPrevenstance,
LPSTR lpCmdLine,
int nCmdShow){WNDCLASSEX winClass;MSG uMsg;HRESULT hr;
memset(&uMsg,0,sizeof(uMsg));
winClass.lpszClassName=“MY_WINDOWS_CLASS”winClass.cbSize
=sizeof(WNDCLASSEX);winClass.style=CS|HREDRAW | CS|VREDRAW;winClass.lpfnWndProc=WindowProc;winClass.hInstance
=hInstance;winClass.hIcon=加载图标(hInstance,(LPCTSTR)IDC_DXSPRITE);
winClass.hIconSm=LoadIcon(hInstance,(LPCTSTR)IDC_DXSPRITE);winClass.hCursor=LoadCursor(NULL,IDC_箭头);winClass.hbrBackground=(HBRUSH)GetStockObject(黑色_笔刷);winClass.LPSzMenuame=NULL;winClass.cbClsExtra=0;winClass.cbWndExtra=0;
如果(!RegisterClass(&winClass))返回E_FAIL;
g_hWnd=CreateWindowEx(空,“我的WINDOWS类”,
“Direct3D 9-ID3DXSprite示例”,
WS|U重叠窗口| WS|U可见,
0,0,屏幕宽度,屏幕高度,NULL,NULL,hInstance,NULL);
如果(g_hWnd==NULL)返回E_FAIL;
展示窗口(g_hWnd,nCmdShow);
UpdateWindow(g_hWnd);SetLayeredWindowAttributes(GetActiveWindow(),NULL,255,LWA_ALPHA);//-------------------------------------------------------------------------------------创建DirectX设备//---------------------------------------如果(失败(初始化3D())返回0;
//----------------------------------------------------------------//创建ID3DXSprite//----------------------------------------------------------------
//创建ID3DXSprite接口对象hr=D3DXCreateSprite(g_pd3ddevidence,&g_pD3DXSprite);如果(失败(hr))返回hr;
//----------------------------------------------------------------//加载精灵的纹理//----------------------------------------------------------------
//-------------------------------------------------------加载纹理。我决定使用扩展//版本的纹理加载函数来显示//它的外观。//纹理是用Photoshop创建的,背景是透明的//背景。然后添加了十字线。////否te-如果不使用宽度或高度的幂为//2的纹理图像,则图像可能无法正确加载//此图像为256x256//
D3DXCreateTextureFromFileEx(g_pD3DDevice,“C:\\Documents and Settings\\Death\\My Documents\\45handold2.tga”,//我们的纹理图像!D3DX\u默认值,//宽度D3DX\u默认值,//高度D3DX\u默认值,//MIP级别0,//用法D3DFMT\u DXT1,//纹理格式D3DPOOL\u管理,//内存池D3DX\u默认值,//过滤器D3DX_DEFAULT、//MIP过滤器0、//透明颜色键NULL、//图像信息结构NULL、//调色板和g_pTexture);//返回的纹理,如果成功
如果(失败(hr))返回hr;
//-----------//主循环//-----------while(uMsg.message!=WM_QUIT){if(PeekMessage(&uMsg,NULL,0,0,PM_REMOVE)){TranslateMessage(&uMsg);DispatchMessage(&uMsg);}
//-----------------------------------//发布directx资源//
-------------------------如果(g_pD3DXSprite){g_pD3DXSprite->Release();g_pD3DXSprite=NULL;}
如果(g_pTexture){g_pTexture->Release();g_pTexture=NULL;}
如果(g_pD3DDevice){g_pD3DDevice->Release();g_pD3DDevice=NULL;}
取消注册类(“MY_WINDOWS_类”,winClass.hInstance);返回(int)uMsg.wParam;}
//-----------------------------------------------------------------------------//名称:WindowProc()//描述:窗口的消息处理程序//---------------------------------------------------------------LRESULT回调WindowProc(HW)