- 博客(53)
- 资源 (8)
- 收藏
- 关注
原创 Electron + React + Node.js + ES6 开发桌面软件
介绍了如何使用 Electron + React + Node.js + ES6 来开发桌面软件。
2016-06-22 17:21:05
34622
原创 Android OOM 排查与解决——图片加载优化
本文阐述分析了 Android 上面 OOM 出现的原因以及一些排查方法。并特别针对图片加载占用内存导致 OOM 的问题,提出了一些解决办法。
2016-03-07 09:37:37
5211
原创 Android-SlideSupport-ListLayouts 使用简介
Android-SlideSupport-ListLayouts 是一款用于为 Android 上的 List 排布提供左滑右滑操作的库。目前支持的 Layout 主要有: ListView、RecyclerView、ScrollView、ExpandableListView 等。另外还可以与 SwpieRefreshLayout、PullToRefresh 等等第三方库协同工作。
2015-12-25 14:53:36
1322
原创 【Cocos2d-x】支持 i18n 国际化(2)——i18n XML 解析生成头文件
通过 Python 脚本解析资源 XML,生成可供 C++ 程序使用的 .h 资源头文件。
2015-11-11 17:49:32
1843
原创 【Cocos2d-x】脚本生成资源头文件
简单介绍实现了一个 Cocos2d-x 资源头文件生成脚本,可以很方便的实现 Cocos2d-x 的资源到 C++ .h 头文件的映射。
2015-11-02 14:09:20
1262
原创 【Android】 从头搭建视频播放器(5)——将所有放在一起
将所有介绍过的模块结合起来,实现一个最终提供给上层使用的 StrawMediaPlayer。
2015-09-25 19:07:31
2586
1
原创 【Android】 从头搭建视频播放器(4)——屏幕旋转处理
1、介绍了屏幕旋转的检测及处理;2、介绍了 Activity Orientation 的切换及处理。
2015-09-25 18:40:36
4769
原创 【Android】 从头搭建视频播放器(3)——手势检测 & 控制
1、介绍了手势检测的方法;2、介绍了屏幕亮度 & 媒体音量的调节;3、实现了一个 MediaPlayerGestureController。
2015-09-25 17:35:29
4560
2
原创 【Android】 从头搭建视频播放器(2)——SystemMediaPlayerImpl
1、介绍了 Android 系统的 android.media.MediaPlayer 的状态迁移;2、介绍了使用 MediaPlayer 必须要处理的一些方法及回调;3、介绍了使用 MediaPlayer 的步骤;4、结合 BaseMediaPlayer 做出了一份 SystemMediaPlayerImpl 实现。
2015-09-25 15:50:43
2254
原创 【Android】 从头搭建视频播放器(1)——概述
1、简要介绍了实现一个播放器需要的基础组件; 2、介绍了 BaseMediaPlayer 的一个基础接口及实现。
2015-09-25 11:57:55
5477
1
原创 Android Gradle 本地化部署 maven
1、介绍了 Android Gradle 部署 maven 到本地;2、介绍了多 Module 互相引用时部署出问题的解决办法。
2015-08-11 13:37:13
2077
原创 升级 Windows 10 后 SVN 图标不显示的解决办法
简单介绍了系统升级到 Windows 10 之后,文件夹上 SVN 图标无法显示的解决方法。
2015-08-03 10:18:28
17871
原创 离线安装 Android Studio 更新
本文介绍了 Android Studio 的离线包安装。解决被“墙”的情况下,无法更新 Android Studio 的问题。
2015-05-18 20:46:30
7913
原创 CString的部分实现剖析
该篇简要解析了ATL/MFC中CString的实现,以及CString中CopyOnWrite机制。并对GetBuffer和ReleaseBuffer的实现及正确使用做了深入探讨。
2013-09-03 19:45:13
2946
原创 反汇编系列(三)——函数篇
汇编中的函数调用我们需要着重讲述一下。一般我们用 call 发起调用,最后需要用 ret/retn/retf 来返回。我们逐个来看汇编中的函数调用。1、相关指令call ADDRESS:发起调用,根据 ADDRESS 的地址决定是发起段内调用还是段间调用。当是段内调用时,将 eip 入栈,然后 jmp 到 ADDRESS 处;当是段间调用时,将 cs、eip 依次入栈
2012-10-18 10:55:49
2772
原创 反汇编系列(二)——堆栈篇
要反汇编程序,不可避免要接触到堆栈,你首先得会查看堆栈,知道堆栈在某一时刻的确切内容。首先,我们讲述一些与堆栈相关的基础知识。1、堆栈基础 汇编语言中的“堆栈”的含义与数据结构中堆栈的含义不同,尽管从操作上来说,它们都是“后进先出”,这个不用赘述。汇编中有一个寄存器esp指向当前栈顶,而栈底的位置是不变的,整个程序运行过程中,通过操作esp来操作堆栈,进行堆栈的压入、弹出及平
2012-10-17 18:05:49
3141
1
原创 反汇编系列(一)——工具篇
反汇编,也有人称为“逆向工程”,就是把 DLL 或者 EXE 程序逆向为程序员可读的汇编代码,方便我们理解程序。有时候我们需要分析别人的DLL或者程序,想看看它做了什么或者实现方案(请不要干坏事!),可能需要反汇编知识。我们首先需要借助一些反汇编利器。我强烈推荐的是IDA Pro,它的功能异常强大,对某些程序的反汇编,可以达到伪代码级别的反汇编——当然,这需要你具有扎实的汇编功底。
2012-10-17 16:39:14
4667
原创 WM_COMMAND 和 WM_NOTIFY 的区别
当我们按下一个菜单选项,或者一个控件需要通知父窗口一个事件发生(如鼠标单击、双击等),或者快捷键被按下时,Windows将会发送一个 WM_COMMAND 消息给父窗口。那么 WM_COMMAND 消息参数是什么呢?WM_COMMAND 消息来源WPARAM 高位WPARAM 低位LPARAM菜单0菜单 ID0快捷键1
2012-10-09 13:33:12
5936
原创 C++工具箱(四)——动画类之透明度渐变 & 大小渐变
例程代码下载上一章介绍了如何基于计时器设计一个通用的动画基类,这次我们通过从 CFrameAnimation派生,得到两个动画类:透明度渐变动画类CFrameAnimation和窗口大小渐变类CFrameSizeAnimation类。首先假设我们有一个通用窗口CWnd:namespace Util{class CWnd{public: BOOL Initializ
2012-09-15 17:35:08
1807
原创 C++工具箱(三)——动画类之基类
OK,我们已经讨论了单件和定时器了,该来点真格的了。这次我们来看看如何通过前面所述的定时器实现动画。我目前想到的动画有大小更改、Alpha 透明度更改、窗口位置更改等几种,后续会逐步加上。我们先来思考动画的实质。动画其实就是通过定时器,一步步逼近一个期望结果的过程。我们期望的动画类是这样的:1、接口简单、使用方便;2、可扩展。比如我们后续加上新的动画类时不必太费力;3、添加
2012-09-13 20:13:09
1962
原创 C++工具箱(二)——定时器
有时候我们需要用到定时器这样一个东西,但是我们如果去一个窗口里面 SetTimer,但我们又需要在一个非 UI 类(线程)里要用计时器,那么解耦就没有办法实现了。有没有更好的办法呢?答案是肯定的,我看可以写一个单件定时器类,用来管理定时控制,并且全局访问。你可能需要的知识有:单件模板类、Boost 等。我们期望的使用方式是:/** * \file timer.h * \au
2012-09-13 19:24:35
2789
原创 VC获取默认浏览器
如何获取系统当前的默认浏览器呢?呃,如果你说,去读 HKEY_CLASSES_ROOT\http\shell\open\command 的注册表值,也不是不可以,但在WIN7 下不一定正确。那么我是怎么知道的呢?昨天这样读了半天,发现总是不正确,我们将 Chrome 设为默认浏览器,发现 QQ 电脑管家弹出提示,然后果断打开之,发现:我们果断得到了一个注
2012-09-12 10:03:36
4657
原创 C++工具箱(一)——单件模版类
我们在工作中往往会用到单件类。但是我们知道单件类的实现就那么几步,如果系统中有多个单件类的话,去一个个写非常麻烦,那么怎么办呢?单件模版类就派上用场了:template class Singleton{public: Singleton() {} virtual ~Singleton() {} static _CoClass& GetInstance() {
2012-08-28 15:55:17
2265
原创 C++运算符重载需要注意的地方
有时候自己写一个类,需要重载运算符,但对于一些操作符(如==、、>等),可以在类里写,也可以在类外写。那么 C++ 编译器会去怎么调用呢?首先,我们知道,“重载” 机制可以允许多个函数有相同的函数名,但参数列表必须不同。C++编译器经过名字改编(name mangling),可以在调用时依据所传实参找到“最符合”的函数实体进行调用。而运算符重载亦是如此。首先,我们有一个类:
2012-08-28 09:21:23
1572
原创 C++的两个细节
细节总是烦人的,但又有人说了:“细节决定成败”。所以,只有将这些细节总结出来了。细节问题总是这样:你明明知道是这样做,但又有点不太确定,需要回去翻一遍才能继续。今天遇到两个:1、C++ 浮点数取整:#include floor: 向下取整;0.6 --> 0,-10.5 --> -11;ceil: 向上取整;0.6 --> 1,-10.5 --> -1
2012-08-22 17:31:42
922
原创 获取进程启动时间
我们有时候通过测试一个程序的启动时间来评估程序的性能,那么该怎么办呢?现在提出两种办法,各有优劣,请酌情采纳。1、通过一个辅助程序调用CreateProcess启动被测程序,在 CreateProcess命令行参数中传递当前TickCount,在被测程序的main 函数开头获取当前TickCount,并从命令行参数中解出启动进程的TickCount,执行减法即可;2、通
2012-07-16 17:22:05
4844
原创 SQLite的使用
最近频繁使用到 SQLite,越来越发现该数据库的好用。SQLite 是一款开源、轻量、本地化存储、功能强大的数据库,由于它的这些特性,使得人们在项目中广泛应用。首先,你可能要去www.sqlite.org去下载一份 SQLite,可能是编好的,如果没有,你可能需要自己去编一份,过程非常简单。先来看看 SQLite 在工程中的使用。它提供 sqlite3.h、sqlite3
2012-07-10 10:39:38
5030
原创 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
7949
原创 事件对象Event的使用
最近使用到Event,做一下总结。1、对象的创建:创建了一个匿名的初始状态为“无信号”状态的Event。HANDLE _hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);2、信号状态切换:::SetEvent(_hEvent); // 设置为有信号状态.::ResetEvent(_hEv
2012-06-18 16:42:30
1568
原创 由C++绝对值函数想到的
这些天恰好要用到一个绝对值的函数。好吧,你会说这个直接用std::abs不就行了吗?对的,一开始我也是这样用的。但是如果去求最小的那个int的值的绝对值,就会导致输出不正确。如:int min_int = -2147483648;cout 得到的结果仍然是-2147483648!恰好我的程序有可能出现这样的情况。所以需要自己去完成一个。1、第一个版本:un
2012-05-09 14:16:23
2260
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人