c语言 directx,创建DirectX环境

一、首先创建一个”Hello Word!” Win32 Application程序

二、删除WM_PAINT消息中的以下内容

// TODO: Add any drawing code here…

RECT rt;

GetClientRect(hWnd, &rt);

DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);

三、修改函数

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASS wc;

//wc.cbSize = sizeof(WNDCLASS);

wc.style    = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc  = (WNDPROC)WndProc;

wc.cbClsExtra  = 0;

wc.cbWndExtra  = 0;

wc.hInstance  = hInstance;

wc.hIcon    = LoadIcon(hInstance, IDI_APPLICATION);

wc.hCursor  = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground  = NULL;

wc.lpszMenuName  = NULL;

wc.lpszClassName  = szWindowClass;

return RegisterClass (&wc );

}

四、修改函数

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindowEx(WS_EX_TOPMOST,szWindowClass, szTitle, 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;

}

五、定义DirectDraw

a) 定义全局变量

LPDIRECTDRAW lpDD;

LPDIRECTDRAWSURFACE lpDDSPrimary;

LPDIRECTDRAWSURFACE lpDDSBack;

b)修改函数

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindowEx(WS_EX_TOPMOST,szWindowClass, szTitle, WS_POPUP,

0, 0,GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

DDSURFACEDESC ddsd;

DDSCAPS ddscaps;

HRESULT ddrval;

HDC hdc;

char buf[256];

ddrval=DirectDrawCreate(NULL,&lpDD,NULL);

if (ddrval==DD_OK)

{

ddrval=lpDD->SetCooperativeLevel (hWnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);

if (ddrval==DD_OK)

{

ddrval=lpDD->SetDisplayMode (640,480,8);

if (ddrval==DD_OK)

{

ddsd.dwSize =sizeof(ddsd);

ddsd.dwFlags =DDSD_CAPS|DDSD_BACKBUFFERCOUNT;

ddsd.ddsCaps.dwCaps =DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;

ddsd.dwBackBufferCount =1;

ddrval=lpDD->CreateSurface (&ddsd,&lpDDSPrimary,NULL);

if (ddrval==DD_OK)

{

ddscaps.dwCaps =DDSCAPS_BACKBUFFER;

ddrval=lpDDSPrimary->GetAttachedSurface (&ddscaps,&lpDDSBack);

if(ddrval==DD_OK)

{

return TRUE;

}

}

}

}

}

DestroyDirectDrawObjects();

DestroyWindow(hWnd);

return FALSE;

}

c)添加头文件

#include

d)在project|setting|link添加ddraw.lib

e)添加函数声明及函数体

static void DestroyDirectDrawObjects(void);

static void DestroyDirectDrawObjects(void)

{

if(lpDD!=NULL)

{

lpDD->RestoreDisplayMode ();

if(lpDDSPrimary!=NULL)

{

lpDDSPrimary->Release ();

lpDDSPrimary=NULL;

}

lpDD->Release ();

lpDD=NULL;

}

}

六、添加

case WM_KEYDOWN:

switch(wParam)

{

case VK_ESCAPE:

case VK_F12:

DestroyDirectDrawObjects();

PostMessage(hWnd,WM_CLOSE,0,0);

break;

}

break;

zcgzcg1@mail.china.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值