1. //桌面 透明 三角形 分层窗口 DX
  2. //IDirect3DSurface9 GetDC UpdateLayeredWindow
  3.  
  4. #include <Windows.h>
  5. #include <mmsystem.h>
  6. #include <d3dx9.h>
  7. #pragma warning( disable : 4996 )
  8. #include <strsafe.h>
  9. #pragma warning( default : 4996 )
  10.  
  11. //include path $(DXSDK_DIR)Include;
  12. //library path $(DXSDK_DIR)Lib\x86
  13. //library d3dx9.lib d3d9.lib Winmm.lib
  14.  
  15. LPDIRECT3D9 g_pD3D = NULL;
  16. LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
  17. LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
  18.  
  19. HWND g_hWnd = NULL;
  20. IDirect3DSurface9* g_pkRenderTarget = NULL;
  21. IDirect3DSurface9* g_pkOffscreenPlainSurface = NULL;
  22.  
  23. struct CUSTOMVERTEX
  24. {
  25. FLOAT x, y, z;
  26. DWORD color;
  27. };
  28.  
  29. #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
  30.  
  31. HRESULT InitD3D(HWND hWnd)
  32. {
  33. if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
  34. {
  35. return E_FAIL;
  36. }
  37.  
  38. D3DPRESENT_PARAMETERS d3dpp;
  39. ZeroMemory(&d3dpp, sizeof(d3dpp));
  40. d3dpp.Windowed = TRUE;
  41. d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  42. d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
  43.  
  44. if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
  45. {
  46. return E_FAIL;
  47. }
  48.  
  49. g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
  50. g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
  51.  
  52. return S_OK;
  53. }
  54.  
  55. HRESULT InitGeometry()
  56. {
  57. CUSTOMVERTEX g_Vertices[] =
  58. {
  59. { -1.0f, -1.0f, 0.0f, 0xffff0000, },
  60. { 1.0f, -1.0f, 0.0f, 0xff0000ff, },
  61. { 0.0f, 1.0f, 0.0f, 0xffffffff, },
  62. };
  63.  
  64. if (FAILED(g_pd3dDevice->CreateVertexBuffer( * sizeof(CUSTOMVERTEX), , D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))
  65. {
  66. return E_FAIL;
  67. }
  68.  
  69. VOID* pVertices;
  70. if (FAILED(g_pVB->Lock(, sizeof(g_Vertices), (void**)&pVertices, )))
  71. {
  72. return E_FAIL;
  73. }
  74. memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
  75. g_pVB->Unlock();
  76.  
  77. return S_OK;
  78. }
  79.  
  80. VOID Cleanup()
  81. {
  82. if (g_pVB != NULL)
  83. {
  84. g_pVB->Release();
  85. }
  86. if (g_pd3dDevice != NULL)
  87. {
  88. g_pd3dDevice->Release();
  89. }
  90. if (g_pD3D != NULL)
  91. {
  92. g_pD3D->Release();
  93. }
  94. }
  95.  
  96. VOID SetupMatrices()
  97. {
  98. D3DXMATRIXA16 matWorld;
  99. UINT iTime = timeGetTime() % ;
  100. FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
  101. D3DXMatrixRotationY(&matWorld, fAngle);
  102. g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
  103.  
  104. D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);
  105. D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f);
  106. D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);
  107. D3DXMATRIXA16 matView;
  108. D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);
  109. g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
  110.  
  111. D3DXMATRIXA16 matProj;
  112. D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / , 1.0f, 1.0f, 100.0f);
  113. g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
  114.  
  115. }
  116.  
  117. VOID Render()
  118. {
  119.  
  120. RECT kRect;
  121. GetWindowRect(g_hWnd, &kRect);
  122.  
  123. UINT uiWndWidth = kRect.right - kRect.left;
  124. UINT uiWndHeight = kRect.bottom - kRect.top;
  125.  
  126. if (!g_pkOffscreenPlainSurface)
  127. {
  128. g_pd3dDevice->CreateOffscreenPlainSurface(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &g_pkOffscreenPlainSurface, );
  129. g_pd3dDevice->CreateRenderTarget(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, , true, &g_pkRenderTarget, );
  130. }
  131. else
  132. {
  133. D3DSURFACE_DESC kDesc;
  134. g_pkOffscreenPlainSurface->GetDesc(&kDesc);
  135.  
  136. if (kDesc.Width != uiWndWidth || kDesc.Width != uiWndHeight)
  137. {
  138. g_pkOffscreenPlainSurface->Release();
  139. g_pkRenderTarget->Release();
  140. g_pd3dDevice->CreateOffscreenPlainSurface(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &g_pkOffscreenPlainSurface, );
  141. g_pd3dDevice->CreateRenderTarget(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, , true, &g_pkRenderTarget, );
  142. }
  143. }
  144.  
  145. if (!g_pkOffscreenPlainSurface || !g_pkRenderTarget)
  146. {
  147. return;
  148. }
  149.  
  150. HRESULT hr = g_pd3dDevice->SetRenderTarget(, g_pkRenderTarget);
  151. g_pd3dDevice->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(, , ), 1.0f, );
  152.  
  153. if (SUCCEEDED(g_pd3dDevice->BeginScene()))
  154. {
  155. SetupMatrices();
  156.  
  157. g_pd3dDevice->SetStreamSource(, g_pVB, , sizeof(CUSTOMVERTEX));
  158. g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
  159. g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, , );
  160.  
  161. g_pd3dDevice->EndScene();
  162. }
  163.  
  164. g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
  165.  
  166. hr = g_pd3dDevice->GetRenderTargetData(g_pkRenderTarget, g_pkOffscreenPlainSurface);
  167.  
  168. HDC hDC = ;
  169. //g_pkRenderTarget->GetDC(&hDC);
  170. g_pkOffscreenPlainSurface->GetDC(&hDC);
  171.  
  172. POINT kPoint = { , };
  173. SIZE kSize = { uiWndWidth, uiWndHeight };
  174.  
  175. BLENDFUNCTION kBlend;
  176. kBlend.AlphaFormat = AC_SRC_ALPHA;
  177. kBlend.SourceConstantAlpha = ;
  178. kBlend.BlendFlags = ;
  179. kBlend.BlendOp = AC_SRC_OVER;
  180.  
  181. UpdateLayeredWindow(g_hWnd, , &kPoint, &kSize, hDC, &kPoint, , &kBlend, ULW_ALPHA);
  182.  
  183. g_pkOffscreenPlainSurface->ReleaseDC(hDC);
  184. //g_pkRenderTarget->ReleaseDC(hDC);
  185. }
  186.  
  187. LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  188. {
  189. switch (msg)
  190. {
  191. case WM_DESTROY:
  192. Cleanup();
  193. PostQuitMessage();
  194. return ;
  195. }
  196.  
  197. return DefWindowProc(hWnd, msg, wParam, lParam);
  198. }
  199.  
  200. INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, INT)
  201. {
  202. UNREFERENCED_PARAMETER(hInst);
  203.  
  204. WNDCLASSEX wc =
  205. {
  206. sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"D3D Tutorial", NULL
  207. };
  208. RegisterClassEx(&wc);
  209.  
  210. g_hWnd = CreateWindowEx(WS_EX_LAYERED, L"D3D Tutorial", L"D3D Tutorial 03: Matrices", WS_POPUP | WS_THICKFRAME, , , , , NULL, NULL, wc.hInstance, NULL);
  211.  
  212. if (SUCCEEDED(InitD3D(g_hWnd)))
  213. {
  214. if (SUCCEEDED(InitGeometry()))
  215. {
  216. ShowWindow(g_hWnd, SW_SHOWDEFAULT);
  217. UpdateWindow(g_hWnd);
  218.  
  219. MSG msg;
  220. ZeroMemory(&msg, sizeof(msg));
  221. while (msg.message != WM_QUIT)
  222. {
  223. if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
  224. {
  225. TranslateMessage(&msg);
  226. DispatchMessage(&msg);
  227. }
  228. else
  229. {
  230. Render();
  231. }
  232. }
  233. }
  234. }
  235.  
  236. UnregisterClass(L"D3D Tutorial", wc.hInstance);
  237. return ;
  238. }

