游戏开发论坛

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

求一段简单程序!

[复制链接]

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2005-3-1 22:23:00 | 显示全部楼层 |阅读模式
欲求一段非常简单的directx程序,主要的功能是:显示一张图片到屏幕上,就这么点功能!用directdraw实现!我想要切实能执行成功的程序,不要从网上copy来得例子!
如果哪位方便,请赐教!谢谢!我的邮箱是:eagle_air@126.com

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-3-2 09:30:00 | 显示全部楼层

Re:求一段简单程序!

可以找DXSDK的例子工程。

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2005-3-2 20:34:00 | 显示全部楼层

Re:求一段简单程序!

我没有完整的directx sdk,我的是只有include 和lib两个文件架的那种!!

23

主题

112

帖子

870

积分

高级会员

Rank: 4

积分
870
QQ
发表于 2005-3-3 00:54:00 | 显示全部楼层

Re:求一段简单程序!

谁能演示一下

21

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2005-3-5 11:55:00 | 显示全部楼层

Re:求一段简单程序!

其实我写了一段程序,是从网上各种资料里面提取的,但是却达不到效果,执行程序后就是花屏,所以我想找个能执行的程序看看到底啥样,也不要太复杂的!
我的程序如下:
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include "Ddutil.h"
#include "Ddutil.cpp"
LPDIRECTDRAW lpdd;//DIRECTDRAW对象
LPDIRECTDRAWSURFACE lpddsprimary;//主表面对象,即屏幕显示的表面
LPDIRECTDRAWSURFACE lpddsback;//后台表面,主表面要翻转的表面
LPDIRECTDRAWSURFACE lpddsoffscreen;//离屏表面,存放图像的表面
LPDIRECTDRAWPALETTE lpddpal;//调色板

char showline[] = "hello world";
BOOL bActive = TRUE;
HDC hdc;
RECT rect;
//函数声明
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;
        DDSURFACEDESC ddsdoffscreen;

        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, 32) != DD_OK)
                return FALSE;

        ZeroMemory( &ddsd, sizeof( ddsd ) );
    ZeroMemory( &ddscaps, sizeof( ddscaps ) );
        ZeroMemory( &ddsdoffscreen, sizeof(ddsdoffscreen));
       
        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;
//创建离屏表面       
        ddsdoffscreen.dwSize = sizeof(ddsdoffscreen);
        ddsdoffscreen.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;
        ddsdoffscreen.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
        ddsdoffscreen.dwWidth = 640;
        ddsdoffscreen.dwHeight = 480;
        if(lpdd->CreateSurface(&ddsdoffscreen, &lpddsoffscreen, NULL)!= DD_OK)
                return FALSE;
//创建后表面
        ddscaps.dwCaps = DDSCAPS_BACKBUFFER;

        if(lpddsprimary->GetAttachedSurface(&ddscaps, &lpddsback) != DD_OK)
                return FALSE;

    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;
        lpddpal = DDLoadPalette(lpdd, "mmm.bmp");

   
        if(lpddpal)
                lpddsback->SetPalette(lpddpal);
        lpddsoffscreen = DDLoadBitmap(lpdd, "mmm.bmp", 0, 0);
        rect.left = 0;
        rect.top = 0;
        rect.right = 300;
        rect.bottom = 220;

        lpddsback->BltFast(0, 0, lpddsoffscreen, &rect, DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
       

        if(lpddsprimary->Flip(NULL, 0) != DD_OK )
        {
                FreeDDraw();
        }


}

显示结果是花屏,哪位前辈能指点一二!!非常感谢!!!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 10:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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