原文:Direct2D 第1篇 最简单的D2D程序

编译之前,得先安装DirectX SDK

#include <windows.h>
#include <d2d1.h>
#include <d2d1helper.h>
#include <dwrite.h>
#pragma comment(lib, "dwrite.lib")
#pragma comment(lib, "d2d1.lib") static HINSTANCE g_hinst;
static HWND g_hwnd;
static bool g_flag_app_exit; static ID2D1Factory * g_factory;
static ID2D1HwndRenderTarget * g_render_target; void OnSize(LPARAM lparam)
{
if(g_render_target)
g_render_target->Resize(D2D1::SizeU(LOWORD(lparam),HIWORD(lparam)));
} bool AppInit()
{
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_factory); RECT rc;
GetClientRect(g_hwnd, &rc); g_factory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(g_hwnd, D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top) ),
&g_render_target); return true;
} void OnPaint()
{
if(!g_render_target)
return; g_render_target->BeginDraw();
g_render_target->Clear(D2D1::ColorF(0.63, 0.84, 0.00));
g_render_target->EndDraw();
} void AppExit()
{
g_render_target->Release();
g_factory->Release();
} LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch(msg)
{
case WM_PAINT:
OnPaint();
break; case WM_SIZE:
OnSize(lparam);
break; case WM_DESTROY:
g_flag_app_exit = true;
break; default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
} int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
MSG msg; memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hinst;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
} g_hinst = hinst; g_hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Direct2D Demo",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
NULL, NULL, hinst, NULL); if(g_hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
} if(!AppInit())
{
MessageBox(NULL, "Application Initialisation Failed !","Error",MB_ICONEXCLAMATION|MB_OK);
return 0;
} while(!g_flag_app_exit)
{
if(PeekMessage(&msg, g_hwnd, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} AppExit(); return msg.wParam;
}

最新文章

  1. CSS选择器 转
  2. IOS开发技巧快速生成二维码
  3. 异步fifo的设计
  4. 【JavaScript】 2013年度最强AngularJS资源合集
  5. No Hibernate Session bound to thread, and configuration does not allow creat
  6. 枚举最短路径+SPFA
  7. WF系列——工作流基本知识
  8. 采用Flume实时采集和处理数据
  9. 线性判别分析算法(LDA)
  10. [PHP]PDO占位符预处理在 IN 和 LIKE 中用法
  11. file 文件上传后缀转化小写
  12. Git的小总结
  13. C# 值类型
  14. ios成长之每日一遍(day 8)
  15. Identifier:GUID (全局唯一标识符)
  16. lazarus汉化
  17. (转)YV12 and NV12
  18. Eclipse apk 签名
  19. change和onChange
  20. Jfinal框架登陆页面的图形验证码

热门文章

  1. GitHub for Visual Studio使用讲解
  2. 2019-8-31-dotnet-手动解决-json-解析中不合法字符串
  3. 深度残差网络——ResNet学习笔记
  4. [转]WPF更换主题
  5. 错误 2 error C2059: 语法错误:“::”
  6. Laravel报错:1071 Specified key was too long; max key length is 1000 bytes
  7. webpack 4.0尝鲜
  8. Ad Infinitum 8 - Math Programming Contest
  9. python基础---递归函数 知识点自查填空题
  10. 用Jmeter参数化实现接口自动化测试