博文
让对话框对UPDATE_COMMAND_UI生效(2007-04-24 12:05:00)
摘要:问题:一般情况下我们用UPDATE_COMMAND_UI来修改菜单的状态(enable/disable, check/uncheck, change text),但这个方法在一个基于对话框上的菜单却没有效果。
void CTestDlg::OnUpdateFileExit(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE);
pCmdUI->SetCheck(TRUE);
pCmdUI->SetRadio(TRUE);
pCmdUI->SetText("Close");
//以上方法在MDI、SDI程序中都能起作用,在对话框中却没有效果,根本没有调用这个函数。
}
原因分析:当显示一个下拉的菜单的时候,在显示菜单前会发送WM_INITMENUPOPUP消息。而CFrameWnd::OnInitMenuPopup函数会刷新这个菜单项,同时如果有UPDATE_COMMAND_UI响应函数,则调用它。通过它来更新反应每个菜单的外观效果(enabled/disabled, checked/unchecked).
在一个基于对话框的程序中,因为没有OnInitMenuPopup函数,所以不会调用UPDATE_COMMAND_UI响应函数,而是使用了CWnd类的默认处理, 这种处理没有调用UPDATE_COMMAND_UI响应函数。
解决方法如下:
第一步:
在对话框类的.cpp文件,添加一个ON_WM_INITMENUPOPUP入口到消息映射里面
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//}}AFX_MSG_MAP
ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()
第二步:
在对话框类的.h文件添加消息函数声明。
// Generated message map functions
//{{AFX_MSG(CDis......
VC++下MIDI、WAV及CD的播放 (2007-04-24 09:32:00)
摘要:VC++下MIDI、WAV及CD的播放
武汉石化设计院电算室
周红汉
---- 加入音乐是增强应用程序功能的所有方法中最简单的一个。几乎每个计算机游
戏或多 媒体程序都以某种MIDI或CD音乐为背景。音乐可以使用户心情愉快;在合适
的场合播 放恰当的音乐能够使程序员和他的VC++程序焕发光彩。
第一部分 MIDI的播放
---- 乐器数字化接口(MIDI)是由音乐界的一些大公司(包括生产电子音乐合成器
的公司) 制订的一项协议,后来被计算机产业所采用并成为多媒体音乐文件的标准
格式。MIDI文件 一般较小,对硬件设备的要求高。
---- 一、 原理
---- 虽然MicroSoft支持MIDI文件,然而Visual C++或MFC并没有创建任何组件来实现
这种支持,但是MicroSoft API提供了三种不同的方法来实现MIDI的播放:
MCI(The Media Control Interface)。这是最基本的方法,本文将详细讨论这种方法。
流缓冲器。这种格式允许应用程序为MIDI数据分配缓冲器。在需要精确控制MIDI播放的
时候,流缓冲器将很有用处。
低级MIDI设备。需要完全控制MIDI数据的应用程序可以使用这种方法。
---- MCI可以通过mciSendCommand()和mciSendString()来完成,本文仅使用
mciSendCommand()函数。
---- 原型:DWORD mciSendCommand(UINT wDeviceID,UINT wMessage,DWORD dwParam1,DWORD dwParam2);
参数: wDeviceID:接受消息的设备ID
wMessage:MCI命令消息
dwParam1:命令的标志位
dwParam2:所使用参数块的......
栈和堆的区别 (2007-04-22 16:28:00)
摘要: 栈和堆的区别 [老八 发表于 2007-1-4 21:28:08]
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似
于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与
数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静
态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后
有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序
这是一个前辈写的,非常详细
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地
方。
}
二、堆和栈的理论知识
2.1申请方式
stack:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap:
需要程序员自己申请,并指明大小,在c中malloc函数
如p1 = (char *)malloc(10);
在C++中......
Visual C++ MFC 中常用宏的含义(转载) (2007-04-22 15:11:00)
摘要:Visual C++ MFC 中常用宏的含义(转载)
AND_CATCHAND_CATCH
AND_CATCH(exception_class,exception _object_point_name)
说明:
定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型
,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特
别原因的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。
AND_CATCH可标记CATCH或AND_CATCH块的末尾。
注释:
AND_CATCH块被定义成为一个C++作用域(由花括号来描述)。若用户在此 作用域定义变量,那么记
住他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量。
ASSERT
ASSERT(booleanExpression)
说明:
计算变量的值。如果结构的值为0,那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非
0,那么什么也不做。 诊断消息的形式为: assertion failed in file in line 其中name是元文件名
,num是源文件中运行失败的中断号。在Release版中,ASSERT不计算表达式的值也就不中断程序。如果
必须计算此表达式的值且不管环境如何那么用VERIFY代替ASSERT。
注释:
ASSERT只能在Debug版中用
ASSERT_VAILD
ASSERT_VAILD(pObject)
说明:
用于检测关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数(把它们
作为自己的变量来传递)。在 Release版中ASSERT_VALID什么也不做。在DEBUG版中,他检查指针,以不
同于NULL的方式进行检查,并调用对象自己的 AssertValid成员函数。如果这些检测中有任何一个失败
的话,那么他会以与ASSERT相同的方法显示一个警告的消息。
注释:
......
落雪sxs.exe病毒和橙色八月病毒(2007-04-21 17:43:00)
摘要:郁闷中病毒了,搞了我两天.该死的病毒!
PS:用NOD32也可以杀这种毒,一般这个毒是通过优
盘传播的,大家使用移动盘的时注意
,先杀毒!
还有,用江民的魔波专杀工具也可以杀掉了!
目前有两个病毒都会在d,e,f盘产生autorun.inf文件,他们是落雪病毒和橙色八月病毒,
落雪sxs.exe病毒和橙色八月病毒症状都为d盘有一个autorun.inf文件,其他的盘也有感染的,删除以后还会生成
打开d盘时候,双击会自动运行文件
所以一定要右键打开,不要双击d盘切记
橙色八月病毒下载地址:
http://www.gao10.com/softup/sxs专杀工具.rar
落雪专杀sxs.exe下载地址:
http://www.gao10.com/softup/落雪专杀.rar
autorun.inf和rising.exe病毒,崔衍渠教你杀
2007-04-20 16:03
1. 杀毒前关闭系统还原(Win2000系统可以忽略):右键 我的电脑 ,属性,系统还原,在所有驱动器上关闭系统还原 打勾即可。
清除IE的临时文件:打开IE 点工具-->Internet选项 : Internet临时文件,点“删除文件”按钮 ,将 删除所有脱机内容 打勾,点确定删除。
关闭QQ等应用程序。进行如下操作前,请不要进行任何双击打开磁盘的操作。所有下载的工具都直接放桌面上。
2.用强制删除工具 PowerRMV
下载地址: http://post.baidu.com/f?kz=158203765
分别填入下面的文件(包括完整的路径) ,勾选“抑止杀灭对象再次生成”,点杀灭 【有找不到提示的请忽略错误继续】
C:\Autorun.inf
C:\rising......
强势陈天桥:当场训斥浪费粮食 辩论所向无敌(2007-04-17 18:33:00)
摘要: 在一些人眼中,陈天桥沉默寡言,老谋深算,似乎不可接近。而朱威廉却更能理解“强势”又“偏执”的陈天桥,知道他正进行着“谨慎”的战略思考。
陈天桥是一个褒贬不一的争议人物,朱威廉同样也是。朱笔下的陈天桥“激流勇进、逆风飞扬”,一股“英雄惜英雄”的情感跃然纸上。
我这个人,你说我野马也好,牛仔也成,痞子也罢,混混也行,反正我就是自由惯了,受不得拘束。给谁打工此等俗事,精神不乐意,肉体会抗拒,以前想都没有想过。直到我知道了盛大,认识了陈天桥。
陈天桥是我人生中第一个老板,一个很有个性的CEO,一个中国互联网的风云人物。他为我提供了一张进入“嘉年华”的门票,我在盛大的2年时间犹如坐过山车,过程中充斥了尖叫与刺激,事后又有着刻骨铭心的回忆。
陈天桥很强势,很霸气。初次见面,就给我留下了深刻的影响。他人不高,但是气势十丈高,压得住人。他男生女相,南人北相,有着超乎其年龄的老成——听他说话,不快不慢,中气十足,声音顿挫有力,逻辑感强烈,气势如海啸般扑面而来。
一听到你的言语有什么问题,他会立刻指出来;如果他懒得纠正,眼角也会扫视你一下,眼神犀利得可以让人当场毙命。心理素质不好的人必定肾上腺激素分泌加快,呼吸困难,平时讲话的果断利索全然消失(现在想想,我那结巴的毛病估计就是当年落下的)。所以公开论坛演讲时,很多老总不愿意排到陈天桥后面,就像大部分女歌手不愿在演唱会上碰到实力派女高音韩红一样。
他一度“不敢”坐飞机
陈天桥为人非常谨慎,绝不像某些媒体描述的那样好赌。相反,他非常精于计算,喜欢全局的控制感,或者说更像个工程师——既要注意大局的平衡,也要缜密地计算到每个细节,恨不得生出三头六臂,将每颗螺丝帽的位置一一扳正。
看到有人浪费食堂饭菜,他怒不可遏,当场训斥;看到部分员工行为不文明,他亲自写文章并召开大会小会纠正不良作风。在文化建设方面,陈天桥向来是一人担纲的。哪几种人是受欢迎的,哪几种人是不受欢迎的,各种有关树立企业文化的运动此起彼伏。毫不夸张地讲,从餐桌到卫生间,陈天桥无时无刻不在思考着有关企业发展的种种问题。纵使陈天桥已经不是“福布斯中国排行榜”的首富,但是如果《福布斯》能出一个中国最操劳CEO的排行,陈天桥的名字应该高居榜首。
这种操劳一直纠缠着陈天桥。自从盛大开始运营网络游戏后,焦虑就从未离开过他。按照......
学编程的人不能不看的好文章(2007-04-17 18:16:00)
摘要:做为一名大四的学生,我面试过不少的单位,有成功的也有失败的,但是对我来说所有的失败在某种意义上都是一种成功,特别是我下面写的这些,写这篇文章的时候,我已经签了南京的一家软件公司,但是想起今年2月21日我面试苏州台湾的IT公司的经历联想到我们现在学习编程的一些情况我真的深有感触,这次面试使我深深的体会到了失败但也收获了很多。我要说的将分成三部分,1.是我面试的具体经过2.是由面试想到的3.现今我应该做的。当然这些话很大程度上是我个人的意见,不可能完全得到大家的赞同,所以在某些观点上如果哪位朋友觉得跟我的有很大出入,请不要介意,也不要对我攻击,就当我没有说过,欢迎和我联系共同探讨这些问题!我的EMAIL:wutao8@263.net
1.面试经过
大约在年前我接到了台湾瑞晟(Realtek)苏州公司的面试通知,通知我2月21日到苏州工业园区面试,接到面试后的几天我把一些专业课温习了一遍,特别是C++和数据结构,由于大学几年里,我一直专研这些方面,加上通过了高级程序员的考试,对于一些常用的算法我差不多也达到了烂熟于胸的地步,当时的感觉是如果问了我这些方面的问题我应该是没有问题的!
21日那天我被安排在4:30面试,由一位技术人员单独给我面试,在问了一些简单的问题之后他给我出了一道编程题目,题目是这样的:
(由于具体面试的题目比较烦琐,我将其核心思想提取出来分解成了两个独立的简单的问题,有可能问题分解的不当,请大家见谅,实际面试了一个的问题但比其复杂很多,而且涉及一些高等数学变换)
1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
哼,我的心里冷笑一声!没想到这么简单,我有点紧张的心情顿时放松起来!
于是很快我给出我的解法:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
......
VC网络类编程:处理TCP网络传输“粘包”疑难(2007-04-16 13:03:00)
摘要: 在应用开发过程中,笔者发现基于TCP网络传输的应用程序有时会出现粘包现象(即发送方发送的若干包数据到接收方接收时粘成一包)。针对这种情况,我们进行了专题研究与实验。本文重点分析了TCP网络粘包问题,并结合实验结果提出了解决该问题的对策和方法,供有关工程技术人员参考。
一、TCP协议简介
TCP是一个面向连接的传输层协议,虽然TCP不属于iso制定的协议集,但由于其在商业界和工业界的成功应用,它已成为事实上的网络标准,广泛应用于各种网络主机间的通信。
作为一个面向连接的传输层协议,TCP的目标是为用户提供可靠的端到端连接,保证信息有序无误的传输。它除了提供基本的数据传输功能外,还为保证可靠性采用了数据编号、校验和计算、数据确认等一系列措施。它对传送的每个数据字节都进行编号,并请求接收方回传确认信息(ack)。发送方如果在规定的时间内没有收到数据确认,就重传该数据。数据编号使接收方能够处理数据的失序和重复问题。数据误码问题通过在每个传输的数据段中增加校验和予以解决,接收方在接收到数据后检查校验和,若校验和有误,则丢弃该有误码的数据段,并要求发送方重传。流量控制也是保证可靠性的一个重要措施,若无流控,可能会因接收缓冲区溢出而丢失大量数据,导致许多重传,造成网络拥塞恶性循环。TCP采用可变窗口进行流量控制,由接收方控制发送方发送的数据量。
TCP为用户提供了高可靠性的网络传输服务,但可靠性保障措施也影响了传输效率。因此,在实际工程应用中,只有关键数据的传输才采用TCP,而普通数据的传输一般采用高效率的udp。
二、粘包问题分析与对策
&nb......
人工智能在五子棋上的应用(2007-04-11 17:13:00)
摘要:人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术,AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。
策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。下面我们先介绍一下五子棋的AI构想。
五子棋的AI构想
有句话叫“当局者迷,旁观者清。”,但这句话在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率,也就是说,一个完整的五子棋的AI构想必须:
1、能够知道所有的获胜组合;
2、建立和使用获胜表;
3、设定获胜的分数;
4、使电脑具有攻击和防守的能力;
一、求五子棋的获胜组合
在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为10*10。
(1)计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60
(2)计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60
(3)计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36
(4)计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 ,这样所有的获胜组合数为:60+60+36+36=192
二、建立和使用获胜表
我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜......
[创业]李想:创业可以毁掉一个人的一辈子(转)(2007-04-11 13:01:00)
摘要:
几周前认识一个小兄弟,在英国上学,圣诞节期间回国,正好看到了介绍我创业的电视节目(BTV的),和我聊了一下,似乎中了邪,前几天回英国收拾了所有的东西,回国准备创业。
当我知道这个消息的时候,我简直内疚死了。他放弃了英国的学业,选择了一个万分之一成功率的事情来做,简直是愚蠢到家了。
周六的时候,我晚上再次见到他,我要做的就是让他放弃创业。他描述了Youtube的梦想,描述了很多互联网的创业点子,但是这些点子我早就听过了,而且我思考的比他多得多,他不懂技术、不懂运营、不懂市场、不懂管理,也没有团队,一切创业基础都不具备,仅仅依靠一个点子就想成功,简直就是天方夜谭。
我不知道目前中国的年轻人有多少人有这样的想法,我反正经常收到邮件,他们仅仅是一个已经被几十万人同时在想的点子,什么条件都不具备,就指望依靠这个点子就想创业成功,甚至连如何搭建团队这个基本的不能再基本的问题,都不知道应该自己去解决,这样的去创业,只有一条路:就是死!
大家都在媒体看到的是李想、戴志康、高燃、茅侃侃是如何创业的,但是似乎没有人关心这背后有什么。我12岁开始自学电脑,也就是说,到现在为止,我其实创业了13年了。6年是创办公司以前,2年是小规模运作,5年的商业化。
我高中的时候就每天睡5个多小时,为电脑和互联网付出6-8个小时,不是说我高中毕业就能创业了,是我已经准备了6年了,这6年比上4年的大学还要扎实,然后我又吃了7年的亏(什么困难我都没有过丝毫放弃的念头),才有了今天这微不足道的小成绩而已,如果你什么都不会,不过有毅力准备十几年后看到点成绩,你可以走这条路,不过你还要有天时地利任何的运气。
只有一个点子,什么都不具备的情况下,则只有死路一条。
所以,星期六晚上除了说服小兄弟不要创业,更重要的是给他一条更现实的路。现在不能创业,不代表未来不能创业,如果有好的跳板,未来创业可能会更好。
这个小兄弟最喜欢的是汽车,非常了解汽车(FANS型的),在英国生活了几年,英语没有任何问题。他的梦想是成立中国人自己的汽车公司,好了,我想到了,他可以选择去上海某汽车公司的北京4S店,做市场或者销售,该国内汽车厂商用的技术和设计人员都是英国人,如果这个小兄弟可以做这个品牌4S店的销售或者......