第一个D2D程序运行及配置

1.为啥要加头文件和库文件?

.h头文件只是函数的声明。

.lib才是函数实现的地方。

只不过,如果你加载的是系统头文件,默认会帮你加上.lib文件。
如果如时是你自己写的函数,就要手动添加.lib文件了
dll是动态链接,lib是静态链接。
你自己写的函数一般都包括.h头文件,.cpp实现文件。
但是别人一般不会把源代码一块给你,只给你一个.lib文件
你可以把.lib文件理解成编译好的.cpp文件。

先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终的EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。

采用动态链接库的优点:(1)更加节省内存;(2)DLL文件与EXE文件独立,只要输出接口不变,更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性。

动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的EXE文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
静态链接的执行程序能够在其它同类操作系统的机器上直接运行,比如一个EXE文件是在WIN2000系统上静态链接的,那么将该文件直接拷贝到另一台WIN2000的机器上,是可以运行的。
而动态链接的执行程序则不可以,除非把该EXE文件所需的DLL文件都一并拷贝过去,或者对方机器上也有所需的相同版本的DLL文件,否则是不能保证正常运行的。
不过静态链接得到的文件比较大,而动态链接得到的文件比较小。

2.怎么配置头文件和库文件?


怎么一次修改配置,而不是每次新建程序修改?


视图-》其他窗口-》属性管理器->点那个项目->点Debug|Win32->点Microsoft.Cpp.Win32.user


在VC++目录里-》包含目录里,加入include路径里的头文件
在VC+=目录里的库目录里加入lib文件夹路径
在链接器 的输入里加入d2d1.lib

3.新建一个D2D程序

