游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2880|回复: 5

draw问题!帮帮忙啊!

[复制链接]

8

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
发表于 2005-7-22 21:21:00 | 显示全部楼层 |阅读模式
#include <windows.h>

#include <windowsx.h>

#include <ddraw.h>

LPDIRECTDRAW lpDD; // DirectDraw对象

LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw主页面

char szMsg1[] = "Hello World, I am DirectDraw boy !";

char szMsg2[] = "按 ESC 退出";

//函数声明

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

BOOL InitDDraw( void );

void FreeDDraw( void );

//*******************************************************************

//函数:WinMain()

//*******************************************************************

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,

                      LPSTR lpCmdLine, int nCmdShow)

{

    MSG msg;

    //初始化主窗口

    if ( !InitWindow( hInstance, nCmdShow ) )

        return FALSE;

    //初始化DirectDraw环境,并实现DirectDraw功能

    if ( !InitDDraw())

    {

        MessageBox(GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK );

        FreeDDraw();

        DestroyWindow(GetActiveWindow());

        return FALSE;

    }

    //进入消息循环

    while (GetMessage(&msg, NULL, 0, 0))

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }
    return msg.wParam;

}

//******************************************************************

//函数:InitWindow()

//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )

{

    HWND hwnd; //窗口句柄

    WNDCLASS wc; //窗口类结构

    //填充窗口类结构

    wc.style = 0;

    wc.lpfnWndProc = WinProc;

    wc.cbClsExtra = 0;

    wc.cbWndExtra = 0;

    wc.hInstance = hInstance;

    wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );

    wc.hCursor = LoadCursor( NULL, IDC_ARROW );

    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

    wc.lpszMenuName = NULL;

    wc.lpszClassName = "dxHello";

    //注册窗口类

    RegisterClass( &wc );

    //创建主窗口

    hwnd = CreateWindowEx(

    0,

    "dxHello",

    "",

    WS_POPUP,

    0, 0,

    GetSystemMetrics( SM_CXSCREEN ),

    GetSystemMetrics( SM_CYSCREEN ),

    NULL,

    NULL,

    hInstance,

    NULL );

    if( !hwnd ) return FALSE;

    //显示并更新窗口

    ShowWindow( hwnd, nCmdShow );

    UpdateWindow( hwnd );

    return TRUE;

    }

//******************************************************************

//函数:WinProc()

//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam )

{

    switch( message )

    {

        case WM_KEYDOWN://击键消息

            switch( wParam )

            {

                case VK_ESCAPE:

                    PostMessage(hWnd, WM_CLOSE, 0, 0);

                    break;

            }

            break;

        case WM_DESTROY://退出消息

            FreeDDraw();

            PostQuitMessage( 0 );

            break;

    }

    //调用缺省消息处理过程

    return DefWindowProc(hWnd, message, wParam, lParam);

}

//******************************************************************

//函数:InitDDraw()

//******************************************************************

BOOL InitDDraw(void)

{

    DDSURFACEDESC ddsd; //页面描述
        HDC hdc; //设备环境句柄
    //创建DirectCraw对象

    if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK ) return false;

    // 取得独占和全屏模式

    if ( lpDD->SetCooperativeLevel( GetActiveWindow(),

                    DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK)

        return false;

    //设置显示模式

    if ( lpDD->SetDisplayMode( 640, 480, 8 ) != DD_OK) return FALSE;
    //填充主页面信息

    ddsd.dwSize = sizeof( ddsd );

    ddsd.dwFlags = DDSD_CAPS;

    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    //创建主页面对象

    if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)

        return false;

    //输出文字

    if ( lpDDSPrimary->GetDC(&hdc) != DD_OK) return false;

    SetBkColor( hdc, RGB( 0, 0, 255 ) );

    SetTextColor( hdc, RGB( 255, 255, 0 ) );

    TextOut( hdc, 220, 200, szMsg1, lstrlen(szMsg1));

    TextOut( hdc, 280, 240, szMsg2, lstrlen(szMsg2));

        lpDDSPrimary->ReleaseDC(hdc);
    return TRUE;

}

//******************************************************************

//FreeDDraw()

//******************************************************************

void FreeDDraw( void )

{

    if( lpDD != NULL )

    {

        if( lpDDSPrimary != NULL )

        {

            lpDDSPrimary->Release();

            lpDDSPrimary = NULL;

        }
               
        lpDD->Release();

        lpDD = NULL;

    }

}


程序通过编译并且可以运行!可就是不能显示文字!帮我看看有什么问题啊!

3

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-7-22 23:57:00 | 显示全部楼层

Re:draw问题!帮帮忙啊!

单线程,而且还GetMessage,本身就有问题了

8

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
 楼主| 发表于 2005-7-23 12:27:00 | 显示全部楼层

Re:draw问题!帮帮忙啊!

楼上的能不能说清楚一些!我刚学,

3

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-7-23 14:04:00 | 显示全部楼层

Re:draw问题!帮帮忙啊!

你的GameLoop在哪里?

8

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
 楼主| 发表于 2005-7-23 14:46:00 | 显示全部楼层

Re:draw问题!帮帮忙啊!

但我只是在初始化时显示字啊!应该没被刷新掉!

2

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-7-24 10:59:00 | 显示全部楼层

Re:draw问题!帮帮忙啊!

应该是被刷新掉了 我在这里加了个短点lpDDSPrimary->ReleaseDC(hdc);调试 看到了szmsg1
我也是才开始学directdraw的 请多指教哈 我的qq是22508466
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-26 13:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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