12 2011 档案
摘要:AFX_MANAGE_STATE(AfxGetStaticModuleState())AFX_MANAGE_STATE(AfxGetStaticModuleState());//用于模块切换时的状态保护,1.AfxGetStaticModuleState()指向当前模块状态;2.当前函数调用结束后原模块的状态自动被恢复;3.用于DLL中所调用MFC函数、类、资源时的模块状态切换现在刚上班就看看源代码,看到这个玩意儿没见过,就到网上,搜了一下,就搜到了。AFX_MANAGE_STATE(AfxGetStaticModuleState())看看这个东东到底是干吗的呢?摘自MSDN:Bydefaul
阅读全文
摘要:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的散列算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。1992年8月Ronald L. Rivest向IETF提交了一份重要文件,描述了这种算法的原理,由于这种算法的公开性和安全性,在90年代被广泛使用在各种程序语言中,用以确保资料传递无误等。MD5由MD4、MD3、MD2改进而来,一度主要增强算法复杂度和不可逆性。MD5一度被广泛应用于安全领域。但是由于
阅读全文
摘要:http://www.zezula.net/en/mpq/mpqformat.html文件格式MPQ文件是暴雪公司的一种私有文档打包格式,广泛应用在其游戏产品中,如魔兽争霸系列、星际争霸系列等、暗黑破坏神系列以及魔兽世界等。MPQ包内保存了几乎全部的游戏资源,包括模型、纹理、材质、动画、音频、视频、单位属性等等。除了游戏资源之外,这些游戏的地图、战役以及一些游戏的进度存档也是都MPQ格式,只是扩展名用了其他的标识。MPQ文档兼具打包和压缩的功能,并且其压缩算法可以根据具体文件格式而有所不同。例如,根据StormLib源代码结构信息,MPQ包至少支持bzip2、huffman、pklib以及一种
阅读全文
摘要:翻译前声明: 本翻译对于原文进行了适量删节和修改。 本翻译只做为学习参考使用,不得用于任何商业目的。 由于本人能力有限,如有错误请回帖指出 要转贴本翻译请征得翻译作者的同意。 原文地址:http://www.campaigncreations.org/starcraft/inside_mopaq/ 翻译文章地址:http://www.islga.org/bbs/read.php?tid=13735 原文作者:Justin Olbrantz 翻译作者:喀尔硫司之瞳 QQ:526312052 第一章 关于MPQ的历史 MPQ,也称MoPaQ,是Mik...
阅读全文
摘要:翻译前声明: 本翻译对于原文进行了适量删节和修改。 本翻译只做为学习参考使用,不得用于任何商业目的。 原文地址:http://www.campaigncreations.org/starcraft/inside_mopaq/ 第一章 关于MPQ的历史 MPQ,也称MoPaQ,是Mike O'Brien发明的一种压缩文件格式。 在1996作为,MPQ应用在Diablo(暗黑破坏神)游戏中。 然而它的版权属于 Blizzard 的父公司 Havas Interactive,并且在Mike O'Brien离开暴雪后继续使用。 正是MPQs由于在Diablo(暗黑破坏神)中的出色表现,
阅读全文
摘要:开始尝试翻译一些英文文章,最近正好对mpq产生兴趣,看到一片文章叫做 inside MPQ,于是翻译一下,就当锻炼自己吧。这篇文章非常的不厚道,在关键地方戛然而止,而且没有更新的迹象。让人郁闷无比。但是还是比国内一些研究MPQ的少的可怜的文章要好些。看了这些文章,无比惋惜国内技术的滞后和黑客技术,逆向工程技术的贫乏。我们总是拿来主义,做应用。自己的原创真的太少了。LEGAL COPYRIGHTSThe MPQ Format The copyrights to the MPQ format are held by Havas Interactive, Blizzard Entertainment
阅读全文
摘要:Ogitor-0.4.2源代码构建,不少时间,这里记录一下:下载源代码的地址为:http://hg.ogitor.org/v0-4点击zip(这个搞得我找了很久)可执行程序下载地址为:http://www.ogitor.org/Building+Ogitor&structure=Development(一)构建QT1.环境变量中加入bin路径:PATH--->C:/Qt/4.6.3/bin(我的路径是)2.环境变量中加入qt的路径:QTDIR--->C:/Qt/4.6.33.打开vs2008的命令提示行(如图)4.进入qt目录:cd C:/Qt/4.6.35.执行:conf
阅读全文
摘要:过去总以为vector和deque差不多,效率方面deque和vector接近,那干脆用效率高的vector好了。 但我忽略了另一方,一个事务存在就有它的理由,今天找到程序里面隐藏的bug给了我不得不用deque的理由,deque和vector的结构很类似,但它是多段连续空间,如果vector空间不够的时候,要重新分配空间,并把所有的数据复制到新的空间中去,deque不会这么做,它会去另外开辟一块连续空间去存放数据,所以存储效率方面deque高于vector,但deque又不同于链表,它可以说是顺序存储结构和链式存储结构的一个折中方案把,今天我写了段代码,是这样的结构vector<Ser
阅读全文
摘要:有些时候,我们要求一个程序在系统中只能启动一个实例。比如,Windows自带的播放软件Windows Medea Player在Windows里就只能启动一个实例。原因很简单,如果同时启动几个实例,却播放不同的文件,那么声音和图像就会引起混乱。在设计模式中,就有一个SINGLETON模式,该模式就是让类只有一个实例。(关于SINGLETON模式,可以看我那篇《重读《设计模式》之学习笔记(三)--SINGLETON模式的疑惑 》)。 对于程序而言,我们只有在程序启动的时候去检测某个设置,如果程序没有启动,就把设置更新为程序已经启动,然后正常启动程序;如果程序已经启动,那么就终止程序的启动。在程.
阅读全文
摘要:通常,我们写服务器处理模型的程序时,有以下几种模型:(1)每收到一个请求,创建一个新的进程,来处理该请求;(2)每收到一个请求,创建一个新的线程,来处理该请求;(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求上面的几种方式,各有千秋,第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单。第(2)种方式,由于要涉及到线程的同步,有可能会面临死锁等问题。第(3)种方式,在写应用程序代码时,逻辑比前面两种都复杂。综合考虑各方面因素,一般普遍认为第(3)种方式是大多数网络服务器采用的方式,这也是本文讨论的重点—事件驱动处理库。1. s
阅读全文
摘要:http://blog.csdn.net/starlee/article/details/1472710 现在有很多软件都支持拖拽功能,就是用鼠标拖着文件放到软件窗口中某个位置,软件就可以做出相应的反应。比如,Windows自带的播放软件Windows Media Player,你可以拖着一个媒体文件放到它的主窗口中,它就会开始播放这个文件。 怎么让自己的软件也有这个功能呢? 其实,并不是很难,只要让你需要有拖拽功能的控件响应WM_DROPFILES消息就行了。下面以Edit控件和ListBox控件为例子来说明。 首先,从CEdit继承,自定义一个Edit控件。在头文件添加如下的消息响应函数:
阅读全文
摘要:http://blog.csdn.net/starlee/article/details/945728 我们知道,在面向对象语言中,公有继承是IS-A的关系,也就是说子类是一种基类,就像说轿车是一种汽车一样。但是,有时候逻辑上正确的公有继承却会违反替换原则。面向对象设计中的替换原则是:子类必须能够替换掉它们的基类。也就是说,代码中基类出现的地方都能用子类来替换,就跟汽车能用的地方都能用轿车一样。但是,如果设计不合理,就会违反这个原则,给开发带来隐患。下面就以一个C++的例子来说明:classCShape{public:virtual~CShape(){};virtualdoubleGetAre
阅读全文
摘要:http://blog.csdn.net/starlee/article/details/1485248 ADAPTER模式可以将一个类的接口转换成另外一个接口,那样就可以使原来不兼容而不能一起工作的那些类可以一起工作。 ADAPTER模式也可以称为WRAPPER模式。 对于ADAPTER模式的简单包装功能,下面以STL中的一个例子来说明://下列代码片断摘自VC++6.0中的STACK//可以在..VC98/Include/STACK中找到template<class_Ty,class_C=deque<_Ty>>classstack{public://......va
阅读全文
摘要:1. Havok:老牌的君王,支持功能如下:http://www.havok.com· Collision Detection - including Continuous Physics™· MOPP™ Technology - for compact representation of large collision meshes· Dynamics and Constraint Solving· Vehicle Dynamics· Data Serialization and Art Tool Support· Visual D
阅读全文
摘要:导读:Brad Feld的一篇文章The Rise of Developeronomics中提到了“10倍效率的开发者(10x developer)”的概念(伟大的开发者的效率往往比一般的开发者高很多,而不只是一点点),Adam Loving在读了之后受到启发,并向多位大牛(Ben Sharpe、Collin Watson和Jonathan Locke)询问如何成为“10倍效率的开发者”,最后得到了以下的答案。1. 只做需要做的工作使用敏捷方法;全心全意做UX设计;沟通第一;编码也许不是解决问题的办法;过早的优化是一切罪恶的根源;选择最简单的解决方案。2. 站在巨人的肩膀上使用开源框架;使用简
阅读全文
摘要:http://blog.csdn.net/xushiweizh/article/details/1388982C++内存管理变革许式伟2005-7-16关键字: 内存管理 垃圾回收器 内存配置器 引用计数keyword: memory manage, memory recycler, allocator, reference count引言C/C++语言的内存管理经历了几次变革,但至今仍未能趋于成熟。这几次变革主要包括:1. 从malloc/free到new/delete。这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换
阅读全文
摘要:1 #include <iostream> 2 #include <crtdbg.h> 3 using namespace std; 4 5 #ifdef _DEBUG 6 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) 7 #endif 8 9 void EnableMemLeakCheck()10 {11 int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );12 tmpFlag |= _CRTDBG_LEAK_CHECK_DF;13 _CrtSetDbgF...
阅读全文
摘要:ClipCursor 函数功能:该函数把鼠标限制在屏幕上的一个矩形区域内,如果调用SetCursor或用鼠标设置的一个随后的鼠标位置在该矩形区域的外面,则系统自动调整该位置以保持鼠标在矩形区域之内。 函数原型:BOOL ClipCursor(CONST RECT * lpRect); 参数: IpRect:指向RECT结构的指针,该结构包含限制矩形区域左上角和右下角的屏幕坐标,如果该指针为NULL(空),则鼠标可以在屏幕的任何区域移动。 返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError。 备注: 1.光标是一个共享资源,如果...
阅读全文
摘要:UI控件都是图片渲染而成的。。 我采用ID3DXSperite的Draw()方法来渲染2D图片,在进行控件的鼠标检测时遇到问题。。。。有些区域检测不到,后来查了一下觉着是创建窗口的问题。 比如: #define WINDOW_WIDTH 800#define WINDOW_HEIGHT 600 #d
阅读全文
摘要:两种办法:1. atoi()2. int x = 'x' - '0';
阅读全文
摘要:最有效的办法就是用std::remove(); std::remove_if()算法。。。。。别用for循环来删除。。。。。很容易出错。
阅读全文
摘要:BOOL CMFCProjectApp::InitInstance(){ .... int ret = 0; FILE* fp; AllocConsole(); ret = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); fp = _fdopen(ret, "w"); *stdout = *fp; setvbuf(stdout, NULL, _IONBF, 0);}只要将上面的函数加到初始化的地方之后,就可以使用printf输出数据到console了,...
阅读全文
摘要:3.list容器中删除元素的方法 对于list容器,由于list本身有remove和remove_if的成员函数,所以最好优先考虑list自己的算法,对于remove函数,比较简单,不再讨论,对于remove_if函数,本人发现在vc6.0中有重大问题。我试了多种函数对象,总是编译不过,通过查看源代
阅读全文
摘要:2.使用 STL 中通用算法或容器成员函数删除元素的方法 以上手工编写 for 循环代码删除容器中元素的方法也有一些问题,如果判断条件特别复杂,又有循环判断的话,循环中间又有异常处理的话, ++itVect 的位置就要小心放置了,稍不留意就要出错。所以手工编写代码删除容器中元素的方法不太安全,代码重
阅读全文
摘要:在 STL (标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在 STL 中删除容器有很多陷阱,网上也有不少网友提到如何在 STL 中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器 vector 、 list 中安全
阅读全文
摘要:需求:屏幕上显示字体的时候,若字数过多需要分行显示(分2行),第一行和第二行各占一半的字符。 由于带显示的字符串为const char* pText = "..."; 其中包含有中文,标点符号,英文,数字等等,其中中文用2个字节来表示,其他用1个字节表示。若直接根据这个字符的长度分隔成2部分的话有可
阅读全文
摘要:http://blog.csdn.net/feimashenhua/article/details/6654995 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque); 另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用eras
阅读全文
摘要:先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.erase有3个重载:void erase ( iterator position );size_type
阅读全文
摘要:用自己的main loop替代系统的main loop#include "ogre/Ogre.h"#include "ois/OIS.h"class MyFrameListener : public Ogre::FrameListener{public: MyFrameListener(Ogre::RenderWindow* win) { size_t winHandle = 0; std::ostringstream winHandleStr; OIS::ParamList pl; win->getCustomAttribu...
阅读全文
摘要:ogre实现分屏渲染 1 class MyApplication :public ExampleApplication 2 { 3 public: 4 MyApplication() {} 5 ~MyApplication() 6 { 7 } 8 9 void createCamera()10 {11 mCamera = mSceneMgr->createCamera("mycamera1");12 mCamera->setPosition(Ogre::Vector3(0, 10, 20));13 ...
阅读全文
摘要:如果你能认真看完这篇文章,你真的会收获很多,虽然你不会像身历其境一样得到课程的内容,但如果你懂得思考,你真的会有很大的收获! 幸福是自己去争取的,不管是友情或爱情很多事情,错过了就没有了,所以如果你没有认真看完这篇文章,以后你就没有了! 我已经把这篇文章打印,放在电脑旁边!体会其中的深奥道理
阅读全文
摘要:教你在30岁前有所成就的方法 第一条:一个目标一艘没有航行目标的船,任何方向的风都是逆风1、你为什么是穷人,第一点就是你没有立下成为富人的目标2、你的人生核心目标是什么?杰出人士与平庸之辈的根本差别并不是天赋、机遇,而在于有没目标。3、起跑领先一步,人生领先一大步:成功从选定目标开始4、贾金斯式的人
阅读全文
摘要:~~~下载地址:http://msdn.microsoft.com/en-us/windows/hardware/gg463016
阅读全文
摘要:安装luaforwindows这个软件,自带一个scite编辑器,可以直接用这个编译器写程序。lua程序保存在**.lua文件中。退出时:os.exit()the first lua program: 1 function fact(n) 2 if n == 0 then 3 return 1; 4 else 5 return n * fact(n - 1); 6 end 7 end 8 9 10 11 print("enter a number:");12 a = io.read("*number");13 print(fact(a)...
阅读全文
摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 19
阅读全文
摘要:情景:server人数2000左右,client在玩家打开某个界面的时候向服务器请求服务器的当前时间来同步客户端本地时间。分析:按理讲服务器拿系统时间的这调用的开销是微不足道的,但是会出现服务器卡的情况。。。原因就是虽然这个请求服务器时间的操作是不频繁的。。。但是考虑到每个服务器有2000人,若再同一时间有1%的人同时请求这个时间,就会有20个人同时请求。。。所以每时每刻都会有20个请求去向服务器请求当前的时间。。。这就造成了服务器会处理大量的消息和发送大量的消息。。。这个开销还是很大的。。所以才会出现客户端玩家感到卡的情况。。。解决办法:在玩家进入游戏世界的时候,每个玩家都向服务器请求一下服
阅读全文