博文

[编程思想]大道至简--是懒人造就了方法(强烈推荐) (2006-08-10 16:10:00)

摘要:                                  第2章  是懒人造就了方法
             “僰蘭道有蜀王兵 ,亦有神作大滩江中。其崖崭峻不可破,(冰)乃积薪烧之。” 
                                                                                              ——《华阳国志》
1.  是懒人造就了方法 
        ......

阅读全文(4013) | 评论:3

[编程思想]大道至简--编程的精义(强烈推荐) (2006-08-09 23:47:00)

摘要:                                大道至简 
                                                                   ——软件工程实践者的思想 
 
                                       周爱民(Aimingoo) 著                     ......

阅读全文(3830) | 评论:0

[WIN编程]WINDOWS数据类型的转换大全(转)(2006-08-07 22:28:00)

摘要: 由Thinkboy提供 WINDOWS数据类型的转换


一、其它数据类型转换为字符串

短整型(int)
itoa(i,temp,10);//将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); //按二进制方式转换

长整型(long)
ltoa(l,temp,10);

浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小数点的位置,sign表示符号:0为正数,1为负数

CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;

BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);

CComBSTR变量
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf);

_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
_bstr_t bstrVar("test");
const char *bu......

阅读全文(4028) | 评论:0

[Win编程]pragma指令简介(转)(2006-08-07 22:15:00)

摘要:由Thinkboy提供 pragma指令简介

在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.
下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!

一. message 参数。

message
它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:

#pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。

假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86

#pragma message(“_X86 macro activated!”)

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了

二. 另一个使用得比较多的#pragma参数是code_seg。

格式如:

#pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节
如果code_seg没有带参数的话,则函数存放在.text节中
push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名
pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名
identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候......

阅读全文(2626) | 评论:0

[Win编程]Windows消息大全(转)(2006-08-07 22:12:00)

摘要:由Thinkboy提供
表A-1 Windows消息分布

消息范围
说 明

0 ~ WM_USER – 1
系统消息

WM_USER ~ 0x7FFF
自定义窗口类整数消息

WM_APP ~ 0xBFFF
应用程序自定义消息

0xC000 ~ 0xFFFF
应用程序字符串消息

> 0xFFFF
为以后系统应用保留


表A-2 常用Windows消息

消息名称

说 明

WM_NULL
0x0000
空消息,此消息将被接收窗口忽略

WM_CREATE
0x0001
应用程序创建一个窗口

WM_DESTROY
0x0002
一个窗口被销毁

WM_MOVE
0x0003
移动一个窗口

WM_SIZE
0x0005
改变一个窗口的大小

WM_ACTIVATE
0x0006
一个窗口被激活或失去激活状态

WM_SETFOCUS
0x0007
获得焦点后

WM_KILLFOCUS
0x0008
失去焦点

WM_ENABLE
0x000A
应用程序Enable状态改变时产生

WM_SETREDRAW
0x000B
设置窗口是否能重画

WM_SETTEXT
0x000C
应用程序发送此消息来设置一个窗口的文本

WM_GETTEXT
0x000D
应用程序发送此消息来复制对应窗口的文本到缓冲区

WM_GETTEXTLENGTH
0x000E
得到与一个窗口有关的文本的长度(不包含空字符)

WM_PAINT
0x000F
要求一个窗口重绘自己

WM_CLOSE
0x0010
当一个窗口或应用程序要关闭时发送一个信号

WM_QUERYENDSESSION
0x0011
用户选择结束对话框或应用程序自......

阅读全文(3286) | 评论:0

[C++]编程入门必做的题第1,2题思路.(2006-08-01 13:12:00)

