游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1676|回复: 6

高手请执教!我是初学者,碰到了很郁闷的问题!

[复制链接]

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2005-2-9 01:13:00 | 显示全部楼层 |阅读模式
我的程序代码如下:
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>

LPDIRECTDRAW lpdd;
LPDIRECTDRAWSURFACE lpddsprimary;
LPDIRECTDRAWSURFACE lpddsback;

char showline[] = "hello world";
BOOL bActive = TRUE;
HDC hdc;

void MainGame(void);
BOOL InitDDraw(void);
void FreeDDraw(void);


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
        HWND hwnd;
        MSG Msg;
        WNDCLASS wndclass;
        char lpszClassName[] = "window";
        char lpszTitle[] = "my_window";

        wndclass.style = 0;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = lpszClassName;

       
        if(!RegisterClass(&wndclass))
        {
                MessageBeep(0);
                return FALSE;

        }

        hwnd = CreateWindow(lpszClassName,
                                                lpszTitle,
                                                WS_POPUP,
                                                CW_USEDEFAULT,
                                                CW_USEDEFAULT,
                                                CW_USEDEFAULT,
                                                CW_USEDEFAULT,
                                                NULL,
                                                NULL,
                                                hInstance,
                                                NULL);
       
        ShowWindow(hwnd, nShowCmd);
        UpdateWindow(hwnd);

        if(!InitDDraw())
        {
                MessageBox(GetActiveWindow(), "initDDrawwERR", "ERR", MB_OK);
                FreeDDraw();
                DestroyWindow(GetActiveWindow());
                return FALSE;
        }
               

        while(1)
        {
                if(PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE))
                {
                        if(!GetMessage(&Msg, NULL, 0, 0))
                                return Msg.wParam;       
                        TranslateMessage(&Msg);
                        DispatchMessage(&Msg);
                }
                else if(bActive)
                {
                        MainGame();
                }
        }

}

//消息函数
LRESULT CALLBACK WndProc(HWND hwnd,
                                                 UINT message,
                                                 WPARAM wParam,
                                                 LPARAM lParam)
{
        switch(message)
        {
        case WM_CREATE:
                ShowCursor(false);
                bActive = true;
    case WM_KEYDOWN:
                switch(wParam)
                {
                case VK_ESCAPE:
                        PostMessage(hwnd, WM_CLOSE, 0, 0);
                        break;
                }
                break;
        case WM_DESTROY:
               
                PostQuitMessage(0);
        default:
                return DefWindowProc(hwnd, message, wParam, lParam);

        }
        return (0);
}

//初始化DirectDraw
BOOL InitDDraw(void)
{
        DDSURFACEDESC ddsd;
        DDSCAPS ddscaps;
  
        if(DirectDrawCreate(NULL, &lpdd, NULL) != DD_OK)
                return FALSE;
        if(lpdd->SetCooperativeLevel(GetActiveWindow(), DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK)
                return FALSE;
        if(lpdd->SetDisplayMode(800, 600, 16) != DD_OK)
                return FALSE;

        ZeroMemory( &ddsd, sizeof( ddsd ) );
    ZeroMemory( &ddscaps, sizeof( ddscaps ) );

        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;
       
        ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
       
        if(lpddsprimary->GetAttachedSurface(&ddscaps, &lpddsback) != DD_OK)
                return FALSE;
//        MessageBox(GetActiveWindow(), "there", "ERR", MB_OK);
    return TRUE;

}

void FreeDDraw(void)
{
        if(lpdd != NULL)
        {
                if(lpddsprimary != NULL)
                {
                        lpddsprimary->Release();
                        lpddsprimary = NULL;
                }

                if(lpddsback != NULL)
                {
                        lpddsback->Release();
                        lpddsback = NULL;
                }
                lpdd->Release();
                lpdd = NULL;
        }
}

void MainGame()
{
        static int i = 0;
        if(lpddsback->GetDC(&hdc) == DD_OK)
        {
                SetBkColor(hdc, RGB(0, 0, i));
                SetTextColor(hdc, RGB(255-i, 255-i, 0));

                TextOut(hdc, 220, 200, showline, lstrlen(showline));
                TextOut(hdc, 220, 210, showline, lstrlen(showline));
                TextOut(hdc, 220, 220, showline, lstrlen(showline));
                TextOut(hdc, 220, 230, showline, lstrlen(showline));
                i = i + 5;
                if(i == 255)
                        i=0;
        }
       
        if(lpddsprimary->Flip(NULL, 0) != DD_OK )
        {
                FreeDDraw();
        }

        lpddsback->ReleaseDC(hdc);
}

这段代码不能执行,
运行就会出现:程序由于某种问题不能执行的对话框!
我这个程序是稍微修改了一下网上的一个程序,那个程序可以执行,但是我比较两段代码,发现没什么太大区别!(也许是我看不出来!)请帮我看看这个程序哪处错了!谢谢!
请问是怎么回事????救急呀! [em6] [em6] [em6]

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2005-2-9 08:47:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

up!!!

37

主题

727

帖子

740

积分

高级会员

Rank: 4

积分
740
发表于 2005-2-9 11:37:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

太长...了
过年.....忙...

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2005-2-9 12:56:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

我是菜鸟哈!


你自己用“逐句调试”找一下,看看编译器提示哪儿错了?

18

主题

116

帖子

116

积分

注册会员

Rank: 2

积分
116
发表于 2005-2-10 23:00:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

在前面加上这两句试试
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"dxguid.lib")

37

主题

727

帖子

740

积分

高级会员

Rank: 4

积分
740
发表于 2005-2-11 11:30:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

同意楼上....
这个没加肯定会有错误
但加了是否没错误我不知道.....

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2005-2-15 22:02:00 | 显示全部楼层

Re:高手请执教!我是初学者,碰到了很郁闷的问题!

我找到哪里错了!
谢谢各位!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 08:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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