C/C++
文章平均质量分 78
牧秦丶
C -->游戏--> 汇编--> Direct 3D记录生活、工作、学习、心情的点滴
展开
-
Direct2D中的坐标变换
本例介绍了Direct2D中的坐标变换以及一些常用的坐标变换的D2D实现。并通过一个例程简单介绍了平移、旋转、缩放、投射变换的D2D实现。原创 2010-10-05 21:46:00 · 5870 阅读 · 2 评论 -
VC获取默认浏览器
如何获取系统当前的默认浏览器呢?呃,如果你说,去读 HKEY_CLASSES_ROOT\http\shell\open\command 的注册表值,也不是不可以,但在WIN7 下不一定正确。那么我是怎么知道的呢?昨天这样读了半天,发现总是不正确,我们将 Chrome 设为默认浏览器,发现 QQ 电脑管家弹出提示,然后果断打开之,发现:我们果断得到了一个注原创 2012-09-12 10:03:36 · 4576 阅读 · 0 评论 -
WM_COMMAND 和 WM_NOTIFY 的区别
当我们按下一个菜单选项,或者一个控件需要通知父窗口一个事件发生(如鼠标单击、双击等),或者快捷键被按下时,Windows将会发送一个 WM_COMMAND 消息给父窗口。那么 WM_COMMAND 消息参数是什么呢?WM_COMMAND 消息来源WPARAM 高位WPARAM 低位LPARAM菜单0菜单 ID0快捷键1原创 2012-10-09 13:33:12 · 5869 阅读 · 0 评论 -
反汇编系列(一)——工具篇
反汇编,也有人称为“逆向工程”,就是把 DLL 或者 EXE 程序逆向为程序员可读的汇编代码,方便我们理解程序。有时候我们需要分析别人的DLL或者程序,想看看它做了什么或者实现方案(请不要干坏事!),可能需要反汇编知识。我们首先需要借助一些反汇编利器。我强烈推荐的是IDA Pro,它的功能异常强大,对某些程序的反汇编,可以达到伪代码级别的反汇编——当然,这需要你具有扎实的汇编功底。原创 2012-10-17 16:39:14 · 4573 阅读 · 0 评论 -
C++工具箱(一)——单件模版类
我们在工作中往往会用到单件类。但是我们知道单件类的实现就那么几步,如果系统中有多个单件类的话,去一个个写非常麻烦,那么怎么办呢?单件模版类就派上用场了:template class Singleton{public: Singleton() {} virtual ~Singleton() {} static _CoClass& GetInstance() {原创 2012-08-28 15:55:17 · 2221 阅读 · 0 评论 -
C++工具箱(二)——定时器
有时候我们需要用到定时器这样一个东西,但是我们如果去一个窗口里面 SetTimer,但我们又需要在一个非 UI 类(线程)里要用计时器,那么解耦就没有办法实现了。有没有更好的办法呢?答案是肯定的,我看可以写一个单件定时器类,用来管理定时控制,并且全局访问。你可能需要的知识有:单件模板类、Boost 等。我们期望的使用方式是:/** * \file timer.h * \au原创 2012-09-13 19:24:35 · 2679 阅读 · 1 评论 -
C++工具箱(三)——动画类之基类
OK,我们已经讨论了单件和定时器了,该来点真格的了。这次我们来看看如何通过前面所述的定时器实现动画。我目前想到的动画有大小更改、Alpha 透明度更改、窗口位置更改等几种,后续会逐步加上。我们先来思考动画的实质。动画其实就是通过定时器,一步步逼近一个期望结果的过程。我们期望的动画类是这样的:1、接口简单、使用方便;2、可扩展。比如我们后续加上新的动画类时不必太费力;3、添加原创 2012-09-13 20:13:09 · 1915 阅读 · 0 评论 -
C++工具箱(四)——动画类之透明度渐变 & 大小渐变
例程代码下载上一章介绍了如何基于计时器设计一个通用的动画基类,这次我们通过从 CFrameAnimation派生,得到两个动画类:透明度渐变动画类CFrameAnimation和窗口大小渐变类CFrameSizeAnimation类。首先假设我们有一个通用窗口CWnd:namespace Util{class CWnd{public: BOOL Initializ原创 2012-09-15 17:35:08 · 1777 阅读 · 0 评论 -
用汇编分析C++程序
用汇编分析C++程序 O 、引言学C++也有很长一段时间了,也写过一些程序。但学着学着,总被她强大的语法等等搞晕。以前用起来从不犹豫的东西,用着用着有时候就感到非常不确定。如果能看看编译器所对应生成的汇编代码,就会对此有深入的理解。让我们通过对C++程序对应生成汇编的分析,来了解C++的语法。也可知她与C的异同。 我们想通过对C++程序得到汇编代码,可通过编译得到。原创 2010-06-07 21:56:00 · 5210 阅读 · 2 评论 -
反汇编系列(三)——函数篇
汇编中的函数调用我们需要着重讲述一下。一般我们用 call 发起调用,最后需要用 ret/retn/retf 来返回。我们逐个来看汇编中的函数调用。1、相关指令call ADDRESS:发起调用,根据 ADDRESS 的地址决定是发起段内调用还是段间调用。当是段内调用时,将 eip 入栈,然后 jmp 到 ADDRESS 处;当是段间调用时,将 cs、eip 依次入栈原创 2012-10-18 10:55:49 · 2740 阅读 · 0 评论 -
CString的部分实现剖析
该篇简要解析了ATL/MFC中CString的实现,以及CString中CopyOnWrite机制。并对GetBuffer和ReleaseBuffer的实现及正确使用做了深入探讨。原创 2013-09-03 19:45:13 · 2868 阅读 · 2 评论 -
【Cocos2d-x】支持 i18n 国际化(1)——概述及实现
提出并实现了一种在 Cocos2d-x 中支持国际化 i18n 的方法。原创 2015-11-11 17:27:00 · 4431 阅读 · 1 评论 -
【Cocos2d-x】脚本生成资源头文件
简单介绍实现了一个 Cocos2d-x 资源头文件生成脚本,可以很方便的实现 Cocos2d-x 的资源到 C++ .h 头文件的映射。原创 2015-11-02 14:09:20 · 1213 阅读 · 0 评论 -
【Cocos2d-x】支持 i18n 国际化(2)——i18n XML 解析生成头文件
通过 Python 脚本解析资源 XML,生成可供 C++ 程序使用的 .h 资源头文件。原创 2015-11-11 17:49:32 · 1800 阅读 · 0 评论 -
反汇编系列(二)——堆栈篇
要反汇编程序,不可避免要接触到堆栈,你首先得会查看堆栈,知道堆栈在某一时刻的确切内容。首先,我们讲述一些与堆栈相关的基础知识。1、堆栈基础 汇编语言中的“堆栈”的含义与数据结构中堆栈的含义不同,尽管从操作上来说,它们都是“后进先出”,这个不用赘述。汇编中有一个寄存器esp指向当前栈顶,而栈底的位置是不变的,整个程序运行过程中,通过操作esp来操作堆栈,进行堆栈的压入、弹出及平原创 2012-10-17 18:05:49 · 3055 阅读 · 1 评论 -
C++运算符重载需要注意的地方
有时候自己写一个类,需要重载运算符,但对于一些操作符(如==、、>等),可以在类里写,也可以在类外写。那么 C++ 编译器会去怎么调用呢?首先,我们知道,“重载” 机制可以允许多个函数有相同的函数名,但参数列表必须不同。C++编译器经过名字改编(name mangling),可以在调用时依据所传实参找到“最符合”的函数实体进行调用。而运算符重载亦是如此。首先,我们有一个类:原创 2012-08-28 09:21:23 · 1540 阅读 · 0 评论 -
SQLite的使用
最近频繁使用到 SQLite,越来越发现该数据库的好用。SQLite 是一款开源、轻量、本地化存储、功能强大的数据库,由于它的这些特性,使得人们在项目中广泛应用。首先,你可能要去www.sqlite.org去下载一份 SQLite,可能是编好的,如果没有,你可能需要自己去编一份,过程非常简单。先来看看 SQLite 在工程中的使用。它提供 sqlite3.h、sqlite3原创 2012-07-10 10:39:38 · 4994 阅读 · 0 评论 -
C++的两个细节
细节总是烦人的,但又有人说了:“细节决定成败”。所以,只有将这些细节总结出来了。细节问题总是这样:你明明知道是这样做,但又有点不太确定,需要回去翻一遍才能继续。今天遇到两个:1、C++ 浮点数取整:#include floor: 向下取整;0.6 --> 0,-10.5 --> -11;ceil: 向上取整;0.6 --> 1,-10.5 --> -1原创 2012-08-22 17:31:42 · 895 阅读 · 0 评论 -
Direct2D编程入门
Direct2D 的一个C++入门例程。大家可以看看。源码可以用VS2008或VS2010编译运行。原创 2010-10-04 23:02:00 · 16140 阅读 · 15 评论 -
C++内存动态分配及管理
本文探讨C++中内存的分配及管理策略。原创 2010-12-11 22:00:00 · 1451 阅读 · 3 评论 -
Python栈的C++实现
这几天学Python,顺便用C++写了个栈程序供Python调用。现在贴出来。原创 2010-11-11 16:18:00 · 1538 阅读 · 1 评论 -
用C++扩展Python
用C++扩展Python原创 2010-03-14 19:00:00 · 8863 阅读 · 4 评论 -
拼图游戏开发
(注)此文章是2年前写的。我一直贴在别的地方,那个地方文章全部删除后我将其搬到了这儿。前天一时兴起,习惯的打开VC6.0,写了一个拼图游戏——虽然网上有很多可供下载的,但我还是决定自己写一个——因为从大一就想写了,一直拖到现在。 快要考试了,所以没有原创 2011-09-27 15:24:44 · 3522 阅读 · 9 评论 -
Lua与C/C++交互——C/C++调用Lua脚本
Lua与C/C++交互——C/C++调用Lua脚本原创 2011-10-07 15:24:27 · 8656 阅读 · 1 评论 -
Lua与C/C++交互——Lua调用C/C++
Lua与C/C++交互——Lua调用C/C++0.简介 Lua(念“鲁啊”)作为一门发展成熟的脚本语言,正在变得越来越流行。它也可以作为和C/C++执行脚本交互的语言。并且Lua的整个库很小,我安装了最新的正式版Lua 5.1版本,而整个静态链接的lu原创 2011-10-07 12:50:38 · 15173 阅读 · 0 评论 -
VS2010 C++目录配置
VS2010 C++目录配置 用过Visual Studio 2010的同学都知道,VS2010和VC 6.0以及其他VisualStudio版本不同,VS2010中C++的目录我们只能在单独的项目中配置。所有的项目有一个总的C++头文件、库文件目录配置原创 2011-10-07 10:25:49 · 8880 阅读 · 2 评论 -
C/C++与汇编的交互
C/C++与汇编的交互 例程源码下载 0. 准备工作1> 简述: 我们知道,大部分的原创 2010-11-06 16:03:00 · 2386 阅读 · 0 评论 -
C++导出类到Python
C++导出类到Python 点击下载源码 上次稍微谈了下如何用C++写的函数来扩展Python,使Python很方便的调用用C++写的高效的、快速的函数。我们知道——Python是面向对象的,那么我们是否可以用原创 2010-03-23 17:52:00 · 17111 阅读 · 7 评论 -
由C++绝对值函数想到的
这些天恰好要用到一个绝对值的函数。好吧,你会说这个直接用std::abs不就行了吗?对的,一开始我也是这样用的。但是如果去求最小的那个int的值的绝对值,就会导致输出不正确。如:int min_int = -2147483648;cout 得到的结果仍然是-2147483648!恰好我的程序有可能出现这样的情况。所以需要自己去完成一个。1、第一个版本:un原创 2012-05-09 14:16:23 · 2215 阅读 · 0 评论 -
事件对象Event的使用
最近使用到Event,做一下总结。1、对象的创建:创建了一个匿名的初始状态为“无信号”状态的Event。HANDLE _hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);2、信号状态切换:::SetEvent(_hEvent); // 设置为有信号状态.::ResetEvent(_hEv原创 2012-06-18 16:42:30 · 1496 阅读 · 0 评论 -
Windows下遍历文件目录
最近用到遍历文件目录,总结一下:#include WIN32_FIND_DATA fndData;HANDLE hFnd = INVALID_HANDLE_VALUE;hFnd = ::FindFirstFile(_T("D:\\Program Files\\*.*"), &fndData);if (hFnd == INVALID_HANDLE_VALUE){ ret原创 2012-07-03 16:55:13 · 7892 阅读 · 0 评论 -
获取进程启动时间
我们有时候通过测试一个程序的启动时间来评估程序的性能,那么该怎么办呢?现在提出两种办法,各有优劣,请酌情采纳。1、通过一个辅助程序调用CreateProcess启动被测程序,在 CreateProcess命令行参数中传递当前TickCount,在被测程序的main 函数开头获取当前TickCount,并从命令行参数中解出启动进程的TickCount,执行减法即可;2、通原创 2012-07-16 17:22:05 · 4786 阅读 · 0 评论