摘要:第一题: /* 题目:
  1.  给定等式  A B C D E     其中每个字母代表一个数字,且不同数字对应不
                    D F G     同字母。编程求出这些数字并且打出这个数字的
             +      D F G     算术计算竖式。              ───────                 X Y Z D E
*/ /* 分析:
 1: 由G + G = E和F + F = D,知G = 0,F = 5.  如果G = 5则F + F != D,因为G + G会进一.  2: ABC + D + D = XYZ,知C + D + D会进2, 得C + D + D + 1(F+F进位的1) > 20, 而B + 2(前面进位的2)又要进1, 可知B = 9,Y = 1,( B != 8,因为如果B = 8, 则Y就会等于0, 而与G = 0 相矛盾). 也知 A = X - 1;  通过上2步,得出的结果是G=0, F=5, B=9, Y=1, A=X-1, C+D+D+1>20;
            ......

阅读全文(4914) | 评论:4

[C++]A* 算法之误区(转自云风)(2006-07-30 21:30:00)

摘要: 估计是因为我在上大学时在网上留过一篇文章,里面有一个简单的使用 A* 算法寻路的源程序,导致了这近七年来,不段的收到 email 和我讨论这个算法。 对,毫不夸张。那个简陋的代码。在七年前我随手写出来扔在网上后,已经遍布中文网络世界的犄角旮旯,让我在痛恨那段代码的时候,想收回都不可能。 我最大的困惑在于,为什么课堂上最为基础的算法知识,却有如此多的人行入误区。难道写游戏的程序员都不去读读基本的课本? A* ,读作 A-Star 。它仅仅是一个启发式搜索算法。就是说在一个可以被穷举的有限解空间集中,用比较有效的方法(主要是利用估价函数)求出最优解的算法。A* 跟寻路算法没有太多关系,我们只是借助了这个方法来解决寻路这个问题,正如四则运算对于无数的数学题一样,它只是一个基本工具。寻路算法本身有很多种,我们找到算法后,借助 A* 这个工具实现这个算法而已。 我的那篇文章中提到的,也是传统意义上的地图寻路,其实依据的是这样一种算法:把地图分成若干个格子,把起始点的格子上标作 0 。然后根据将周围一圈可以通畅的格子上标为1。然后再把所有标上 1 的格子周围可以通达的格子标为 2 ,当然,如果那些格子上已经有过数字了(一定比 2 小)就不用标了。 如此反复跌代下去,我们地图上的终点只要可以通达,就一定会被标上数字。而这个数字就是理论最短的距离,而标记过的每个格子都有一个前导的入口(即它由附近一个比它小 1 的格子引导过来)整个标记的过程逆推,也就找到了最短路径。 这种一步步尝试的过程,就是一种搜索过程。如果加上启发函数,不让它盲目的寻找,就衍生出很多启发式搜索算法。A* 是其中的一种。之所以加一个 * 号,是因为它的启发式函数是有限制的,这个限制确保它能找到绝对最优解,去掉这个限制,就是 A 算法了。 我们可以看到,把地图分格子,给格子间的路径一个权值(前面的例子中,格子间的距离都是相等的,我们也可以根据地形划分成不等的距离,即权值,或者定义单向道路,这都是可以的),这是解决寻路问题的关键,但都不是 A* 算法的范畴。 如果你想出某种算法,比如把地图划分成不规则的区域,或者把地图矢量化。依然可以再此基础上用 A* 算法这个工具来从中求到最优解。如果想别的方法来寻路,比如拟人的判断,预设路点等等,甚至按走迷宫的方法一样,分叉右转,碰壁回头,那些可以算是......

阅读全文(5089) | 评论:0

[C++]2005“现代C++设计与编程”讲师讲义下载(2006-07-13 00:19:00)

摘要:2005 "现代C++设计与编程" 技术大会 讲师讲义开放下载:       Bjarne Stroustrup  《Direction for C++0x》       云风  《游戏的优化》       孟岩  《什么是高级C++》       荣耀  《C++模板元编程技术与应用》       陈榕  《面向目标代码编程与C++的未来》       李建忠  《C++/CLI:建立本地世界与托管世界互通的桥梁》       张银奎  《C++异常处理得与失》       温昱  《架构设计:策略与过程》       何宗键  《C++在嵌入式系统中的运用》       鲍志云  《用C++开发高性能服务器端网络应用程序》       黄飞龙  《多核技术与C++并发编程》       王旭  《基于C++的网游服务器中间件模型》因牵扯到相关公司机密,不便公开。 有2,3篇讲义是英文的,看来要补下英文了,不然看不懂。。。  ......

阅读全文(3948) | 评论:7

[C++]初步掌握类和对象阶段一(2006-07-12 22:48:00)

摘要:初步掌握类和对象分三阶段来讲解:              第一阶段讲解:定义类,访问类数据成员和方法,在栈或堆上创建对象。              第二阶段讲解:类的构造函数, 析构函数。              第三阶段讲解:类的复制构造函数,赋值操作符。 之所以分为三个阶段来讲解是因为讲解的东西比较多和细,特别是第二阶段和第三阶段有很多细小的东西需要分析,不会一步概括。让你明白为什么会这样。。 口水话讲完。呵呵。 进入正题。               如果你对栈或堆没有初步的认识,可以看[C++]栈和堆原理介绍。               首先让我们来看下类是怎么定义的:                class 类名                                             &nb......

阅读全文(4007) | 评论:1

[C++]文件输出的怪异(BUG)之处(2006-07-08 19:32:00)

摘要:PS: 本来想写一个文件分割的程序,复习了下文件的输入输出,结果被偶发现了这个怪异之处。。呵呵   #include <fstream.h> // 写入
  int main( void )
  {
 char *name = "heshaohua"; 
 int age = 21;
 float salary = 2000;
 ofstream fout("Text.txt");            // 打开文件写入  // 写入资料
 fout << "此行写入了Test.txt中\n";        // 次句话长度为20,后面有用。 
 fout << name << " " << age << " " << salary;  fout.close();  return 0;
 
  } =================================================================== #include <fstream.h> // 读取
  int main( void )
  {
 char  line[1];        // 读取“此行写入了Test.txt中”这句话
 char  name[10];   // 读取姓名
 int   age;   
 float salary;  
 char *test......

阅读全文(3467) | 评论:0