游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2097|回复: 4

DIRECTDRAW编译不通,不是连接问题啊~~

[复制链接]

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
发表于 2004-4-25 13:40:00 | 显示全部楼层 |阅读模式
已经做好了连接,还是有错。
// canvasFrame.cpp : implementation file
#include "stdafx.h"
#include "canvasr.h"
#include "canvasFrame.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// canvasFrame


//从这里开始创建DIRECTDRAW
LPDIRECTDRAW7              pDD7; //DIRECTDRAW 对象指针
LPDIRECTDRAWSURFACE7       pPSur;//主绘图页 对象指针(Primary Surface)
LPDIRECTDRAWSURFACE7       pBBuf;//后缓冲区 对象指针(Back Buffer)
LPDIRECTDRAWSURFACE7       pOPla;//幕后暂存区 对象指针(Offscreen Plain)
DDSCAPS2  caps;            //定义SSCAPS2结构体变量
DDSURFACEDESC2             desc; //定义DDSURFACEDESC2结构体变量
HRESULT result;            //返回信息的变量      

canvasFrame::canvasFrame()
{
        Create(NULL,"绘图窗口",WS_POPUP);
        hdc = ::CreateCompatibleDC(NULL);
        bitmap = (HBITMAP):oadImage(NULL,"bground.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
        ::SelectObject(hdc,bitmap);      
        pOPla->GetDC( &hdc1 );         
        ::BitBlt( hdc1 , 0 , 0 , 640 , 480 , hdc , 0 , 0 , SRCCOPY );
        pOPla->ReleaseDC( hdc1 );      
}

canvasFrame::~canvasFrame()
{
        delete hdc;
        delete hdc1;
        delete bitmap;
        pDD7->Release();
        pPSur->Release();
        pOPla->Release();
}


BEGIN_MESSAGE_MAP(canvasFrame, CFrameWnd)
        //{{AFX_MSG_MAP(canvasFrame)
        ON_WM_CREATE()
        ON_WM_PAINT()
        ON_WM_CHAR()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// canvasFrame message handlers

int canvasFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
                return -1;
    result = DirectDrawCreateEx(NULL, (VOID**)&pDD7, IID_IDirectDraw7, NULL);

    if (result != DD_OK)
                MessageBox("建立DirectDraw对象失败!");
        result = pDD7->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE |
                                 DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT );

        if(result !=DD_OK)
                MessageBox("设定程序协调层级失败!");
        result = pDD7->SetDisplayMode(640,480,16,0,DDSDM_STANDARDVGAMODE);  

        if(result !=DD_OK)
                MessageBox("设定屏幕显示模式失败!");
        memset(&desc,0,sizeof(desc));      
        desc.dwSize = sizeof(desc);           
        desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        desc.dwBackBufferCount = 1;        
        desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
        result = pDD7->CreateSurface(&desc,&pPSur,NULL);

        if(result !=DD_OK)
                 MessageBox("建立主绘图页失败!");
        caps.dwCaps = DDSCAPS_BACKBUFFER;  
        result = pPSur->GetAttachedSurface(&caps,&pBBuf);

        if(result !=DD_OK)
                MessageBox("连接后缓冲区失败!");
        memset(&desc,0,sizeof(desc));        
        desc.dwSize = sizeof(desc);
        desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
        desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
        desc.dwWidth = 640;
        desc.dwHeight = 480;
        result = pDD7->CreateSurface(&desc, &pOPla, NULL);

        if(result !=DD_OK)
                  MessageBox("建立幕后暂存区失败!");
        return 0;
}


void canvasFrame::OnPaint()
{
        CPaintDC dc(this);
        pBBuf->BltFast( 0 , 0 , pOPla, CRect(0,0,640,480) , DDBLTFAST_WAIT );
        pPSur->Flip( NULL , DDFLIP_WAIT );
}

void canvasFrame::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
        CFrameWnd::OnChar(nChar, nRepCnt, nFlags);
        if( nChar== VK_ESCAPE )   
                PostMessage(WM_CLOSE );
}

*****************************************************
--------------------Configuration: canvas - Win32 Debug--------------------
Compiling...
canvasFrame.cpp
C:\My Documents\CH08-1\canvasFrame.cpp(17) : error C2146: syntax error : missing ';' before identifier 'pDD7'
C:\My Documents\CH08-1\canvasFrame.cpp(17) : error C2501: 'LPDIRECTDRAW7' : missing storage-class or type specifiers
C:\My Documents\CH08-1\canvasFrame.cpp(17) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

canvas.exe - 3 error(s), 0 warning(s)



1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20527
发表于 2004-4-25 13:43:00 | 显示全部楼层

Re:DIRECTDRAW编译不通,不是连接问题啊~~

#include "stdafx.h"
#include "canvasr.h"
#include "canvasFrame.h"

是不是没包含ddraw.h?

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
 楼主| 发表于 2004-4-25 13:51:00 | 显示全部楼层

Re:DIRECTDRAW编译不通,不是连接问题啊~~

包含了,也没用:(

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
 楼主| 发表于 2004-4-25 14:37:00 | 显示全部楼层

Re:DIRECTDRAW编译不通,不是连接问题啊~~

行了,把DX连接放到第一行!

5

主题

255

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2004-4-25 22:11:00 | 显示全部楼层

Re:DIRECTDRAW编译不通,不是连接问题啊~~

error C2146: syntax error : missing ';' before identifier 'pDD7'
这个好解决啊!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-30 12:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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