桌面 透明 三角形 分层窗口 DX
- //桌面 透明 三角形 分层窗口 DX
- //IDirect3DSurface9 GetDC UpdateLayeredWindow
- #include <Windows.h>
- #include <mmsystem.h>
- #include <d3dx9.h>
- #pragma warning( disable : 4996 )
- #include <strsafe.h>
- #pragma warning( default : 4996 )
- //include path $(DXSDK_DIR)Include;
- //library path $(DXSDK_DIR)Lib\x86
- //library d3dx9.lib d3d9.lib Winmm.lib
- LPDIRECT3D9 g_pD3D = NULL;
- LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
- LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
- HWND g_hWnd = NULL;
- IDirect3DSurface9* g_pkRenderTarget = NULL;
- IDirect3DSurface9* g_pkOffscreenPlainSurface = NULL;
- struct CUSTOMVERTEX
- {
- FLOAT x, y, z;
- DWORD color;
- };
- #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
- HRESULT InitD3D(HWND hWnd)
- {
- if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
- {
- return E_FAIL;
- }
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory(&d3dpp, sizeof(d3dpp));
- d3dpp.Windowed = TRUE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
- if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
- {
- return E_FAIL;
- }
- g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
- g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
- return S_OK;
- }
- HRESULT InitGeometry()
- {
- CUSTOMVERTEX g_Vertices[] =
- {
- { -1.0f, -1.0f, 0.0f, 0xffff0000, },
- { 1.0f, -1.0f, 0.0f, 0xff0000ff, },
- { 0.0f, 1.0f, 0.0f, 0xffffffff, },
- };
- if (FAILED(g_pd3dDevice->CreateVertexBuffer( * sizeof(CUSTOMVERTEX), , D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))
- {
- return E_FAIL;
- }
- VOID* pVertices;
- if (FAILED(g_pVB->Lock(, sizeof(g_Vertices), (void**)&pVertices, )))
- {
- return E_FAIL;
- }
- memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
- g_pVB->Unlock();
- return S_OK;
- }
- VOID Cleanup()
- {
- if (g_pVB != NULL)
- {
- g_pVB->Release();
- }
- if (g_pd3dDevice != NULL)
- {
- g_pd3dDevice->Release();
- }
- if (g_pD3D != NULL)
- {
- g_pD3D->Release();
- }
- }
- VOID SetupMatrices()
- {
- D3DXMATRIXA16 matWorld;
- UINT iTime = timeGetTime() % ;
- FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
- D3DXMatrixRotationY(&matWorld, fAngle);
- g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
- D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);
- D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f);
- D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);
- D3DXMATRIXA16 matView;
- D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);
- g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);
- D3DXMATRIXA16 matProj;
- D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / , 1.0f, 1.0f, 100.0f);
- g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
- }
- VOID Render()
- {
- RECT kRect;
- GetWindowRect(g_hWnd, &kRect);
- UINT uiWndWidth = kRect.right - kRect.left;
- UINT uiWndHeight = kRect.bottom - kRect.top;
- if (!g_pkOffscreenPlainSurface)
- {
- g_pd3dDevice->CreateOffscreenPlainSurface(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &g_pkOffscreenPlainSurface, );
- g_pd3dDevice->CreateRenderTarget(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, , true, &g_pkRenderTarget, );
- }
- else
- {
- D3DSURFACE_DESC kDesc;
- g_pkOffscreenPlainSurface->GetDesc(&kDesc);
- if (kDesc.Width != uiWndWidth || kDesc.Width != uiWndHeight)
- {
- g_pkOffscreenPlainSurface->Release();
- g_pkRenderTarget->Release();
- g_pd3dDevice->CreateOffscreenPlainSurface(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &g_pkOffscreenPlainSurface, );
- g_pd3dDevice->CreateRenderTarget(uiWndWidth, uiWndHeight, D3DFMT_X8R8G8B8, D3DMULTISAMPLE_NONE, , true, &g_pkRenderTarget, );
- }
- }
- if (!g_pkOffscreenPlainSurface || !g_pkRenderTarget)
- {
- return;
- }
- HRESULT hr = g_pd3dDevice->SetRenderTarget(, g_pkRenderTarget);
- g_pd3dDevice->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(, , ), 1.0f, );
- if (SUCCEEDED(g_pd3dDevice->BeginScene()))
- {
- SetupMatrices();
- g_pd3dDevice->SetStreamSource(, g_pVB, , sizeof(CUSTOMVERTEX));
- g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
- g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, , );
- g_pd3dDevice->EndScene();
- }
- g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
- hr = g_pd3dDevice->GetRenderTargetData(g_pkRenderTarget, g_pkOffscreenPlainSurface);
- HDC hDC = ;
- //g_pkRenderTarget->GetDC(&hDC);
- g_pkOffscreenPlainSurface->GetDC(&hDC);
- POINT kPoint = { , };
- SIZE kSize = { uiWndWidth, uiWndHeight };
- BLENDFUNCTION kBlend;
- kBlend.AlphaFormat = AC_SRC_ALPHA;
- kBlend.SourceConstantAlpha = ;
- kBlend.BlendFlags = ;
- kBlend.BlendOp = AC_SRC_OVER;
- UpdateLayeredWindow(g_hWnd, , &kPoint, &kSize, hDC, &kPoint, , &kBlend, ULW_ALPHA);
- g_pkOffscreenPlainSurface->ReleaseDC(hDC);
- //g_pkRenderTarget->ReleaseDC(hDC);
- }
- LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_DESTROY:
- Cleanup();
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hWnd, msg, wParam, lParam);
- }
- INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, INT)
- {
- UNREFERENCED_PARAMETER(hInst);
- WNDCLASSEX wc =
- {
- sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"D3D Tutorial", NULL
- };
- RegisterClassEx(&wc);
- g_hWnd = CreateWindowEx(WS_EX_LAYERED, L"D3D Tutorial", L"D3D Tutorial 03: Matrices", WS_POPUP | WS_THICKFRAME, , , , , NULL, NULL, wc.hInstance, NULL);
- if (SUCCEEDED(InitD3D(g_hWnd)))
- {
- if (SUCCEEDED(InitGeometry()))
- {
- ShowWindow(g_hWnd, SW_SHOWDEFAULT);
- UpdateWindow(g_hWnd);
- MSG msg;
- ZeroMemory(&msg, sizeof(msg));
- while (msg.message != WM_QUIT)
- {
- if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- else
- {
- Render();
- }
- }
- }
- }
- UnregisterClass(L"D3D Tutorial", wc.hInstance);
- return ;
- }
桌面 透明 三角形 分层窗口 DX的更多相关文章
- [置顶] VC++界面编程之--使用分层窗口实现界面皮肤
使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果. 在很多情况下,界面的漂亮与否,取决于PS的制作 ...
- VC++界面编程之--使用分层窗口实现界面皮肤
使用分层界面来实现界面皮肤的好处是:可以保证图片边缘处理不失真,且能用于异形窗口上,如一些不规则的窗口,你很难用SetWindowRgn来达到理想效果. 在很多情况下,界面的漂亮与否,取决于PS的制作 ...
- 第二十篇:在SOUI中使用分层窗口
从Windows 2K开始,MS为UI开发引入了分层窗口这一窗口风格.使用分层窗口,应用程序的主窗口可以是半透明,也可以是逐点半透明(即每一个像素点的透明度可以不同). 可以说,正是因为有了分层窗口, ...
- android在桌面弹出一个窗口
android在桌面弹出一个窗口 遇到了这种需求,要和iPhone一样的效果. 下面是简单实现功能,优化和美化部分,有时间慢慢搞. 方法应该有不少吧,我用的是弹出一个activity,将这个activ ...
- C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 实现这个功能的原理步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是 ...
- android 桌面透明
目录(?)[-] public void setWallpaperOffsetSteps float xStep float yStep Parameters public void setWal ...
- winform, 实现窗口程序像QQ一样靠近桌面边缘自动隐藏窗口
实现原理: 步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是否在窗体程序上,在 ...
- Windows 10设置桌面图标间距、窗口的背景颜色、选中文字的背景颜色
Windows 10取消了“高级外观设置”(或者叫“窗口颜色和外观”设置),想调整一些参数只能进注册表了. 修改后可能需要注销或重启才能生效. 按Win+R,然后输入regedit进入注册表编辑器. ...
- css实现的透明三角形
css实现下图样式,具体像素值记不住了,很好设置,html code (2014百度秋招面试题): <div id="demo"></div> 分析:这 ...
随机推荐
- ModelAndView详解
ModelAndView的构造方法有7个.但是它们都是相通的. 这里使用无参构造函数来举例说明如何构造ModelAndView实例. ModelAndView类别就如其名称所示,是代表了MVC Web ...
- 未添加document.ready产生的BUG
今天在框架里使用superslide插件时,在javascript部分 <script type="text/javascript"> jQuery(".yj ...
- NOIP2016普及组
普及组.代码有空发. 第一题就是买铅笔.暴力模拟绝对可取. 第二题就是回文日期.从t1的年份到t2的年份枚举每一年.头尾要特判. 第三题就是海港.骗了40分. 第四题就是魔法阵.不太好优化. 完.
- IntelliJ IDEA 2016.2激活方法
IntelliJ IDEA 2016.2激活 激活码 43B4A73YYJ-> eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoib ...
- TCP/IP详解系列 --- 概念总结01
UDP协议 .vs. TCP协议: 原理上:(TCP报文段. vs . UDP用户数据报) TCP协议的特性: TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接. ...
- 如何查看SharePoint未知错误的详细信息
在sharepoint 开发的时候,需要查看具体的sharepoint报错信息需要在配置文件中配置如下 通过下面方法就可以直接在出错页面查看错误信息.修改Web应用程序根目录上的Web.config文 ...
- ASP.NET MVC+Entity Framework 访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- PoEdu- C++阶段班【Po学校】-Lesson03_构造函数精讲 - 第5天
复习构造函数:1 与类同名 2 没有返回值 3 自动生成 4 手动后,不会自动生成 5 不在特定的情况下,不会私有 新建 类 两种方法示范 其一:在vs中选择类 ...
- Entity Framework 6, database-first with Oracle
Entity Framework 6, database-first with Oracle 转载自http://csharp.today/entity-framework-6-database-fi ...
- Trie树的创建、插入、查询的实现
原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28977986&id=3807947 1.什么是Trie树 Tr ...