桌面 透明 三角形 分层窗口 DX的更多相关文章

  1. [置顶] VC++界面编程之--使用分层窗口实现界面皮肤

    使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果. 在很多情况下,界面的漂亮与否,取决于PS的制作 ...

  2. VC++界面编程之--使用分层窗口实现界面皮肤

    使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果. 在很多情况下,界面的漂亮与否,取决于PS的制作 ...

  3. 第二十篇:在SOUI中使用分层窗口

    从Windows 2K开始,MS为UI开发引入了分层窗口这一窗口风格.使用分层窗口,应用程序的主窗口可以是半透明,也可以是逐点半透明(即每一个像素点的透明度可以不同). 可以说,正是因为有了分层窗口, ...

  4. android在桌面弹出一个窗口

    android在桌面弹出一个窗口 遇到了这种需求,要和iPhone一样的效果. 下面是简单实现功能,优化和美化部分,有时间慢慢搞. 方法应该有不少吧,我用的是弹出一个activity,将这个activ ...

  5. C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 实现这个功能的原理步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是 ...

  6. android 桌面透明

      目录(?)[-] public void setWallpaperOffsetSteps float xStep float yStep Parameters public void setWal ...

  7. winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...

  8. Windows 10设置桌面图标间距、窗口的背景颜色、选中文字的背景颜色

    Windows 10取消了“高级外观设置”(或者叫“窗口颜色和外观”设置),想调整一些参数只能进注册表了. 修改后可能需要注销或重启才能生效. 按Win+R,然后输入regedit进入注册表编辑器. ...

  9. css实现的透明三角形

    css实现下图样式,具体像素值记不住了,很好设置,html code (2014百度秋招面试题): <div id="demo"></div>   分析:这 ...

