lovingxiaobing 发表于 2019-2-13 15:49

[WINAPI]Direct2D爆炸粒子--烟火

本帖最后由 wushaominkk 于 2019-2-15 14:12 编辑



这段时间真是玩嗨了,超喜欢爆炸粒子特效。也专门收集了一些例子将其改成C++ & D2D 实现。


将 HTML5 & Canvas & JS 改成 C++ & D2D & Win32API 也不是很简单,有一些奇奇怪怪的问题出现。


本帖的作品又是小冰一个翻写的程序,原来是人家 HTML5 & Canvas & JS 写的。后来也发现了,其实这些东西的思路都是几乎一模一样。


我上次也发过一个烟火的程序,也是D2D。不过那个属性是固定的,而且没有这个怎么好玩,本帖的这个程序可以自定义属性。


本帖的程序中也用到了很多一些小技巧,比如 “利用类成员函数指针做事件委托”,把某个函数或者数据绑定到控件的用户数据区域即可,然后再窗口过程中处理。用到了滑块条、标签、复选框等都是动态创建的,非资源。使用了对象封装,只有一两个全局变量,都是与对象无关的,设计上每个对象独立,可以一个对象只有一个窗口,再带上一个子窗口。
“所以,本帖的程序也具有一定的学习价值。嘻嘻~~~~”


下面就奉上几张图给大家欣赏欣赏吧~~~






程序中也预设了一些属性,更多的玩法儿可以自己探索哟~~~

上点代码凑个字数~~~



/*********************************
* 作者: 小冰哟                   *
*   *
* 备注: 本程序非原创,             *
*       改编他人的程序,         *
*       原来的程序是由HTML5编写   *
********************************/

#include "Frwk.hxx"

using D2D1::SizeU;

int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow ) {
   
    HeapSetInformation(nullptr, HeapEnableTerminationOnCorruption, nullptr, 0);

    LPTSTR lpszWindowTitle = _T("漂亮吧~~~~");
    int ret = 0;

    if ( SUCCEEDED(CoInitialize(nullptr)) ) {
      Frwk* frwrk = new Frwk(hInstance, SizeU(1024, 768), lpszWindowTitle);
      if ( nullptr != frwrk && SUCCEEDED(frwrk->Initialize()) ) {
            ret = frwrk->Run(nCmdShow);
            delete frwrk;
      }
      CoUninitialize();
    }

    return ret;
}



下面是附件,使用之前先阅读一下“说明.txt”.“里面有所有源代码工程以及编译好的二进制可执行文件.”


吾爱支持 发表于 2019-2-13 16:14

感谢楼主原创分享……。收藏,
送上小分分和祝福……

lovingxiaobing 发表于 2019-2-13 16:21

吾爱支持 发表于 2019-2-13 16:14
感谢楼主原创分享……。收藏,
送上小分分和祝福……

蟹蟹大佬鼓励~~~
页: [1]
查看完整版本: [WINAPI]Direct2D爆炸粒子--烟火