接下来在VS中创建一个win32项目(注意不要建错),要建立空项目,此处一个样例代码是建立一个sin移动的矩形
 
 
  1. /*************************************************************** 
  2. 功能:简单的D2D窗口创建、矩形的sin曲线移动 
  3. 作者:*** 
  4. 版本:1.0 
  5. 日期:2016.4 
  6. ****************************************************************/  
  7. #include <Windows.h>  
  8. #include<d2d1.h>  
  9. #include<cmath>  
  10.   
  11. //函数声明  
  12. void CreateResource();  
  13.   
  14. //变量声明  
  15. ID2D1Factory *pFactory = NULL;  
  16. ID2D1HwndRenderTarget *pRenderTarget = NULL;  
  17. ID2D1SolidColorBrush *pBrush = NULL;  
  18.   
  19. HWND hwnd = 0;  
  20. RECT rt = { 0 }, rtClient = { 0 };  
  21. int num = 1;  
  22.   
  23. void init()  
  24. {  
  25.     if (!hwnd)  
  26.     {  
  27.         return;  
  28.     }  
  29.     GetClientRect(hwnd, &rtClient);  
  30.     CreateResource();  
  31. }  
  32.   
  33. void CreateResource()  
  34. {  
  35.     HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pFactory);  
  36.     if (SUCCEEDED(hr))  
  37.     {  
  38.         hr = pFactory->CreateHwndRenderTarget(  
  39.             D2D1::RenderTargetProperties(),  
  40.             D2D1::HwndRenderTargetProperties(  
  41.             hwnd,  
  42.             D2D1::SizeU(  
  43.             rtClient.right - rtClient.left,  
  44.             rtClient.bottom - rtClient.top)),  
  45.             &pRenderTarget);  
  46.         if (SUCCEEDED(hr))  
  47.         {  
  48.             hr = pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Red), &pBrush);  
  49.             if (FAILED(hr))  
  50.             {  
  51.                 MessageBox(hwnd, TEXT("Create Resource Fail!"), TEXT("Error"), MB_OK);  
  52.                 return;  
  53.             }  
  54.         }  
  55.     }  
  56. }  
  57. void DrawRectangle()  
  58. {  
  59.     if (pRenderTarget){  
  60.         pRenderTarget->BeginDraw();  
  61.         pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black));  
  62.         pRenderTarget->DrawRectangle(D2D1::RectF(rt.left + 0.0f, rt.top + 200.0f, rt.right + 50.0f, rt.bottom + 250.0f), pBrush);  
  63.         pRenderTarget->EndDraw();  
  64.     }  
  65. }  
  66. void Render()  
  67. {  
  68.     DrawRectangle();  
  69.     num += 5;  
  70.     rt.right += 2;  
  71.     rt.left += 2;  
  72.     rt.top = (100 * sin(num * 3.14 / 180));  
  73.     rt.bottom = (100 * sin(num * 3.14 / 180));  
  74.     if (rt.right == 1000)  
  75.     {  
  76.         rt = { 0 };  //这句有点问题去掉仍可正常运行
  77.         num = 0;  
  78.     }  
  79. }  
  80.   
  81. template<class Interface>  
  82. inline void SafeRelease(Interface **ppinterfaceToRelease)  
  83. {  
  84.     if (NULL != *ppinterfaceToRelease)  
  85.     {  
  86.         (*ppinterfaceToRelease)->Release();  
  87.         (*ppinterfaceToRelease) = NULL;  
  88.     }  
  89. }  
  90. void CleanUp()  
  91. {  
  92.     SafeRelease(&pBrush);  
  93.     SafeRelease(&pRenderTarget);  
  94.     SafeRelease(&pFactory);  
  95. }  
  96.   
  97. LRESULT CALLBACK WndProc(HWND Hwnd, UINT message, WPARAM wParam, LPARAM iParam);  
  98. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)  
  99. {  
  100.     MSG Msg;  
  101.     WNDCLASS wndclass;  
  102.     TCHAR lpszTitle[] = TEXT("MyDemo001");  
  103.   
  104.     wndclass.style = CS_HREDRAW|CS_VREDRAW;  
  105.     wndclass.lpfnWndProc = WndProc;  
  106.     wndclass.cbClsExtra = 0;  
  107.     wndclass.cbWndExtra = 0;  
  108.     wndclass.hInstance = hInstance;  
  109.     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);  
  110.     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);  
  111.     wndclass.lpszMenuName = NULL;  
  112.     wndclass.lpszClassName = TEXT("MyClass");  
  113.     wndclass.hbrBackground = 0;  
  114.     if (!RegisterClass(&wndclass))  
  115.     {  
  116.         MessageBox(NULL, TEXT("RegisterClass fail!"), TEXT("error"), MB_ICONERROR);  
  117.         return 0;  
  118.     }  
  119.   
  120.     hwnd = CreateWindow(  
  121.         TEXT("MyClass"),  
  122.         lpszTitle,  
  123.         WS_OVERLAPPEDWINDOW,  
  124.         CW_USEDEFAULT,  
  125.         CW_USEDEFAULT,  
  126.         CW_USEDEFAULT,  
  127.         CW_USEDEFAULT,  
  128.         NULL,  
  129.         NULL,  
  130.         hInstance,  
  131.         NULL);  
  132.     ShowWindow(hwnd, nCmdShow);  
  133.     UpdateWindow(hwnd);  
  134.     init();  
  135.   
  136.     BOOL bRet;  
  137.     PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE);  
  138.     while (Msg.message != WM_QUIT)  
  139.     {  
  140.         bRet = PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE);  
  141.         if (bRet)  
  142.         {  
  143.             TranslateMessage(&Msg);  
  144.             DispatchMessage(&Msg);  
  145.         }  
  146.         else  
  147.         {  
  148.             Render();  
  149.         }  
  150.     }  
  151.     CleanUp();  
  152.     return Msg.wParam;  
  153. }  
  154.   
  155. LRESULT CALLBACK WndProc(HWND Hwnd, UINT message, WPARAM wParam, LPARAM iParam)  
  156. {  
  157.     switch (message)  
  158.     {  
  159.     case WM_DESTROY:  
  160.         PostQuitMessage(0);  
  161.         return 0;  
  162.     }  
  163.     return DefWindowProc(Hwnd, message, wParam, iParam);  
  164. }  

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法:将配套的模块与DLL放到运行程序目录一起即可.比如: 用易语言新建立了一个程序,名称为[新程序.e]那么就放到和它一起的目录,添加模块即可. 搜集不宜,闲分多的请绕行. (包内无任何连接广告,纯绿色)压缩包内包括内容如下: --------------------------------以下为EDgame2d 引擎 D2D.ec 模块正式版本包括: 版本号: 1.0.5.15 大小: 628 kb 版本号: 1.0.5.15 大小: 635 kb 版本号: 1.0.6.20 大小: 652 kb 版本号: 1.0.7.20 大小: 660 kb 版本号: 1.0.7.70 大小: 653 kb 版本号: 1.0.8.70 大小: 664 kb 版本号: 1.0_学习版本 大小: 661 kb 版本号: 2.0_坏少爷完美破解(赞助版) 大小: 307 kb(最新) 版本号: 2.0_竹林深处破解(赞助版) 大小: 307 kb(最新) D2D.ec 模块扩展版本包括: 版本号: 1.0 大小: 83 kb 版本号: 1.1 大小: 86 kb 版本号: 1.2 大小: 91 kb D2D.dll 正式版本包括: 版本号: 1.0.0.1 大小: 952 kb 版本号: 1.0.5.15 大小: 824 kb 版本号: 1.0.6.20 大小: 507 kb 版本号: 1.0.7.20 大小: 417 kb 版本号: 1.0.8.70 大小: 417 kb 版本号: 1.0.8.17 大小: 433 kb 版本号: 1.0.8.28 大小: 418 kb 版本号: 1.0.11.25 大小: 427 kb 版本号: 1.0.6.20 大小: 507 kb 版本号: 1.0.0.1 大小: 846 kb 版本号: 1.0.0.1 大小: 847 kb 版本号: 1.0.0.1 大小: 925 kb 版本号: 1.0.0.1 大小: 957 kb 版本号: 1.0.0.1 大小: 961 kb 版本号: 1.1.2.7 大小: 519 kb(最新) bass.dll 正式版本包括: 版本号: 2.3.0.3 大小为: 91 kb ScriptManager.dll 正式版本包括: 版本号: 未知 大小为: 55kb --------------------------------以下为Galaxy2d 引擎 G2D.ec 版本号:4.102 大小为: 109 kb Galaxy2d.dll 版本号: 未知 大小为: 903 kb star.dll 版本号: 未知 大小为: 102 kb --------------------------------以下为Pge2d 引擎 pge32.ec 版本号: 15.316 大小为: 917kb PGE32.dll 版本号: 15.125.12.12 大小为: 1.72M

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值