随机推荐

  1. ModelAndView详解

    ModelAndView的构造方法有7个.但是它们都是相通的. 这里使用无参构造函数来举例说明如何构造ModelAndView实例. ModelAndView类别就如其名称所示,是代表了MVC Web ...

  2. 未添加document.ready产生的BUG

    今天在框架里使用superslide插件时,在javascript部分 <script type="text/javascript"> jQuery(".yj ...

  3. NOIP2016普及组

    普及组.代码有空发. 第一题就是买铅笔.暴力模拟绝对可取. 第二题就是回文日期.从t1的年份到t2的年份枚举每一年.头尾要特判. 第三题就是海港.骗了40分. 第四题就是魔法阵.不太好优化. 完.

  4. IntelliJ IDEA 2016.2激活方法

    IntelliJ IDEA 2016.2激活 激活码 43B4A73YYJ-> eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoib ...

  5. TCP/IP详解系列 --- 概念总结01

    UDP协议  .vs.  TCP协议:  原理上:(TCP报文段. vs . UDP用户数据报) TCP协议的特性: TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接. ...

  6. 如何查看SharePoint未知错误的详细信息

    在sharepoint 开发的时候,需要查看具体的sharepoint报错信息需要在配置文件中配置如下 通过下面方法就可以直接在出错页面查看错误信息.修改Web应用程序根目录上的Web.config文 ...

  7. ASP.NET MVC+Entity Framework 访问数据库

    Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...

  8. PoEdu- C++阶段班【Po学校】-Lesson03_构造函数精讲 - 第5天

    复习构造函数:1  与类同名   2  没有返回值   3  自动生成    4  手动后,不会自动生成    5  不在特定的情况下,不会私有  新建 类   两种方法示范   其一:在vs中选择类 ...

  9. Entity Framework 6, database-first with Oracle

    Entity Framework 6, database-first with Oracle 转载自http://csharp.today/entity-framework-6-database-fi ...

  10. Trie树的创建、插入、查询的实现

    原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28977986&id=3807947 1.什么是Trie树 Tr ...