游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2762|回复: 0

求助!!我不知道怎么把directx的东西 ,加到游戏中, 程

[复制链接]

23

主题

112

帖子

870

积分

高级会员

Rank: 4

积分
870
QQ
发表于 2005-3-14 00:23:00 | 显示全部楼层 |阅读模式
dirextx的东西 讲得很少,我不知道怎么把这东西加进去,高手指导一下。
我写的一个程序如下:
#include <windows.h>
#include <ddraw.h>
#pragma comment (lib,"ddraw.lib")

//函数声明
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
BOOL InitDDraw( );

LPDIRECTDRAW9 lpDD; // DirectDraw对象的指针
LPDIRECTDRAWSURFACE9 lpDDSPrimary; // DirectDraw主页面的指针
LPDIRECTDRAWSURFACE9 lpDDSBuffer; // DirectDraw后台缓存的指针
LPDIRECTDRAWSURFACE9 lpDDSBack; // 存放背景图的页面的指针

//变量说明
HWND hWnd; //窗口句柄
//************************************************************
//函数:WinMain( )
//功能:Windows程序入口函数。创建主窗口,处理消息循环
//************************************************************
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
        if ( !InitWindow( hInstance, nCmdShow ) )
        {
                Cleanup();
                return FALSE; //创建主窗口
        }                         //如果创建不成功则返回FALSE并同时退出程序

MSG msg;
//进入消息循环:
for(;;)
{
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
                if ( msg.message==WM_QUIT) break;
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
}
return msg.wParam;
}

//************************************************************
//函数:InitWindow( )
//功能:创建窗口
//************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
        //定义窗口风格:
        WNDCLASS wc;
        wc.style = CS_HREDRAW;
        wc.lpfnWndProc = (WNDPROC)WinProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = NULL;
        wc.hCursor = NULL;
        wc.hbrBackground = CreateSolidBrush (RGB(100, 0, 0)); //暗红色的背景
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "My_Test";
        RegisterClass(&wc);//注册窗口
//按所给参数创造窗口
hWnd = CreateWindow("My_Test",
"My first program",
WS_POPUP | WS_MAXIMIZE,0,0,
1024, //此函数返回屏幕宽度
768, //此函数返回屏幕高度
NULL,NULL,hInstance,NULL);
        if( !hWnd ) return FALSE;
        ShowWindow(hWnd,nCmdShow);//显示窗口
        UpdateWindow(hWnd);//刷新窗口
        InitDDraw( );

        return TRUE;
}

//************************************************************
//函数:WinProc( )
//功能:处理窗口消息
//************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_KEYDOWN://击键消息
switch( wParam )
{
case VK_ESCAPE:
MessageBox(hWnd,"ESC键按下了! 确定后退出!","Keyboard",MB_OK);
PostMessage(hWnd, WM_CLOSE, 0, 0);//给窗口发送WM_CLOSE消息
break;
}
return 0; //处理完一个消息后返回0

                case WM_CLOSE: //准备退出
                DestroyWindow( hWnd ); //释放窗口
                return 0;

case WM_RBUTTONDOWN:
MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
return 0;

        case WM_DESTROY: //如果窗口被人释放…
        PostQuitMessage( 0 ); //给窗口发送WM_QUIT消息
        return 0;
}
//调用缺省消息处理过程
return DefWindowProc(hWnd, message, wParam, lParam);
}

BOOL InitDDraw( )
{
     DDSURFACEDESC2 ddsd; // DirectDraw的页面描述
     if ( DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
                return FALSE; //创建DirectDraw对象
          //这里使用了 if ( xxx != DD_OK) 的方法进行错误检测,这是最常用的方法
        if (lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
                return FALSE; //设置DirectDraw控制级
        if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
                return FALSE; //设置显示模式
        //开始创建主页面,先清空页面描述
        memset(&ddsd, 0, sizeof(DDSURFACEDESC2));
        //填充页面描述
        ddsd.dwSize = sizeof( ddsd );
        ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT; //有后台缓存
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
        ddsd.dwBackBufferCount = 1; //一个后台缓存
     if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK )
              return FALSE; //创建主页面
        ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; //这是后台缓存
        if ( DD_OK != lpDDSPrimary->GetAttachedSurface( &ddsd.ddsCaps, &lpDDSBuffer ) )
                return FALSE; //创建后台缓存
        ddsd.dwSize = sizeof( ddsd );
        ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
        ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //这是离屏页面
        ddsd.dwHeight=480; //高
        ddsd.dwWidth=640; //宽
        if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL ) )
                return FALSE; //创建放背景图的页面
        //如还有别的页面可在此处继续创建
        return TRUE;
}

错误如下:
Deleting intermediate files and output files for project 'Game1 - Win32 Debug'.
--------------------Configuration: Game1 - Win32 Debug--------------------
Compiling...
01.cpp
f:\vc++\game1\01.cpp(10) : error C2146: syntax error : missing ';' before identifier 'lpDD'
f:\vc++\game1\01.cpp(10) : error C2501: 'LPDIRECTDRAW9' : missing storage-class or type specifiers
f:\vc++\game1\01.cpp(10) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Game1.exe - 3 error(s), 0 warning(s)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 18:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表