- 博客(51)
- 资源 (14)
- 问答 (1)
- 收藏
- 关注

原创 新时代的KTV系统设想(一)
工作之后好久没有写过博客了,整天为了那乱七八糟的事情,更可恨的是,现在由C转为Oracle程序员了,不过感觉还挺不错的。好了,牢骚就这么多,开始今天的正文。相信大家和我一样,毕业之后去KTV的次数变多了,但是去的KTV地方多了,你就会发现大部分的KTV系统都还是那个屌样子,没有什么变化:搜歌,唱歌。创新一点的还可点个零食啥的,但新时代的KTV应该是这样吗?根据这两年接触到的新事物,
2013-03-10 22:29:40
1148

原创 一种基于邮件协议的聊天工具
在学习编写局域网即时聊天工具时,发现这种软件只能是在同一个局域网内传递消息。随着网络知识的学习,发现邮件的SMTP和POP3协议支持邮件的发送,而且同样是tcp/ip通信,而且现在很多免费的邮箱都支持客户端存取邮件,这样就联想到将聊天工具架设到一个免费的邮箱上面去!基本思路如下:1、为系统申请2个免费的并支持SMTP和POP3的邮箱(其实也可以不这样),为了下面容易区分,分别记为邮
2010-03-15 22:20:00
3010
1
原创 如何破解安腾校园网客户端(2)
<br />好了吃饱了,继续我们的破解之路。<br />前面已经追到了关键函数,函数中有下面一段代码<br /><br />004166B7 |. 51 PUSH ECX<br />004166B8 |. 68 0C914500 PUSH upplican.0045910C ; 这里应该指向一个结构体<br />004166BD |. 6A 06
2018-07-11 11:25:26
1099
原创 判断类指针为空的另类做法
class Object{public: void operation();protected:private:};其实针对上面一个类,相信在很多时候我们需要其对象的一个指,例如下面一句代码Object * pObj = GetOneObject();pObj->operation();相信对于上面一段代码,很多人都会修复其中的一个小bug,然
2011-11-04 20:28:27
1462
原创 获取Android开机启动项列表
最近学习Android,想要写一个手机信息助手,想获取开机启动项,但网上一直没有搜到明确的方法。搜集了很多文章,发现其实还是可以获取开机启动项的。好了,废话不说了,先贴出代码如下,仅供参考:static final String BOOT_START_PERMISSION = "android.permission.RECEIVE_BOOT_COMPLETED"; public List> fetch_installed_apps(){ List packages = getPackageMa
2011-04-05 20:36:00
3169
1
转载 15个编程好习惯(转)
<br />【转载的文章加了一点自己的注释】<br />http://www.cnbeta.com/articles/138055.htm<br />编者按:这是国外程序员Al katib总结的一些编程习惯。<br />1. 动手编码之前,你需要对要编码实现的解决方案有一个正式的或粗略的设计。永远不要在没有任何设计的前提下就开始编码,除非所编代码不重要。<br />【这一点刚开始编程的时候总是不以为然,但随着代码的积累,才渐渐明白设计的重要性。这设计可能不是面面俱到,确实很重要】<br /> <br />2
2011-03-23 20:35:00
511
原创 桥接模式案例
桥接模式的定义:将抽象部分与它的实现部分分离,是他们都可以独立地变化。这样的定义,对于初学者的我,简直就是一头雾水。什么叫做抽象与实现分离?其实上网查阅相关资料,再加上自己工程实践,才慢慢明白这句话的意思。所谓的抽象就是某个类暴露给外界的接口(说白了就是可调用的函数);实现就是这些接口(函数)如何实现。通常当一个抽象有多个实现时,使用继承就可以了。但是继承机制将抽象部分与实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。(书中原话)其实也就是说,如果你修改基类,例如增加了一个接口,
2011-03-19 16:42:00
1419
原创 总结的编码规范
1、宏定义格式:每个单词用下划线隔开。示例:#define XXX_YYY 20#define、XXX_YYY、20各用两个tab隔开2、一律不得出现常量,对于出现的常量(指数字和字符串),用意义明显的宏定义(或枚举变量)代替。3、每个函数体不能过长,原则上不超过200行4、每个文件不能过长,原则上不超过2500行5、类的规则:(1)构造函数与析构函数放置在public下,并与其他public隔开(2)消息映射函数统一放在一个public下,格式如下:
2011-02-28 16:42:00
483
原创 总结的编码规范
<br />1、宏定义格式:每个单词用下划线隔开。示例:<br />#define XXX_YYY 20<br />#define、XXX_YYY、20各用两个tab隔开<br />2、一律不得出现常量,对于出现的常量(指数字和字符串),用意义明显的宏定义(或枚举变量)代替。<br />3、每个函数体不能过长,原则上不超过200行<br />4、每个文件不能过长,原则上不超过2500行<br />5、类的规则:<br />(1)构造函数与析构函数放置在public下
2011-02-28 16:42:00
402
原创 总结的编码规范
<br />1、宏定义格式:每个单词用下划线隔开。示例:<br />#define XXX_YYY 20<br />#define、XXX_YYY、20各用两个tab隔开<br />2、一律不得出现常量,对于出现的常量(指数字和字符串),用意义明显的宏定义(或枚举变量)代替。<br />3、每个函数体不能过长,原则上不超过200行<br />4、每个文件不能过长,原则上不超过2500行<br />5、类的规则:<br />(1)构造函数与析构函数放置在public下
2011-02-28 16:42:00
389
原创 总结的编码规范
<br />1、宏定义格式:每个单词用下划线隔开。示例:<br />#define XXX_YYY 20<br />#define、XXX_YYY、20各用两个tab隔开<br />2、一律不得出现常量,对于出现的常量(指数字和字符串),用意义明显的宏定义(或枚举变量)代替。<br />3、每个函数体不能过长,原则上不超过200行<br />4、每个文件不能过长,原则上不超过2500行<br />5、类的规则:<br />(1)构造函数与析构函数放置在public下
2011-02-28 16:41:00
446
原创 利用内存映射处理文件
<br />最近闲来无聊,想写一个简单的文件操作的类。但是由于经验尚浅,对于类的设计总是把握的不是太好。<br />C++毕竟是面向对象,而且自己又学过设计模式(个人觉得这个非常有用),当然也就希望自己设计的类有对象的意味了。<br />学习的最好方法就是模仿,在我印象中C#.NET框架中的类设计的很好,就借鉴一下。<br />.NET中操作文件的类如下:<br />FileStream:提供一个访问文件流对文件进行读写、打开、关闭等操作<br />StreamReader:用于读取文本信息。他会检查字节标
2011-02-25 14:39:00
718
转载 单实例程序
<br />http://www.codeproject.com/Tips/151060/How-to-avoid-multiple-instances-of-your-Windows-ap.aspx#alternate2<br />
2011-02-01 11:09:00
389
原创 模板函数实现单例模型
最近在写一个播放器软件,里面的配置类,我考虑了一下准备用单例模型而且是线程安全的。不过考虑到代码的重用性,准备把单例模型的实现部分抽象出来,用一个模板函数来实现实现代码如下:templateSingletonType GetSingleton(SingletonType oneInstance, CSimpleCriticalSection & clsCriticalSection){//判断某个指针是否为NULL的操作最好抽象成一个模板函数if (UTIL_COMMONFUN::IsNull(oneI
2010-12-26 17:13:00
763
原创 如何实现只启动一个exe进程
<br /> 在http://topic.youkuaiyun.com/u/20101119/15/8fcae5f3-df45-4116-9f03-a543ef1ee910.html?45107<br /> 帖子中,有这样一个问题“编写了一个小应用程序,采用MFC工程,生成了exe文件。<br /> 代码中应添加什么内容,使得只允许打开一个exe例程。且在此点击该exe的图标时,已运行的该exe的实例放到桌面的顶端?<br /> 学MFC不久,请大家给些方法。方法越多越好!”<br /> 经常会有人提出上面的问
2010-12-21 10:15:00
1199
原创 GDI透明绘图
<br />这几天闲来无事想写一个播放器的界面,但需要GDI透明绘图的知识,找了一些资料,但理解的不是很清楚。<br />BitBlt(hImageDC,0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND)<br />比如上面的函数中源DC是一个单色位图,目的DC是一个彩色位图,如何进行与操作呢?<br />假设目的DC用4位表示一个像素,且整张位图只有2个像素,像素值分别为 1011 0011<br />而源DC是一张单色位图,也只有两个像素,分别
2010-12-07 14:47:00
1430
转载 用BitBlt制作透明位图(1)
http://express.ruanko.com/ruanko-express_17/webpage/tech3.html这里写的真不错,要好好看几遍,对DC认识的不清,对BitBlt认识不清的人可以收获不少。特别是结合光栅操作码看。但是对中间掩码位图的由来不清楚,怎么样制作掩码位图呢?http://www.pcdog.com/a/19/10/x211415.html又发现了上面的这个地方,讲到如何一幅位图的掩码位图,正合我意。主要用到了CreateBitmap()创建了一幅单色的位图,然后将装有源位图的
2010-12-07 14:14:00
3312
原创 如何破解安腾校园网客户端(2)
好了吃饱了,继续我们的破解之路。前面已经追到了关键函数,函数中有下面一段代码004166B7 |. 51 PUSH ECX004166B8 |. 68 0C914500 PUSH upplican.0045910C ; 这里应该指向一个结构体004166BD |. 6A 06 PUSH 6004166BF |. 6A 07 PUSH 7004166C1 |. 52 PUS
2010-12-06 13:27:00
5042
原创 如何破解安腾校园网客户端(1)
注:本博文仅供学习参考,请不要用户其他非法用途。版本:安腾校园网客户端3.3.0操作系统:windowsXP背景:相信很大一部分的高校校园网客户端用的都是安腾校园网客户端,同学无意中发现了一个漏洞,那就是免费上网!真是爽啊。具体是这样的,由于学校对校园网的服务器端进行了升级,说简单点就是网关更改了,如果把电脑网关地址改为新地址,IP随便改(保证在同一网段内),学号随便输入,密码用原始密码,如果这个IP没有被绑定,那恭喜你,可以免费上网了。大家都知道客户端是通过IP,MAC,学号,密码来验证的,其中一个IP只
2010-12-06 11:04:00
12638
转载 【项目管理】创建SVN容器
<br />用 TortoiseSVN 进行版本管理时可以很方便的创建容器( repository )。 甚至在一个人开发的情况下也可以在本地创建一个容器 , 在工作的时候将项目checkout 出来,修改之后再 commit 。 这样既可以对每次提交的项目进行自动备份,同时又保留了项目进展的日志。 从而更加方便高效地管理项目。 要将一个项目放入容器中进行管理, 可以通过下面步骤: ● 确认正确安装有TortoiseSVN
2010-11-22 11:41:00
810
原创 如何在google code创建自己的工程
<br />在平时我们写代码往往会遇到这样的问题:对某个阶段的代码进行备份,防止由于编码的失误造成新版本错误太多,这时候需要恢复到之前的版本。我之前的做法就是将错误过多的代码删除,用原来备份的代码重新在写!这样非常的浪费时间与精力,解决这个问题的一个比较完美的方法就是利用google code!<br />1、工欲善其事必先利其器。<br /> 分别下载TortoiseSVN、AnkhSvn,下载的地址、安装的方法就不介绍了,大家可以google一下。但有一点需要注意,就是AnkhSvn有可能安装不
2010-11-12 10:15:00
1820
转载 MCIWnd的使用
<br />Windows中提供了一个MCIWnd窗口类,可以更加方便的在一个VC窗口中操作多媒体。 <br /> 使用MCIWnd,源文件中需要包含头文件 vfw.h,在Project->Settings->Link->Object/libray module中加入库 vfw32.lib。 <br /> <br />详细内容参考一下博文:<br />http://blog.163.com/xy-home/blog/static/29500416200762103958696/
2010-11-09 21:33:00
692
转载 [转][VC/MFC]VC资源分配、释放表
<br />资源 分配函数 清除函数 需要手动清除?<br />======================================================================<br /><br />Accelerators LoadAccelerators N/A
2010-11-08 16:43:00
440
原创 WTL按钮自绘机制
<br />这几天想自己写一个WTL的SkinButton,找了好长时间的资料才搞明白。<br />在搜索资料在过程中发现,大家都是知道怎么实现,贴出了一大段代码,但是很多人并不明白实现窗体自绘的原理。下面就如何实现窗体自绘我给出自己的解法:<br />1、第一步就是控件的子类化,这个是用来让自己写的类接受window消息的。这个就不具体讲解了,<br />可以参考:<br />http://www.cnblogs.com/wdhust/archive/2010/09/18/1830097.html<br
2010-11-07 11:02:00
3617
原创 搜索引擎探究(一)
<br />前段是时间找工作,受打击了,本以为自己熟练了掌握了C/C++,windows编程,ATL、WTL编程,可以熟练的编写win32DLL,可以熟练的写MFC程序,就可以找个差不多的公司,谁料到,并不是所有的公司都找这样写window客户端的人。<br />百度,搜索;阿里,数据挖掘。这些东西,我真是一窍不通,所以一怒之下开始研究搜索引擎(主要是想去百度,所以研究一下这个)<br />《自己动手写搜索引擎》罗刚写的那本,这本书写的不错,当然讲的比较简单,但是对于入门确是一本很不错的书。<br />一、
2010-11-06 19:20:00
708
原创 win32DLL导出函数、变量、类
<br />1、新建-->win32项目,程序名字为DLL,应用程序类型选择DLL,附加选项选择导出符号,添加公共头用于,这个可以选择ATL,也可以不选<br /><br />2、生成主要文件有DLL.h,DLL.cpp,注意此处的DLL可以是任意的<br />DLL.cpp内容如下:<br />// Dll.cpp : 定义 DLL 应用程序的入口点。<br />//<br />#include "stdafx.h"<br />#include "Dll.h"<br /><br />#ifdef _MAN
2010-11-06 17:20:00
2296
转载 Windows对象 (Object) 结构
<br />Windows系统的各种资源以对象(Object)的形式来组织,例如File Object, Driver Object, Device Object等等,但实际上这些所谓的“对象”在系统的对象管理器(Object Manager)看来只是完整对象的一个部分——对象实体(Object Body)。Windows XP中有31种不同类型的对象,Object Body反映了某一类型对象的特征信息,例如,文件对象使用FILE_OBJECT结构描述、驱动对象使用DRIVER_OBJECT结构描述、DEV
2010-11-03 17:03:00
585
原创 volatile存储器限定符
<br />对于volatile类型的变量,系统每次用到他的时候都是直接从对应的内存当中提取,而不会利用cache当中的原有数值,以适应它的未知何时会发生的变化,系统对这种变量的处理不会做优化——显然也是因为它的数值随时都可能变化的情况
2010-11-03 16:36:00
423
原创 Notepad++源码学习心得(不断更新中。。。)
1、功能点: 获取父窗口的背景色相关函数: static COLORREF getParentDlgBkColor(HWND hWnd)基本思想:给父窗口发送一条WM_ERASEBKGND消息,参数是一个与父窗口大小相同的位图;父窗口处理这个消息时候,将本身的或用指定的画刷将与自己背景色相同的颜色画在传进来的那张位图上然后在取得这张位图0,0点的颜色即可确定父窗口的背景颜色心得: 这个函数的处理比较简单,利用消息进行各个窗体间的通信。但是却有不好的感觉,因为这个函数的动机是用来获取父窗
2010-10-31 15:43:00
1681
转载 动态内存分配与释放(new and delete)
Cpp Operators of new and delete1. 动态内存分配与释放(new and delete)一般说来,一个对象的生命期是由它被创建时所处的区域决定的。例如,在一对{}类定义的一个对象,在离开这个由{}所界定的区域时,该对象就会被销毁,在这个区域之外这个对象是不存在的,程序的其他部分不能再引用这个对象了。<br /> 如果希望在离开了创建这个对象时所处的区域后,还希望这个对象存在并能继续引用它,就必须用new操作符在自由存储空间来分配一个对象。这个过程也叫做动态内存分配,也叫堆对象。
2010-10-31 15:36:00
5274
转载 动态内存分配与释放(new and delete)
Cpp Operators of new and delete1. 动态内存分配与释放(new and delete)一般说来,一个对象的生命期是由它被创建时所处的区域决定的。例如,在一对{}类定义的一个对象,在离开这个由{}所界定的区域时,该对象就会被销毁,在这个区域之外这个对象是不存在的,程序的其他部分不能再引用这个对象了。<br /> 如果希望在离开了创建这个对象时所处的区域后,还希望这个对象存在并能继续引用它,就必须用new操作符在自由存储空间来分配一个对象。这个过程也叫做动态内存分配,也叫堆对象。
2010-10-31 15:36:00
670
转载 动态内存分配与释放(new and delete)
Cpp Operators of new and delete1. 动态内存分配与释放(new and delete)一般说来,一个对象的生命期是由它被创建时所处的区域决定的。例如,在一对{}类定义的一个对象,在离开这个由{}所界定的区域时,该对象就会被销毁,在这个区域之外这个对象是不存在的,程序的其他部分不能再引用这个对象了。<br /> 如果希望在离开了创建这个对象时所处的区域后,还希望这个对象存在并能继续引用它,就必须用new操作符在自由存储空间来分配一个对象。这个过程也叫做动态内存分配,也叫堆对象。
2010-10-31 15:36:00
353
转载 动态内存分配与释放(new and delete)
Cpp Operators of new and delete1. 动态内存分配与释放(new and delete)一般说来,一个对象的生命期是由它被创建时所处的区域决定的。例如,在一对{}类定义的一个对象,在离开这个由{}所界定的区域时,该对象就会被销毁,在这个区域之外这个对象是不存在的,程序的其他部分不能再引用这个对象了。<br /> 如果希望在离开了创建这个对象时所处的区域后,还希望这个对象存在并能继续引用它,就必须用new操作符在自由存储空间来分配一个对象。这个过程也叫做动态内存分配,也叫堆对象。
2010-10-31 15:36:00
501
转载 定制new和delete(Cpp Operators of new and delete)
Cpp Operators of new and delete1. 动态内存分配与释放(new and delete)一般说来,一个对象的生命期是由它被创建时所处的区域决定的。例如,在一对{}类定义的一个对象,在离开这个由{}所界定的区域时,该对象就会被销毁,在这个区域之外这个对象是不存在的,程序的其他部分不能再引用这个对象了。<br /> 如果希望在离开了创建这个对象时所处的区域后,还希望这个对象存在并能继续引用它,就必须用new操作符在自由存储空间来分配一个对象。这个过程也叫做动态内存分配,也叫堆对象。
2010-10-22 13:15:00
1155
原创 匿名结构体的妙用
<br />struct { int iIndex ; TCHAR * szLabel ; TCHAR * szDesc ; } sysmetrics [] = { SM_CXSCREEN, TEXT ("SM_CXSCREEN"), TEXT ("Screen width in pixels") }; 注意上面的语法,匿名结构体后面没有分号,意味着sysmetrics []是一个这个匿名结构体类型的数组,在 sysmetrics []初始化时, SM_CXSCREEN, TEXT ("SM_CXSCREE
2010-10-07 10:15:00
4403
原创 Sum Problem
Sum ProblemTime Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 77962 Accepted Submission(s): 17478Problem DescriptionHey, welcome to H
2010-05-06 15:10:00
1016
原创 PPStream播放器完整控件
powplayerpsnetworkpp2play上面三个dll是必须的其中PowerList不是必须的,如果想开发网络电视则应该添加PowerList.ocx及相关组件下载地址http://www.ppstream.com/bin/powerplayer.cab 函数接口 Method void AboutBox();显示关于PPStream对话框.v
2010-03-20 20:06:00
780
原创 如何在在主窗体显示前显示一个窗体既广告窗体
public class StartUpMessage { public StartUpMessage() { } private bool _isInit = false;//如果想关闭线程中的窗体则将IsInit设置为TRUE public bool IsInit { set {
2010-03-20 12:45:00
910
原创 搜集的工具软件(.NET)
1 P/invoke interop assistant为某个指定api生成对应的C# 或vb.net的声明代码2 tlbimp将com类型库中的类型定义转换为公共语言运行库程序集中的等效定义3 tlbexp生成一个类型库,该类型库描述公共语言运行库程序集定义的类型4 。NET reflector强大的。NET程序集反编译工具5 msil汇编程序从中间语言msi
2010-03-19 12:56:00
417
kafka & mafka client开发与实践
2016-12-19
socket封装
2011-10-26
三层架构开发的C#视频播放器
2010-02-26
C#图形界面最小生成树
2009-07-10
AIX下如何劫持标准库函数
2013-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人