游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2466|回复: 3

大家帮看看那错了~血都改出来了

[复制链接]

6

主题

13

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2005-4-3 18:50:00 | 显示全部楼层 |阅读模式
一运行就说会出错~~~~~~
郁闷到了


directx.h




///////////////////////////////////////////////////////////////////////////
const int  SCREEN_WIDTH  =640 ;
const int  SCREEN_HEIGHT =480 ;
///////////////////////////////////////////////////////////////////////////
LPDIRECTDRAW7         lpdd         = NULL;
LPDIRECTDRAWSURFACE7  lpddsprimary = NULL;
LPDIRECTDRAWPALETTE   lpddpal      = NULL;
DDSURFACEDESC2        ddsd;
PALETTEENTRY          palette[256];  
///////////////////////////////////////////////////////////////////////////
class DirectX
{
public:
//        DirectX(void);
        bool game_start();
        bool game_main();
};


bool DirectX::game_start()
{
//设置dx接口
        if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
        {
                return(1);
        }
//设置windows的协作模式
        lpdd->SetCooperativeLevel(NULL, DDSCL_NORMAL);
//设置显示模式
        lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,8,0,0);
        return(0);
//创建一个显示主表面
        memset(&ddsd,0,sizeof(ddsd));
        ddsd.dwSize         =sizeof(ddsd);
        ddsd.dwFlags        =DDSD_CAPS;
        ddsd.ddsCaps.dwCaps =DDSCAPS_PRIMARYSURFACE;
   if (FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL)))
   {

          return(1);
        }
//设置绘图板
        for(int color =1;color<255;color++)
        {
                palette[color].peRed   =rand()&256;
                palette[color].peGreen =rand()&256;
                palette[color].peBlue  =rand()&256;

                palette[color].peFlags =PC_NOCOLLAPSE;
        }
            
            palette[0].peRed   =0;
                palette[0].peGreen =0;
                palette[0].peBlue  =0;
        palette[0].peFlags =PC_NOCOLLAPSE;

                palette[255].peRed   =255;
                palette[255].peGreen =255;
                palette[255].peBlue  =255;
        palette[255].peFlags =PC_NOCOLLAPSE;

        if (FAILED(lpdd->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&lpddpal, NULL)))
        {

          return(1);
        }

    if (FAILED(lpddsprimary->SetPalette(lpddpal)))
    {
           return(1);
    }
   
}

bool DirectX::game_main()
{

memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
if (FAILED(lpddsprimary->Lock(NULL, &ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL)))
   {
    return(1);
   }

   if (FAILED(lpddsprimary->Unlock(NULL)))
   {
           return(1);
   }
return(1);
       
}
























win32.cpp


#define WIN32_LEAN_ANP_MEAN   //不使用mfc编译

#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"dxerr8.lib")
#pragma comment(lib,"winmm.lib")

#define INITGUID // make sure directX guids are included

#include <windows.h>   // include important windows stuff
#include <windowsx.h>
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <io.h>
#include <fcntl.h>

#include <ddraw.h>
#include"resource.h"
#include"directx.h"
////////////////////////////////////////////////////////////////////////////////////
//定义常量
#define windows_name "exp"

//消息循环
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
        PAINTSTRUCT ps;
        HDC         hdc;


        switch(msg)
        {
        case WM_CREATE:
                {
                        return 0;
                }
                break;

        case WM_PAINT:
                {
                        hdc =BeginPaint(hwnd,&ps);
                        EndPaint(hwnd,&ps);


                        return 0;
                }
                break;

        case WM_DESTROY:
                {
                        PostQuitMessage(0);
                        return 0;
                }
                break;
        case WM_KEYDOWN:
                        switch( wparam )
                        {
                        case VK_ESCAPE:
                                PostMessage(hwnd, WM_CLOSE, 0, 0);
                        break;
                        }
                        break;
        default:break;
        }

        return (DefWindowProc(hwnd,msg,wparam,lparam));
}


int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
        WNDCLASSEX wc;
        HWND       hwnd;
        MSG        msg;
   
        DirectX DX;

    wc.cbSize          =sizeof(WNDCLASSEX);
        wc.style           =CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc     =WindowProc;
        wc.cbClsExtra      =0;
        wc.cbWndExtra      =0;
        wc.hInstance       =hinstance;
        wc.hIcon           =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));
        wc.hCursor         =LoadCursor(hinstance,IDC_ARROW);
        wc.hbrBackground   =(HBRUSH)GetStockObject(BLACK_BRUSH);
        wc.lpszMenuName    =NULL;
        wc.lpszClassName   =windows_name;
        wc.hIconSm         =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON2));


        if(!RegisterClassEx(&wc))
                return 0;

   
        if(!(hwnd = CreateWindowEx(
                                       NULL,
                                                           windows_name,
                                                           "exp!",
                                                           WS_POPUP | WS_VISIBLE,
                                                           0,
                                                           0,
                                                           GetSystemMetrics(SM_CXSCREEN),
                                                           GetSystemMetrics(SM_CYSCREEN),                                                         
                                                           NULL,
                                                           NULL,
                                                       hinstance,
                                                           NULL)))
           return 0;
    DX.game_start();

        while(TRUE)
        {
   
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
           {
          
       if (msg.message == WM_QUIT)
           break;          
           TranslateMessage(&msg);
           DispatchMessage(&msg);
           }
   
      
  DX.game_main();
      
        }

        return(msg.wParam);
}

1

主题

48

帖子

48

积分

注册会员

Rank: 2

积分
48
发表于 2005-4-4 15:45:00 | 显示全部楼层

Re:大家帮看看那错了~血都改出来了

你要说明错误提示是啥。

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2005-4-5 00:06:00 | 显示全部楼层

Re:大家帮看看那错了~血都改出来了

你的错误在这里:
//设置windows的协作模式
lpdd->SetCooperativeLevel(NULL, DDSCL_NORMAL);
//设置显示模式
lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,8,0,0);

你好像是想设置全屏模式,但是却把协作模式设成了窗口模式用的模式,看看SDK,里面说全屏时的协作模式应该是独占模式。
暂时先发现这个错误!

6

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2005-4-5 11:08:00 | 显示全部楼层

Re:大家帮看看那错了~血都改出来了

我是这样设置windows的协作模式:
lpdd->SetCooperativeLevel(main_hwnd,
                                      DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX |
                                      DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 02:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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