direct3d9 渐变的窗口代码

原创 2015年11月19日 15:33:29


//包含Dx9的头文件
#include <d3d9.h>
#pragma warning( disable : 4996 ) //除去警告
#include <strsafe.h>
#pragma warning( default : 4996 )

//-----------------------------------------------------------------------------
// 全局参数
//-----------------------------------------------------------------------------
LPDIRECT3D9             g_pD3D = NULL; // 创建 D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // 我们使用的渲染设备

//-----------------------------------------------------------------------------
// 名称: InitD3D()
// 描述: 初始化 Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D(HWND hWnd)
{
 // 根据版本创建D3D对象
 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
  return E_FAIL;

 //设置参数
 D3DPRESENT_PARAMETERS d3dpp;                //参数对象,用于下面的设备创建
 ZeroMemory(&d3dpp, sizeof(d3dpp));        //用0来填充d3dpp内存区域,也就是初始化内存
 d3dpp.Windowed = TRUE;                        //设置为窗口模式
 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    //交换缓冲支持的效果类型,指定表面在交换链中是如何被交换的。这里为后备的缓存加载之后就删除。
 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;    //显示模式

 //创建设备驱动Direct3D
 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,                        //默认适配器
  D3DDEVTYPE_HAL,                            //硬件驱动
  hWnd,                                        //设备所使用的窗体
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,        //顶点像素渲染方式
  &d3dpp,                                    //参数
  &g_pd3dDevice                                //驱动设备
  )))
 {
  return E_FAIL;
 }

 // 初始化完成

 return S_OK;
}

//-----------------------------------------------------------------------------
// 名称: Cleanup()
// 描述: 释放所有初始化对象
//-----------------------------------------------------------------------------
VOID Cleanup()
{
 if (g_pd3dDevice != NULL)
  g_pd3dDevice->Release();

 if (g_pD3D != NULL)
  g_pD3D->Release();
 KillTimer(NULL, 1);
}



