游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4044|回复: 9

我的不能显示..............和书上的一样啊

[复制链接]

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2003-9-3 15:56:00 | 显示全部楼层 |阅读模式
我照书上的源码写入后怎么什么也没有啊?在编译中有几个错误也改正了,提示没有错误.就是不显示窗口什么也没有,后来我又把书里带的源码编译了就可以.但我把他的源码复制到一个新的项目里就什么都没有了,也是不显窗口,这倒底是怎么回事儿啊???

我放上代码...
#include <d3d9.h>

LPDIRECT3D9 g_pD3D=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;

HRESULT InitD3D( HWND hWnd );
VOID Cleanup();
VOID Render();
LRESULT WINAPI MsgProc( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam );

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPreinst, LPSTR c_s,
INT c_show )
{

WNDCLASS wndclass={ 0, MsgProc, 0, 0, hInst, NULL,
NULL, NULL, NULL, "Direct" };

RegisterClass( &wndclass );

HWND hWnd=CreateWindow( "Direct", "direct001",
WS_OVERLAPPEDWINDOW, 100, 100, 300,
300, NULL, NULL,wndclass.hInstance,
NULL );


if( SUCCEEDED( InitD3D( hWnd ) ) )
{

ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );

MSG msg;


while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}


}

Cleanup();
UnregisterClass( "Direct", wndclass.hInstance );


return 0;

}


HRESULT InitD3D( HWND hWnd )
{

if( NULL==( g_pD3D=Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

D3DDISPLAYMODE d3ddm;

if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT,
&d3ddm ) ) )
return E_FAIL;

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3ddm ) );
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=d3ddm.Format;

if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{

return E_FAIL;

}
return S_OK;

}

VOID Cleanup()
{

if( g_pd3dDevice!=NULL )
g_pd3dDevice->Release();

if( g_pD3D!=NULL )
g_pD3D->Release();

}

VOID Render()
{

if( NULL==g_pd3dDevice )
return;

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );
g_pd3dDevice->BeginScene();
//
g_pd3dDevice->EndScene();
g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );

}

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{

switch( msg )
{
case WM_PAINT:

Render();
ValidateRect( hWnd, NULL );
return 0;

case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}

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

}

[em17] [em17] [em17] [em17]

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2003-9-3 17:34:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

不清楚……

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-3 18:56:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

不行啊,老兄.和原来一样啊改过也不行.是不是我的系统有问题啊.

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-3 21:20:00 | 显示全部楼层

Re: 我的不能显示..............和书上的一样啊

大家都很忙,让我来吧!!!(请吃饭啊):-)


#include <d3d9.h>

LPDIRECT3D9 g_pD3D=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;

HRESULT InitD3D( HWND hWnd );
VOID Cleanup();
VOID Render();
LRESULT WINAPI MsgProc( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam );

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPreinst, LPSTR c_s,
INT c_show )
{

WNDCLASS wndclass={ 0, MsgProc, 0, 0, hInst, LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH), NULL, "Direct" };

if(!(RegisterClass( &wndclass )))
return -1;

HWND hWnd=CreateWindow( "Direct", "direct001",
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300,
                         300, GetDesktopWindow(), NULL,hInst,
                         NULL );


if( SUCCEEDED( InitD3D( hWnd ) ) )
{

ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );

MSG msg;


while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}


}

Cleanup();
UnregisterClass( "Direct", wndclass.hInstance );


return 0;

}


HRESULT InitD3D( HWND hWnd )
{

if( NULL==( g_pD3D=Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

D3DDISPLAYMODE d3ddm;

if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT,
&d3ddm ) ) )
return E_FAIL;

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=d3ddm.Format;

if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{

return E_FAIL;

}
return S_OK;

}

VOID Cleanup()
{

if( g_pd3dDevice!=NULL )
g_pd3dDevice->Release();

if( g_pD3D!=NULL )
g_pD3D->Release();

}

VOID Render()
{

if( NULL==g_pd3dDevice )
return;

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );
g_pd3dDevice->BeginScene();
//
g_pd3dDevice->EndScene();
g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );

}

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{

switch( msg )
{
case WM_PAINT:

Render();
ValidateRect( hWnd, NULL );
break;

case WM_DESTROY:
PostQuitMessage( 0 );
break;

default:

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


}



}

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-3 21:25:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

顺便问一句,有谁知道破解PAINTSHOP PRO的方法,谢了

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-3 21:26:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

洗澡去了

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-4 00:13:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

老兄,有点进展啊.能看见窗口出来了,不过出来一下就没了.怎么办啊.

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-4 00:42:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

老兄,已经好了.写错了显示窗口的循环.
谢谢你给我帮忙啊.

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-4 07:59:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

hehe,



24

主题

64

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-3-14 00:31:00 | 显示全部楼层

Re:我的不能显示..............和书上的一样啊

你的错误是在使用//ZeroMemory() 不正确         这是内存清零函数
它的使用方法是Zero(这里加起始地址位置,这里加后面多少字节的内存长度)
d3dpp是用的是页面后缓冲区调配器(D3DPRESENT_PARAMETERS)类型
而d3ddm是D3D程序显示模式(D3DDISPLAYMODE)类型
它们是不同的类型,你这是张冠李戴。
你前面已经将d3ddm使用默认的显示模式。也就是当前模式。
所以,你需要将后面的页面后缓冲区调配器清零就可以拉。
不过,你清错对象拉。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 22:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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