Drawing in layered window with Direct2D
来源:互联网 发布:淘宝手工护肤品黑名单 编辑:程序博客网 时间:2024/06/17 22:01
Drawing in layered window with Direct2D
从c方式创建窗体,创建默认消息处理:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); break; case WM_ERASEBKGND: break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}
创建d2d资源:
CoInitialize(NULL); ID2D1Factory* pD2DFactory = NULL; ID2D1DCRenderTarget* pRenderTarget = NULL; ID2D1SolidColorBrush* pWhiteBrush = NULL; D2D1_SIZE_U size = SizeU(_nScrWidth, _nScrHeight); HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory); if (hr < 0) { goto EXIT_ENTRY; } hr = pD2DFactory->CreateDCRenderTarget( &RenderTargetProperties( D2D1_RENDER_TARGET_TYPE_DEFAULT, PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED)), &pRenderTarget); if (hr < 0) { goto EXIT_ENTRY; } hr = pRenderTarget->CreateSolidColorBrush(ColorF(0xffffffff, 1.0), &pWhiteBrush); if (hr < 0) { goto EXIT_ENTRY; }
整个程序只创建一次内存dc,然后每次更新都清空这个DC就行,不需要反复创建删除,这样可以高效地使用d2d,不再需要gdi绘制函数了
while (GetAsyncKeyState(VK_ESCAPE) >= 0) { pRenderTarget->BeginDraw(); pRenderTarget->Clear(0); UpdateSnow_D2D(pRenderTarget, pWhiteBrush, snowSmall, SnowSize1Pixel); UpdateSnow_D2D(pRenderTarget, pWhiteBrush, snowBig, SnowSize4Pixel); if (pRenderTarget->EndDraw() < 0) { break; } UpdateLayeredWindowIndirect(hwnd, &layeredInfo); Sleep(30); }
台式机测试:奔腾双核下,纯GDI渲染CPU占用率30%-50%,平均35%。使用D2D渲染占用率10%-30%,平均15%。
- Drawing in layered window with Direct2D
- layered window
- 研究一下Layered Window
- Drawing with ASCII art
- Drawing with Data-D3
- Drawing With A Color
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window(分层窗体,透明窗体)
- Layered Window 透明窗体的实现总结
- Diagram-Drawing in Design
- Drawing skins in container
- Drawing function in R
- ffmpeg used in window with .net
- AJAX - 创建XMLHttpRequest 对象
- AJAX - 服务器响应
- 正交投影的DIRECT2D绘图基础部分
- 风雨十年:一个老程序员的心里话!
- AJAX - 向服务器发送请求
- Drawing in layered window with Direct2D
- AJAX ASP/PHP 请求实例
- AJAX XML 实例
- The Hardware/Software Interface Programming assignment——二进制炸弹
- Qt的窗口背景及窗口风格统一与焕肤
- 关于密码的那些事儿—浅谈密码的设计与管理
- AJAX 简介
- udev实现U盘或SD卡的自动挂载
- 5个免费的英语听力网站