//-----------------------------------------------------------------------------
// 名称: Render()
// 描述: 绘制场景
//-----------------------------------------------------------------------------
VOID Render()
{
 if (NULL == g_pd3dDevice)
  return;

 //清除背景缓存并重新设置为蓝色
 g_pd3dDevice->Clear(0,                             // pRects中的矩形数,如果 pRects为NULL着该参数必须为0
  NULL,                         //一个指向D3DRECT结构体的指针
  D3DCLEAR_TARGET,             //D3DCLEAR标志,现在为清空当前的渲染器
  D3DCOLOR_XRGB(0, 0, 0),     //颜色   
  1.0f,                         // depth buffer的新z值
  0                             //模板
  );

 // 开始渲染场景
 if (SUCCEEDED(g_pd3dDevice->BeginScene()))
 {
  // 可以在这里渲染场景

  // 结束渲染
  g_pd3dDevice->EndScene();
 }

 // 清苦当前缓存中的数据
 g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

//-----------------------------------------------------------------------------
// 名称: MsgProc()
// 描述: Windows窗体句柄
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch (msg)
 {
 case WM_DESTROY:
  Cleanup();
  PostQuitMessage(0);
  return 0;

 case WM_PAINT:
  Render();
  ValidateRect(hWnd, NULL);//效验矩形数据
  return 0;
 }

 return DefWindowProc(hWnd, msg, wParam, lParam);
}
void CALLBACK TimeProc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime)
{
 if (NULL == g_pd3dDevice)
  return;

 //清除背景缓存并重新设置为颜色
 g_pd3dDevice->Clear(0,                             // pRects中的矩形数,如果 pRects为NULL着该参数必须为0
  NULL,                         //一个指向D3DRECT结构体的指针
  D3DCLEAR_TARGET,             //D3DCLEAR标志,现在为清空当前的渲染器
  D3DCOLOR_XRGB(0, dwTime%256, 0),     //颜色   
  1.0f,                         // depth buffer的新z值
  0                             //模板
  );

 // 开始渲染场景
 if (SUCCEEDED(g_pd3dDevice->BeginScene()))
 {
  // 可以在这里渲染场景

  // 结束渲染
  g_pd3dDevice->EndScene();
 }

 // 清苦当前缓存中的数据
 g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
//WinMain函数入口

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{

 //直接初始化结构体
 /*
 GetModuleHandle 函数是返回一个模块在当前进程地址空间的HMODULE
 如果函数参数值为NULL则返回一个虚拟当前句柄.
 */
 WNDCLASSEX wc = { sizeof(WNDCLASSEX),            //指定了以字节为单位的结构的大小
  CS_CLASSDC,                    //所有属于该类的窗口实例共享相同的DC
  MsgProc,                        //是指向窗口过程的指针
  0L,                            //…………
  0L,                            //…………
  GetModuleHandle(NULL),        //是指向窗口过程实例的句柄
  NULL,                            //指向窗口图标的句柄
  NULL,                            //指向窗口光标的句柄
  NULL,                            //背景刷
  NULL,                            //菜单
  "D3D Tutorial",                //类名
  NULL                            //指向小图标的句柄
 };
 //注册窗体类
 RegisterClassEx(&wc);

 //创建窗体
 HWND hWnd = CreateWindow("D3D Tutorial",                                //窗体的类名
  "D3D Tutorial 01: CreateDevice",                //标题
  WS_OVERLAPPEDWINDOW,                            //窗体风格
  100,                                            //位置坐标x
  100,                                            //位置坐标y
  300,                                            //宽
  300,                                            //高
  NULL,                                            //父窗口
  NULL,                                            //菜单
  wc.hInstance,                                    //窗体类句柄,2000以上的系统无含义!
  NULL                                            //窗体结构参数
  );
 SetTimer(NULL, 1, 1000, TimeProc);
 // Initialize Direct3D
 if (SUCCEEDED(InitD3D(hWnd)))
 {
  // Show the window
  ShowWindow(hWnd, SW_SHOWDEFAULT);
  UpdateWindow(hWnd);

  // Enter the message loop
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

 UnregisterClass("D3D Tutorial", wc.hInstance);
 return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

java实现渐变效果工具

package gradient; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; ...
  • ycb1689
  • ycb1689
  • 2013年11月14日 09:25
  • 3623

Directx3D9学习之二:Windows编程之最简单窗口程序

Directx3D9学习之二:Windows编程之最简单窗口程序 一、一些基本知识介绍 由于D3D的编程要借助于windows的窗口来体现,所以也需要懂一些windows的编程知识(以前做得比较多的是...
  • lhqsine
  • lhqsine
  • 2015年01月31日 23:05
  • 2774

cocos2d各种动作的使用(变色、跳动、旋转、闪烁、悬挂、放大缩小、渐变、animation)

用到的知识: ***To: 意味着运动到指定的位置。 ***By:意味着运动到按照指定癿 x、y 增量的位置。(x、y 可以是负值) 移动到 – CCMoveTo 移动– CC...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2013年07月04日 11:10
  • 6032

Direct3D11深蓝色窗口演示demo

  • 2012年07月09日 06:02
  • 16.25MB
  • 下载

Direct3D9

  • 2007年07月26日 04:11
  • 6KB
  • 下载

Direct3D9初级教程

  • 2007年07月25日 09:15
  • 319KB
  • 下载

Direct3D9入门教程.pdf

  • 2011年09月20日 12:05
  • 505KB
  • 下载

Direct3D的主窗口演示

  • 2009年10月10日 11:41
  • 2.38MB
  • 下载

Direct3D9中的纹理演示

Direct3D9中的纹理演示
  • leng_que
  • leng_que
  • 2011年04月11日 22:15
  • 456

深入理解Direct3D9 -ok

深入理解D3D9对图形程序员来说意义重大,我把以前的一些学习笔记都汇总起来,希望对朋友们有些所帮助,因为是零散笔记,思路很杂,还请包涵。 其实只要你能完美理解D3DLOCK、D3DUSAGE、D...
  • aoying59595512
  • aoying59595512
  • 2013年05月15日 09:31
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:direct3d9 渐变的窗口代码
举报原因:
原因补充:

(最多只允许输入30个字)