travelling throughout my life
日历
网志分类
· 所有网志 (136)
· 今日新闻 (57)
· 人生感悟 (13)
· 经典转贴 (43)
· 学习资料 (15)
· 生活小贴示 (8)
最新的评论
站内搜索
友情链接
· 歪酷博客
· 我的歪酷
· 李想的BLOG
· 十年光阴--阿南(曾就职nortel)
· 路加的个人文集
· 开复学生网
· 阳光节拍
· 飞扬博客(软件开发)
· way——行之路
· Skintbobby's Paradise
· 宝宝休息——很多公司的笔试试题
· 阿蒙博客
· 曾随织女渡天河
· 武大新闻院硕士
· k_eckel's mindview
· 烂 柯 人

订阅 RSS

0052911

歪酷博客

一片明净的空间里记下我 独自 走过的
拼命三郎 @ 2007-05-05 16:59

她的优点:
1.性格比较开朗,人缘不错;
2.对待工作比较用心,求上进;
3.不会铺张浪费(收入增加以后呢?);
4.有将来在一起的想法。

她的缺点:
1.不太关心人,不太体贴,有点小自私;
2.物质欲比较强,有点虚荣心;
3.不爱沟通内心真实想法;
4.和异性交往比较随便;
5.不够稳重,有点孩子气;
6.有时说话语气带着一种傲慢;
7.对感情产生过怀疑,曾提出过分手;
8.父母双下岗,家庭负担较重。



 
拼命三郎 @ 2007-04-19 20:08

(中国经营报 周振基)

   “华为员工患忧郁症不断增多”

    最近,网上众多博客纷纷转载华为总裁任正非的一篇讲话,标题叫做《要快乐的度过充满困难的一生》,文中任正非说:“华为员工中患忧郁症、焦虑症的不断增多,我在思考有什么办法可以让员工积极、开放、正派地面对人生?”他表示:“我也曾是一个严重的忧郁症、焦虑症的患者,在医生的帮助下,加上自己的乐观,我的病完全治好了。我相信每一个人都能走出焦虑症和忧郁症的困境。”本报记者打电话联系华为相关负责人,核实该文的真假,得到肯定的答复。

    或许可以说,抑郁是一种聪明人才能得的流行病。一个不求上进、得过且过的平庸之辈打死也不会抑郁。优秀企业家在创造高速经济增长奇迹的同时,心理疾病也在他们之间蔓延。商业领袖们如何才能快乐地赚钱?又如何快乐地花钱?心道和商道如何才能融会贯通?作为一个曾经的抑郁症患者,任正非的感悟是非常具有借鉴意义的,所以我们邀请著名心理学家周振基对“任氏药方”做一个心理学解读。

    任正非说

    员工不能成为守财奴,不能成为金钱的奴隶,丰厚的薪酬是为了通过优裕、高雅的生活,激发人们更加努力地去工作、有效的奋斗而服务的,不是使我们精神自闭、自锁。

    突然富有后,就不知所措了。有些人表现得奢侈,张狂,在小区及社会上表现出那种咄咄逼人,不仅自己,自己的家人也趾高气扬——部分人对社会充满了怀疑的眼光,紧紧地捂着自己的钱袋子,认为谁都在打他的主意。

    任何时候,任何处境都不要对生活失去信心。

    只要你想快乐一定会快乐。

    人是有差距的,要承认差距存在,一个人对自己所处的环境不能不断地攀比。

    员工不必为自己的弱点而太多地忧虑,而是要大大地发挥自己的优点,使自己充满自信,以此来解决自己的压抑问题。

    心理学说

    每一个人幼年时期的生活环境或特殊事件,都会在当事人的精神层面留下难以改变的痕迹,成为左右他(她)行为的内在动力之一,一个人对钱财作用的认识,往往来自于往日经历或事件的体会;成为金钱的奴隶、自闭、自锁的人,与金钱的多少无关,关键是改变金钱对自己有何作用的认识。

    人在觉醒状态的行为,其80%受潜意识的支配。属于潜意识范畴的十余种精神防御机制中有一种称为“反向形成防御机制”,那些突然富有后便“表现得奢侈、张狂”、“咄咄逼人”的人,恰恰反映出其内在强烈的自卑和自我评价体系的扭曲;他们只有用这样的行为才能够为自己建立起所谓的“自信”。至于那些“对社会充满了怀疑的眼光”、“认为谁都在打他的主意”的人,很大程度上是由于本人的安全感缺失、或是信任感缺失所造成的。

    所谓心理一词所包含的是三个概念:认知、情绪情感和意志力。一个人具有主客观相符的信心并能够做到无论是在何种情境或时间的条件下都能够保有,实际上已经标志着这个人的认知和意志力的水平比较高,也是具有较好心理健康水平的标志。如果目前在客观上尚不能做到的话,需要不断地加强训练,经常告诫自己“再坚持一下”,以此来应对在工作和生活中的事件和处境,就很有可能达到自己理想的境界。

    给自己一个积极的暗示并不断努力,愿望就很有可能变为现实,有人甚至把概率量化到80%。从理论上说,每个人快乐的内涵不尽相同,相互之间也没有可比性;但这个故事给人以启迪的是:人不能没有快乐的愿望。

    人贵有自知之明,这个“明”就是准确、客观,也可以说是对自我的认识要准确、客观。就人的智力而言,作为万灵之长却是无很大差异,但自身经历、经验、先天特质以及客观机遇等则具有很大差异和差距的。做一些不相符的攀比,必然要做出有悖于客观现实的选择,带来的只有苦恼和焦虑,甚至是抑郁。明智的选择是准确、客观地认识自我,找到自己的定位,不做非分之想。

    心理学认为认知角度决定行为模式;逻辑学中的定理说:概念决定推导结论的正确与否。专注于自己的弱点、“软肋”,降低自身的自信水平,甚至导致对自我的压抑,完全是由于认知角度和自我评价体系的偏差所造成。正确地认识自我,客观看待自身的优点和弱点,对自己得出一个公正的概念,必要时更多地看自己的优点,在现实生活中经常充满愉悦的感觉,忧虑、烦恼和痛苦就会远离自己。

    非处方走出抑郁

    抑郁症不是单纯的心理问题,60%以上有其生物学原因,即人的大脑内分泌的化学物质发生变化,造成神经传导递质水平发生改变而引起的。一旦确诊求助者是生物性抑郁症,一般就要到

    医院吃药。对于不能确定是否属于躯体原因,中度和重度抑郁的也要住院治疗。

    对于属于明显的社会性和心理原因导致的抑郁,程度较轻的,可以进行心理咨询,也就是通过心理学的方法而不是通过医学的方法来疏解。抑郁是情感障碍,又称心境障碍,咨询的主要手段就是提供无条件的精神支持,通过修正他的过低的自我认知来克制抑郁的侵蚀。训练有素的心理咨询师可以帮助抑郁的人们辨别导致他们抑郁的原因,帮助他们了解哪些方面可以解决或改善,提高他们在自我评价、人际关系方面的认知。

    企业家应该注意,体重改变、早醒、疲惫感、性欲降低,可能是单向抑郁的征兆。如果相反,话语增多,精力旺盛,也应该提高警惕,因为躁狂可能导致抑郁。抑郁症不是绝症,可以治愈,我建议如下:

    把复杂的问题分解成简单问题。抑郁情绪的出现很多是因为思维方式导致的,其中一个共同的特征是面对复杂的问题难以找到解决的方法。所以,可以尝试着有步骤地分析出简单的具体问题,然后制定解决的计划。

    了解自己的极限。有一些抑郁情绪是由于压力所产生的焦虑导致的,其中一个原因是自己承担了本不能承担的压力,不能意识到自己的极限。了解自己的能力是解除抑郁状态或情绪的方法之一。

    提高活动水平、分散注意力。在抑郁状态中人们想到的多是消极的事情,这时要采用不同的方式让自己活动起来,不要总是在封闭的空间内,把注意力从消极事件中分散出去。

    从不同角度看待问题。训练自己学会不要只是考虑一个结果或只是寻找一个答案,当发现自己被一种结论或观念困扰时,有意识地从对立的角度寻找另一种结论或答案。

    参加体育运动,调动自身生物能量。神经科学认为,人在抑郁状态时,神经系统中可以使人兴奋的神经递质减少,而体育运动可以增加这种物质。所以,每天坚持30分钟以上的体育锻炼对缓解抑郁情绪有很好的效果。

    保持良好的生活规律。在抑郁情绪出现后,尤其注意自己生活规律的坚持,按时饮食、休息,尤其注意少喝酒,因为酒精对人神经系统的作用是先扬后抑,只能加重抑郁情绪。

    借颜色点缀转换自己的心情。环境中鲜亮色彩对抑郁中的人具有视觉刺激作用,亮丽的窗帘、鲜艳色调的衣服都可以起到改善心情的作用。有时候多晒太阳也会有很好的效果。

    吃出好心情。有研究表明,人在进食过程中副交感神经的作用会让人有松弛的感觉;食品中的糖分会让人的生理生化指标改善。条件允许的人在此时可以进食一些巧克力。

    必要时进行心理、生理和药理干预。一般情况下,上述抑郁症状出现三周以上,并且没有缓解的趋势时,就应该寻求专业人员的帮助:心理咨询、心理治疗和医生处方用药都是必不可少的。(爵也编辑)




 
拼命三郎 @ 2006-02-28 09:27

给中国学生的第五封信 – 你有选择的权利

 

李开复
2005年11月


      有一位中国留学生看完了我《写给中国学生的第三封信》后,感触很深,他写了一封信给我说:“很小的时候,我的目标就是长大,长大了做什么,我当时没有想;读小学的时候,父母给我的目标就是考初中,考上初中做什么,我没有想过;读初中的时候,父母给我的目标就是考高中,考上高中做什么,我没有想过;读高中的时候,父母给我的目标就是考大学,考上大学做什么,我没有想过;上大学的时候,父母给我的目标就是要出国,出国做什么,我也没有想过;现在留学拿到了学位,要找工作了,下一步我该做些什么呢?这次,我要好好地想一想。谢谢你的第三封信,它唤醒了我埋藏了25年的进取心,它改变了我25年来被动的生活方式。从今天开始,我要积极主动地为自己而生活!”
      当我为这位中国留学生终于理解他“有选择的权利”感到欢欣鼓舞的时候,我不禁想到,还有更多的年轻人依然在被动的道路上迷茫地生活着。在“开复学生网”我每天都看到:“只有你能告诉我,我该怎么做。”的被动思维。
      在中国的教育体制下,学生们事事要听从父母和老师的安排,遇到问题也可以直接从父母和老师那里获得帮助,这很容易养成被动的习惯。因此,许多中国年轻人不善于主动规划自己的成长路线,不知道如何积极地寻找资源,使自己的学业和人生迈上更高的阶梯。
      另一方面,中国的父母和老师习惯于使用越俎代庖的方式,帮助孩子设计人生规划,这通常会使很多人忽视了自己真正的性格和兴趣,当这些孩子长大以后,他们多半会发现,自己早已迷失在“自我缺失”的海洋里了。
      此外,中国的传统文化强调群体意识,大力推崇“从上”、“从众”等行为方式,这些思想潜移默化地影响着一代又一代的青年,以至于许多年轻人觉得,“自主”这两个字是那么陌生和遥远。
      所以,消极到积极之路是充满荆棘的。虽然在我的前四封信都有提到积极主动的重要性,我决定特别写一封有关积极主动的信。
      为了成为国际化的人才,为了在信息时代发挥自己的最大潜能,每一个有进取心的中国青年都应该努力迫使自己从被动转向主动,大家必须成为自己未来的主人,必须积极地管理自己的学业和未来的事业——没有人比你自己更在乎你的工作与生活,没有人比你自己更适于管理你的人生和事业,只有积极主动的你,才能找到真正的“自我”,才能让自己在成功的道路上永远快乐!

什么是积极主动?

消极被动的人 积极主动的人
自己和环境 自己受环境的左右 自己有选择的权利
人和事 事情主导人 人可以主导或推动事情的进展
遇到问题时 寻求帮助 独立思考
环境不好时 怨天尤人 积极进取
自常说的话 只有你可以告诉我该怎么做。
我必须服从环境的安排。
谁可以告诉我该选什么专业?
怎么都没有人注意到我?
我总是没时间做某事。
只有你可以告诉我该怎么做。
我父母都有糖尿病,我也一定会得。
一切靠自己,我可以做得更好。
我有选择的权利。
我要制定一个计划,以选择最适合我的专业。
我要去学习如何引起人们的重视。
我该放弃哪些不重要的事,才能做最重要的事?
只有我自己才有权利和责任决定我该怎么做。
虽然父母有糖尿病,但只要注意锻炼,注意饮食,就能降低得病的几率。

  















     消极被动(Reactive)的人总是认为自己受环境和他人的左右,如果别人不指点,环境不改变,自己就只有消极地生活下去。碰到问题的时候,消极被动的人总会找人帮着决定,环境不好的时候,他们就会怨天尤人。他们总是在等待命运安排或贵人相助。对一件事情,他们总认为是事情找上他们,自己无法主导或推动事情的进展。
     积极主动(Pro-active)的人认为,无论在任何情况下,自己总有选择的权利。所以,他们对自己总是有一份责任感,因为命运操纵在自己的手里,而自己并不是环境或他人的附庸。对一件事情,他们总是认为,自己可以主导事情的发生、发展。

为什么要积极主动?
     三十年前,在工业社会里,每位员工是企业的机器里的一个齿轮。虽然机器需要齿轮,但是齿轮是可替换的。最好的齿轮是耐用的,不是卓越的。因此这些公司最喜欢的人才是:

一个有专业知识的、能够埋头苦干的人。

      斗转星移,在今天这个瞬息万变的时代里,人们对人才的定义已经发生了很大的变化,因为在现代化的企业中,有更多的人享有决策的权利,有更多的人必须在思考中不断创新,也更多的人有足够的空间来决定要做什么、要怎么做……大多数人的工作不再是机械式的重复劳动,而是需要独立思考、自主决策的复杂过程。著名的管理学家彼得?德鲁克(Peter Druker)曾指出:“未来的历史学家会说,这个世纪最重要的事情不是技术或网络的革新,而是人类生存状况的重大改变。在这个世纪里,人将拥有更多的选择,他们必须积极地管理自己。”所以,今天大多数优秀的企业对的人才的期望是:

积极主动、充满热情、灵活自信的人。

      要想在现代化的企业中获得成功,就必须努力培养自己的主动意识:在工作中要勇于承担责任,主动为自己设定工作目标,并不断改进方式和方法;此外,还应当培养推销自己的能力,在领导或同事面前要善于表现自己的优点,
      作为当代中国的青年一代,你应该不再只是被动地等待别人告诉你应该做什么,而是应该主动去了解自己要做什么,并且规划它们,然后全力以赴地去完成。想想今天世界上最成功的那些人,有几个是唯唯诺诺、被动消极的人?对待自己的学业和研究项目,你需要以一个母亲对孩子那样的责任心全力投入、不断努力。只要有了积极主动的态度,没有什么目标是不能达到的。
      其实,许多年轻人并不是没有积极主动的态度做出自己的决定,而是不习惯在重大问题上做出自己的决定。如果我问一位中国的大学生:“你最常做的决定是什么?”他的回答很有可能是决定买什么样的电脑,看什么电影,读什么书等等。这些事情固然需要做出决定,但是,许多更重要的决定更需要由你自己做出。例如,像读什么专业,读什么学校,考研还是出国等决定,大家可能习惯于听父母的安排,或参考大多数同学的选择——殊不知,在这些最重要的问题上,只有你自己的决定才能帮助你迈向真正的成功。自己做无关紧要的决定,但是对一生有重大影响的决定却听他人的。这是多么不合逻辑呀!此外,就算你自己做出了决定,也不见得你事先已经花了足够的时间调查和研究。鲁莽或草率的决定可能会让你后悔一辈子!
      当Google的创始人赛吉?布林(Sergey Brin)和拉里?佩奇(Larry Page)在电视上被访问时,记者问他们的成功应该归功于哪一所学校,他们并没有回答斯坦福大学或密西根大学,而回答的是“蒙台梭利小学”自由自在的学习没有任一消极输入的方式。在蒙台梭利教育的环境下,他们学会了“自己的事,自己负责,自己解决”是这样的积极教育方式赋予了他们鼓励尝试,积极自主,自我驱动的习惯,因而带来了他们的成功。
      所以,每一个年轻人都要拥有一个积极、主动的心,你必须善于规划和管理自己的事业,为自己的人生做出最为重要的抉择。没有人比你更在乎你自己的事业,没有什么东西像积极主动的态度一样更能体现你自己的独立人格。
      正如美国诗人惠特曼《草叶集》里所写的那样:“我不能,别的任何人也不能代替你走过那条路;你必须自己去走。”

积极主动的七个步骤
      要达到积极主动的境界,我建议大家按照下面图中所示的七个步骤,循序渐进地调整自己的心态,培养自己的习惯,学习把握机遇、创造机遇的方法,并在积极展示自我的过程中收获成功和快乐。

步鄹一:拥有积极的态度,乐观面对人生
      心理学家早已发现:一个人被击败,不是因为外界环境的阻碍,而是取决于他对环境如何反应。中国国家男子足球队前主教练米卢蒂诺维奇所说的“态度决定一切”就是这个意思。埋怨不会改变现实,但是积极的心态和行动可能改变一切。
根据心理学家的统计,每个人每天大约会产生5万个想法。如果你拥有积极的态度,那么你就能乐观地、富有创造力地把这5万个想法转换成正面的能源和动力;如果你的态度是消极的,你就会显得悲观、软弱、缺乏安全感,同时也会把这5万个想法变成负面的障碍和阻力。
      消极的人允许或期望环境控制自己,喜欢一切听别人安排,但在这样的情况下,他不可能拥有控制自己命运的能力,也无法避免失败的厄运;相反的,积极的人总是以不屈不挠、坚忍不拔的精神面对困难,他的成功是指日可待的。积极的人总是使用最乐观的精神和最辉煌的经验支配、控制自己的人生;消极者则刚好相反,他们的人生总是处在过去的种种失败与困惑的阴影里。
      有了积极的态度,并不能保证事事成功。积极的态度肯定会改变一个人的生活方式,但并不能保证他每件事都心想事成;可是,坚持消极的态度却必败无疑,我从来没见过哪个持有消极态度的人能够取得可持续的、真正的成功。
      当然,不是每一件事情都必须由自己来选择,也不是每一件事情都可以由自己来主导。所以,在选择积极态度的同时,我们必须保持平和的心态,也就是我常说的那句话:
有勇气改变可以改变的事情,有胸怀接受不可改变的事情,有智慧来分辨两者的不同。

步鄹二:远离被动的习惯,从小事做起
      消极被动的习惯是积极主动最大障碍,如果你从小就在消极、被动的环境下长大,你就更应该努力剔除自身所拥有的那些消极因素。
      例如,消极被动的人总是迷信宿命论,把不如意的事情纷纷归罪于基因遗传、星座、血型等因素,并由此变得自怨自艾,总是怪罪别人的不是,指摘环境的恶劣——如果这样的想法成为习惯,他就会陷入消极被动的恶性循环,难以自拔。
      年轻人该如何远离消极被动?我想向大家提出五个建议:
一、不要盲目听信人言,应冷静辨析,积极求证
      现在,网上经常流传着各种谣言。如果盲目轻信这些谣言,你就会被某些别有用心的人左右。例如,有同学发信来说:“自己想读一个民办学校的课程,因为它可以发‘英国剑桥大学的学位’。”冷静辨析应该会告诉你:在这样“天上掉馅饼”的事情里总会暗藏着什么圈套。然后只要到搜索引擎积极求证,马上就可辨其真伪。
      此外,有许多同学不懂得主动搜寻和验证信息的方法或重要性。有不少同学请我帮他找某某大学的信息,甚至,还有的同学向我询问某个单词的意义和用法——实际上,这些信息在网上只要简单搜索一下,就能找到答案。因此,当我每次查出答案后,总是告诫这些同学说:
  “如果你想知道什么,就自己到网上去找,不要急着去问别人;如果你听到了什么,不要盲目信从,应当自己主动去网上求证。”
二、不要让事情找上你,应主动对事情施加影响
  每一件发生在你身上的事都应该是因你的决定而发展、变化的,而不应该是因为你无所作为才变成现实的。
  有位同学告诉我说:“我申请了两个工作,其中,我比较喜欢的那份竞争激烈的工作,但同学们也都在争取那份工作。我现在只好选择等待,如果那家公司不聘请我,我就到另一家公司去。”
  我很惊讶地问他:“既然你很喜欢第一份工作,为什么你这么被动,只知道等待而不去主动争取呢?”
  不要忘了,被动就是弃权,不做决定也是一种决定。
  在微软工作的华人都知道郭蓓菁,一位小巧玲珑、年轻活泼的女孩。见她第一眼你可能很惊讶她是微软最资深的华人经理之一。但是如果你和她交谈一分钟,你就会一点也不惊讶了。她讲的每一句话流露了自信和积极乐观的领导力,和严谨的逻辑和战略思想。她曾告诉我她积极主动的一个故事:
  “我十六岁从中国移民到美国。我到美国后六个月就必须参加SAT考试。那时我英语口语已经不差,但是文法、字汇、作文都很不行。虽然我的SAT数学考了780分(接近满分800分),但是英语只考了280分。如果交白卷也有200分,你就可以想象280分是多么糟糕!但是我依然满怀希望地申请了加州大学的电机工程系。”
  “由于我的英语SAT分数太低,我的申请表很可能没有被阅读就被直接被拒绝了。但是我不服输,我深信如果我被录取,我会是一个成功的工程师。于是,我决定‘上诉’。”
  “我直接写了一封信给加州大学的工学院长。在信里,我做了自我介绍,我自豪地描述了我在理工方面的成就,解释了我刚到美国六个月的英语问题,强调了我的学习能力和刻苦精神。最后,我说:‘院长女士,如果你录取我,我保证我会成为贵校的的财产。’”
  “两天后,院长约谈了我。我和她面谈时,她看出我的英语其实已经进步很快。我对她当面保证我的英语会学的和美国同学一样好。一星期后,加州大学收回成命,决定录取我。”
三、不要习惯性地同意或追随别人,应当学会“有主见”
  年轻人必须知道自己喜欢什么、需要什么,而不应当随波逐流。
  许多同学有很强的“从众”心态,自己有想法不表达,时间久了甚至都不清楚自己的想法是什么了。他们每次都会习惯性地先问别人:“你怎么想?”而从不会问问自己:“我怎么看?”
  要改掉这个习惯,你就需要下定决心,每一件小事都要表达出自己的意见,就算你不是很在乎。例如,自己决定在餐馆点什么菜,自己决定自己的衣着打扮,周末时自己决定要去哪里玩,等等。你应该学会对自己的生活做出合理的安排,而不是“别人怎样我就怎样”。当自己感觉“无所谓”,想依从别人的意见时,记得提醒自己,一定要把自己的选择展现出来。甚至在自己不是很在乎或不是很确定时,也要正确表达出自己的想法。让“无所谓”这个词从你的字汇里消失。
  不要被别人影响,也不要觉得自己一定要“从众”。如果和朋友出去吃饭,大家都不要甜点,但是你想吃,那么,千万不要因为别人的决定而影响你自己意见的表达。有没有什么人总是喜欢告诉你该做什么?如果有,下定决心,要求他们不要再这么做。如果他们不听,那就不要和他们在一起。
  也就是说,大家要设法让自己潜意识里的“我感觉,我想要”体现出来,不要被动,不要从众,避免盲目听从父母、老师、名人……答应自己,当你认为必须说“No”的时候,千万不要说“Yes”。从小事到大事,你如果都能做到听从自己的意愿,日子久了,你就会养成积极主动的习惯。
四、不要说“我办不到”,应当积极去尝试
  遇到困难时,不要找借口,应该多想一想,有没有别的解决方案?能不能将问题分解开来,一步一步地加以解决?或者,是否需要先提高自己在某方面的能力,然后再回头来处理这个难题?不要因为逃避而说自己没有选择或没有时间——没有人缺少时间,只不过,每个人分配时间的方式有所不同而已。
五、使用语言下意识地训练自己
  在史蒂芬•柯维的《高效能人士的七个习惯〉中,他提出:我们的语言会下意识地引导我们的思想,也会真切地反映一个人对环境的态度。
  习惯于消极被动的人,言语中就会流露出推卸责任的个性。
  例如,他们在生气时会抱怨说:“他使我怒不可遏!”——他们想说的其实是:责任不在我,是外力左右了我的情绪。
  他们总是抱怨:“我没时间。”——这表明:又是外力控制了我,让我没有选择的机会。
  他们还喜欢说:“我不得不如此。”——这其实意味着:迫于环境或他人的压力,我只好选择服从。
  他们在自我表白的时候说:“我就是这样的人。”——这其实是在宣称:我已经无法改进或提高自己了。
  相反,积极主动的人总是在言语中赋予自己决定的权利,他们喜欢说的话包括:“试试看有没有其他的可能性。”“也许我可以换个思路。”“我可以控制自己的情绪。”“我可以想出更有效的表达方式。”“我的感觉是……”“我选择……”“我要……”“我情愿……”“我打算……”“我决定……”等等。
  所以,我们要多学习积极主动者的讲话方式,在说话时多用“我……”的句式,多给自己决定的权利,少推卸责任,少埋怨。
步鄹三:对自己负责,把握自己的命运
  有位学生问我:“这个世界到底是不是公平的?”这个问题在“开复学生网”上引起了一场大讨论。有些同学认为世界公平,一个人只要有志气就一定能克服一切障碍;也有些同学认为世界级端不公平,因为无论是财富、天赋还是运气,老天爷好像总是青睐别人。
  对此,我的回答是:一切都靠命运(宿命论)和一切都靠自己(人定胜天)都是不合适的。
  每一个人都有选择,都有机会,但是,先天和环境因素造成每个人的机会多少不同。所以,这个世界不是完全公平的。但如果你因为世界不公平而放弃了自己的机会和选择,那就是你自己的责任,就不能怪世界不公平了。
  举一个比喻。有些人出生时就因为遗传的原因,可能会在某个时候患上较严重的疾病。但这并不表明他一定会患病。如果他能把握机会,做正确的选择,安排好自己的锻炼和饮食,他很可能比谁都健康;但是,如果他就因为‘基因不好’就自暴自弃,那么他得病的几率几乎一定会成倍增加。
  所以,凡事都要想清楚,什么是自己不能改变而必须接受的,什么是自己可以选择的,什么是自己必须勇敢挑战的。当你碰到不可改变的事情时,要勇敢地接受它,不要把时间浪费在悔恨、羡慕和嫉妒上。你应该做的事是积极主动地抓住命运中你可以选择、可以改变、可以最大化你的影响力的部分。
  还有,就算在最艰苦的时候,当你感觉命运已抛你而去时,你总是有选择的。就像弗兰克说的:“在任何极端的环境里,人们总会拥有一种最后的自由,那就是选择自己的态度的自由。”
  “积极主动”的含义不仅限于主动决定并推动事情的进展,还意味着人必须为自己负责。责任感是一个很重要的观念,积极主动的人不会把自己的行为归咎于环境或他人。他们在待人接物时,总会根据自身的原则或价值观,做有意识的、负责任的抉择,而非完全屈从于外界环境的压力。
  对自己负责的人会勇敢地面对人生。大家不要把不确定的或困难的事情一味搁置起来。比方说,有些同学认为英语重要,但学校不考试时,自己就不学英语;或者,有些同学觉得自己需要参加社团锻炼沟通能力,但因为害羞就不积极报名。对此,我们必须认识到,不去解决也是一种解决,不做决定也是一个决定,消极的解决和决定将使你面前的机会丧失殆尽,你终有一天会付出沉重的代价。
  有同学问我:“不确定时,该如何负责?”其实,就算你不确定自己想要什么,你至少应该知道自己不要什么;就算你不能积极争取你最想要的,至少也应积极避免你最不想要的。
如果你想做一个积极主动、对自己负责的人,我建议你立即行动起来,按照以下几点严格要求自己:

  • 以一整天时间,倾听自己以及四周人们的语言,注意是否有“但愿”、“我办不到”或“我不得不”等字眼出现。
  • 依据过去的经验,设想一下,自己近期内是否会遭遇一些令人退缩逃避的情况?这种情况处在你自己的影响范围之内吗?你应该如何本着积极主动的原则加以应对?请在脑海中一一模拟。
  • 从工作或日常生活中,找出一个令你备感挫折的事情。想一想,它属于哪一类,是可以直接控制的事情,还是可以间接控制的事情,抑或根本无法控制的事情?然后在自己的影响范围内寻找解决方案并付诸行动。
  • 锻炼自己积极主动的意识。在下30天内,专注于自己影响范围内的事物,对自己许下承诺,并予以兑现;做一支照亮他人的蜡烛,而非评判对错的法官;以身作则,不要只顾批评;解决问题,不要制造问题;不必怪罪别人或为自己文过饰非,不怨天,不尤人;别活在父母、同事或社会的荫庇之下,善用天赋的独立意志,为自己的行为与幸福负责。试行积极主动的三十天训练法,观察一下,自己的影响范围在训练之后是否有所变化?
    步鄹四:积极尝试,邂逅机遇
      在和学生的交流中,我发现,一些学生因为受到一些挫折就丧失了奋斗的勇气。例如,有的学生因为应试教育在大学中延续而后悔念大学,有些学生因为专业不合适就虚度时光,还有的学生因为在研究生期间遇到种种学术上难题而感到气馁……不知道大家有没有想过,这些都是可以直面的挫折,它们都需要你具有积极主动的态度。生命中随处是机遇,许多机遇就藏在一个又一个挫折之中,如果你在挫折面前气馁,你很可能会与自己的机遇擦肩而过。
      积极尝试是学习最好的方法。在一个先进的公司,你不需要担心失败。在一项美国公司的首席执行官的调查中发现,他们最欣赏的就是那些主动要求做某项新工作的员工。无论是否能做好,至少这些员工比那些只会被动接受工作的员工要令人欣赏,因为他们有勇气、积极上进,而且会从中学习。
      对于那些正在选择人生道路的年轻人来说,他们更应该积极地尝试不同的事情。在美国,父母经常说的一句话是:“你没有试过,怎么知道自己不喜欢呢?”所以,我建议大家充分利用自己的时间,尝试做不同的事情,找到通向成功的门径。只有这样,我们才能在人生之路上邂逅更多的机遇。
      我的积极主动的习惯是五岁开始的。记得五岁的时候,我觉得幼儿园的课程太简单了,于是就主动跟父母说:“我想跳级读小学。”父母建议我还是按部就班地读书,等到有足够的能力时再去读小学。为了学到更多的知识,我大胆地提出:“让我尝试一下好吗?如果我的能力不够,我就没法通过小学的入学考试;可如果我通过了考试,就表明我有这样的能力,那你们就应该让我去读小学。”父母很爽快地答应了下来。于是我努力读书,最后以高分考进了私立小学。事过三十多年,当时母亲带我去看“放榜”时,看到“李开复”三字排在榜首的那份兴奋,今天想来依然历历在目。这件事让我懂得,只要大胆尝试,积极进取,我就有机会得到我期望中的成功。这也为我日后的自信和积极奠定了坚实的基础。
      另外一个例子来自于我的年轻朋友郭去疾。他的人生之学是:每一扇机遇之门,都有一个守门人。收获机遇的临门一脚,在于主动执著地去找这个守门人。当他1999年从中国科技大学本科毕业时,受到了很多美国一流大学的录取通知,但是一律没有奖学金。于是,他开始给这些大学的教授们写信,希望他们能接受我作为研究助理从而资助。一个月中,他写了两百封信,虽然有很多教授感兴趣,却都因为他研究经验不足而拒绝了。他还尝试写信给中国科大的海外校友,希望得到推荐,也没有结果。一天夜里,面对电脑里一封封挽拒的邮件,他一个人在黑暗的实验室里失声痛哭。然而第二天醒来,他决定继续去敲击这扇机遇之门。几天之后,他收到伊利诺大学的一位教授的回信,欣然答应资助。那位教授说,当他到系里索取郭去疾的材料的时候,发现系里正在准备给郭寄拒信。郭去疾最后说:“我的‘叩门之旅’在继续着,绝大多时候,都无功而返。然而,石沉大海却不代表徒劳无功,因为一次一次,机会之门这样被我敲开。一步一步,我得以到微软总部工作,到斯坦福大学读MBA,到Mckinsey到Amazon和Google工作的机会”。
      美国人很喜欢尝试不同的工作,他们一生中平均要换四次工作。在长期计划经济的思想影响下,更多的中国人不愿意换工作,而更倾向于终生做一件事。其实,换工作岗位的意义在于,你一开始做的决定并不一定是你的终生决定,你仍然有机会去尝试更多的东西,只有这样才能真正找到自己的兴趣所在,才能最大限度地发挥自己的潜力。
      所以,不要因为暂时不了解自已的长处而犹疑不决,积极行动起来吧!你会发现自己的才华和天赋。大家要珍惜每一次尝试,因为机遇往往不可复制。要随时做好准备,以免机遇到来时错失良机,同时也应学会从每一个失去的机遇中吸取教训。此外,只有敢于挑战自我,你才能充分地开发自身的潜力。我建议大家经常给自己设立一些极具挑战性、但绝非遥不可及的目标。
    步鄹五:充分准备、把握机遇
      不要坐等机遇上门,因为那是消极的做法。屠格涅夫说:“等待的方法有两种,一种是什么事也不做地空等,另一种是一边等,一边把事情向前推动。”也就是说,在机遇还没有来临时,就应事事用心,事事尽力。
      如果被苦难或挫折阻挡,我们应该学习把挫折转换成动力,而不要一遇到困境就躲在阴暗的角落里怨天尤人,更不要在需要立即行动的时候犹豫不决。人生不能用这种消极的方式度过。我们终有一天要面对自己,对自己的生命负责。因此,我们必须在平时做好充分的准备,掌握足够的信息,以便在必要时做出最好的抉择,把握住稍纵即逝的机遇。
      一旦机遇到来,一定要全力以赴,把握机遇。
      我在攻读博士学位时,通过自己的努力(和同学洪小文的帮助),把语音识别系统的识别率从以前的40%提高到了80%,学术界对我的工作给予了充分的肯定。当时,有些老师认为,只要把已有的结果加工好,写好论文,几个月之内我就可以拿到博士学位了。
      但是,我很清楚,第一步的成功给我提供的只是一个机遇,而不是一个答案,因为80%的识别率决不是最后的最佳结果,因为我用的方法只是冰山一角。而且,我已经公开发表了我的研究成果,每一个研究机构都会学习、使用我的方法,所以,如果我此时放松下来,不再做实验,埋头写论文以求尽快毕业的话,别的学校或公司很快就会超过我。
      所以,我不但没有放松,反而更加抓紧时间研究攻关,甚至为此推迟了我的论文答辩时间。那时候,我每周工作七天,每天工作16个小时。这些努力没有白费,它们让我的语音识别系统百尺竿头更进一步,识别率从80%提高到了96%。在我毕业之后,这个系统多年蝉联全美语音识别系统评比的冠军。如果我当时在80%的水平上止步不前,随随便便就毕业的话,后来商业周刊颁发的“1988年最重要科技创新奖”就肯定会让别人抢走了。
      所以,当你知道机遇来临的时候,要积极把握;当你尚未看到机遇的时候,要时刻准备。
    步鄹六:积极争取,创造机遇
      当机遇尚未出现时,除了时刻准备之外,我们也应该主动为自己创造机遇,不能总是守株待兔,等着机遇上门。
      记得当我在苹果工作时,有一段时间公司经营状况不佳,大家士气低落。这时,我看到了一个机遇:公司有许多很好的多媒体技术,但是因为没有用户界面设计领域的专家介入,这些技术无法形成简便、易用的软件产品。
      于是,我写了一份题为《如何通过互动式多媒体再现苹果昔日辉煌》的报告。这份报告被送到多位副总裁手里,最后,他们决定采纳我的意见,发展简便、易用的多媒体软件,并且请我出任互动多媒体部门的总监。
      多年以后,一位当年的上司见到我,他深有感触地对我说:“当时,看到你提交的报告,我们感到十分惊讶。以前,我们一直把你当作语音技术方面的专家,没想到你对公司战略的把握也这么在行。如果不是这份报告,公司很可能会错过在多媒体发展的机会,你不会有升任总监和副总裁的可能。今天,在iPod的成功里,也有不小的一部分要归功于你和你那份价值连城的报告。”
      在微软公司,大家都很重视向比尔•盖茨每年四次的汇报工作成果的机会。在报告的几个月前,全球各研究院就开始提早排队,报上最得意的成果。
      微软中国研究院刚成立的那一年,当几个研究项目都还没有得到最终结果的时候,我就冒险争取了六个月后向比尔汇报两个研究成果的机会。因为那时我知道很多人对中国研究院还不太理解,如果能在比尔面前成功地演示我们的研究成果,就会对研究院的发展提供很大的帮助。
      当时,我知道有四个研究项目各有60%以上的可能性在六个月后得到好的结果,但是,我不能等到100%确定后再去申请。于是,我用两个措辞含糊的报告题目预订了位置。六个月后,果然有两个项目得到了非常好的结果,于是,我们修改了报告题目,十多个人飞到美国为比尔做了现场演示。那次汇报非常成功,得到了比尔高度评价。
      报告的第二天,比尔对所有的公司领导说了他著名的那句话:“我敢打赌你们都不知道,在微软中国研究院,我们拥有许多位世界一流的多媒体研究方面的专家。”是这句话开始建立了研究院在公司的信誉的。
      显然,如果我总是消极地等待,那么,我们恐怕就要错过向比尔汇报研究成果的机会了。
      对大学生来说,大家应该积极地计划大学的四年,积极地争取和创造机遇。你的毕业计划将成为你学业的终点和事业的起点,你的志向和兴趣将为你提供方向和动力。你如果不知道你的志向和兴趣,应该马上做一个发掘志向和兴趣的计划;你如果不知道毕业后要做什么,应该马上制定一个尝试新领域的计划;你如果不知道自己最欠缺什么,应该马上写一份简历,找你的老师、朋友打分,看看哪里需要改进;如果你毕业后想出国读博士,你应该想想如何让自己在申请出国前有实际的研究经验和论文;如果你毕业后想到某个公司工作,那你应该找找该公司的聘请广告,和你的履历对比,看自己还欠缺什么经验……只要做到了这些,你就不难发现,自己每天都会比前一天离成功更近一些。
    步鄹七:积极地推销自己
      在全球化和信息化的时代里,那些能够积极推销自我的人更容易脱颖而出。
      很多在美国工作多年的中国人对美国同事的印象总是这样的:“他们怎么这么能说?他们充分地表达了自己的工作成绩,而中国同事在很多时候做得很好,却没有展现出来,这不能不说是一个遗憾。”
      在公司里,经常得到晋升机会的人,大多是能够积极推销和表达自己的、有进取心的人。当他们还是公司的一名普通员工时,只要和公司利益或者团队利益相关的事情,他们就会不遗余力地发表自己的见解、贡献自己的主张,帮助公司制定和安排工作计划;在完成本职工作后,他们总能协助其他人尽快完成工作;他们常常鼓励自己和同伴,提高整个队伍的士气;这些人总是以事为本、以事为先——他们都是最积极主动的人。
      要想把握住转瞬即逝的机会,就必须学会说服他人,向别人推销自己、展示自己的观点。一般说来,一个好的自我推销策略可以让自己的人生和事业锦上添花。好的自我推销者会主动寻找每一个机会,让老板或老师知道自己的业绩、能力和功劳。当然,在展示自己时,不要贬低别人,更不可以忘记团队精神。
      当我被微软总部调回美国,在美国启动总部把工作外包给中国合作伙伴的工作时,我一直在考虑如何把这项极为重要但又缺乏资源的项目做好。
      这时,我很意外地收到了一封毛遂自荐的信。这封信来自一位在微软技术支持中心工作的经理。她在信中说:“虽然我没有这方面的经验,但是我曾在多个部门工作,而且学习很快。我愿意用我自己的时间帮你把这件事情做好。我不需要酬劳,我也不是申请工作,我只是希望为中国做点事情。你选择我没有风险,因为我至少可以把每个细节都帮你想清楚,这样可以节约你的时间。”
      如果不是这封信和后来的交谈,我怎么也不会想到,把这个工作交给一位业余而又没有相关经验的人来做。事实证明,我的选择是对的。她没有辜负我的期望,把这件事情做得非常好。因为她起头的工作,微软后来三年中提供给中国的外包业务量增加了三倍。几个月后,当我们终于成立了一个部门来负责这件事情时,她毫无怨言地把所有的工作交给了这个新部门。
      后来,微软亚洲研究院有一个很好的工作机会,沈向洋院长要我推荐人选,我想到了这位多才多艺的志愿者。她就是今天微软亚洲研究院高校合作部总监宋罗兰。
      有些人可能会认为:“要求我们展示自己,这是不是要我从一个内向的人彻底转变为外向的人?”其实,一个内向的人很难彻底地改变自己的性格。所以,我建议大家可以在自身性格允许的范围内往“外向”靠拢,尽量寻找一些“比较外向但又不给自己带来太大压力”的机会。
    我的选择;你的选择
      2005年7月19日,我离开了微软,加入了Google。我在过去的几年中,一直希望回到中国。而且同时,我发现许多我的朋友加入了Google后都非常愉快。当我听说Google将在中国有很大的计划时,我没有等着它的电话,而我积极地直接联系了我认识多年的Google的CEO斯密特。他积极邀请我去看看。我发现,Google是一个让我震撼的公司 – 从它的新一代技术到员工的激情,从它诚信和对大众利益的执著,从它独有的自由和透明度,我发现了一片我向往的净土。我有选择的权利。于是,我选择了Google。我选择了中国。
      有记者问我这个选择带来不少麻烦,我会不会后悔。我的回答是:“直到我死的那一天,我要做我有激情的事情。对这个决定,无论带来多大的困扰和麻烦,我终身不悔。”
      在人生的旅途中,你是你自己惟一的司机,千万不要让别人驾驶你的生命之车。你要稳稳地坐在司机的位置上,决定自己何时要停、要倒车、要转弯、要加速、要刹车等等。人生的旅途十分短暂,你应该珍惜自己所拥有的选择和决策的权利,虽然可以参考别人的意见,但千万不要随波逐流。
      只有积极主动的人才能在瞬息万变的竞争环境中赢得成功,只有善于展示自己的人才能在工作中获得真正的机会。
      最后,我将下面一段话赠给中国的学生:
    你们的时间有限,所以不要浪费时间在别人的生活里。
    不要被信条所惑 – 盲从信条是活在别人的生活里。
    不要让任何人的意见淹没了你内在的心声。
    重要的,拥有跟随内心和直觉的勇气。
    你的内心与直觉知道你真正想成为什么样的人。
    任何其他事物都是次要的。
        斯蒂夫 乔布斯 (苹果公司总裁)
        2005年斯坦福大学毕业典礼



  •  
    拼命三郎 @ 2006-02-07 19:12

           如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。

    好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色! 

    1. 买个闹钟,以便按时叫醒你。 贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,

    更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到

    达。“闹钟”只是一种简单的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。 

    2. 如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。 初出茅庐,往往眼高手低,心高气傲,大事做不了,小

    事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要

    做就要做好。 

    3. 每个人都有孤独的时候。 要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环

    境,面对形形色色的人和事,一下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静

    心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情,

    白白浪费了宝贵的时间。 

    4. 走运时要做好倒霉的准备。 有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏

    挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发

    觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积

    累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。

     5. 不要像玻璃那样脆弱。 有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦

    中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的

    清凉,就不要埋怨风中细小的沙粒。 6. 管住自己的嘴巴。 不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,

    在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那些同事朋友喝酒聊天可

    不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短处,这些会

    降低你的人格。 

    7. 机会从不会“失掉”,你失掉了,自有别人会得到。 不要凡事在天,守株待兔,更不要寄希望于“机会”。机会只不过

    是相对于充分准备而又善于创造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个

    同样的“倒霉鬼”给抓住了。没有机会,就要创造机会,有了机会,就要巧妙地抓住。 

    8. 若电话老是不响,你该打出去。很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新

    朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。 

    9. 千万不要因为自己已经到了结婚年龄而草率结婚。 想结婚,就要找一个能和你心心相印、相辅相携的伴侣。不要因为放

    纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小

    失大。 

    10. 写出你一生要做的事情、把单子放在皮夹里,经常拿出来看。 人生要有目标,要有计划,要有提醒,要有紧迫感。一

    个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子。


     
    拼命三郎 @ 2006-01-18 11:12

    趁着现在还没毕业,好好学习一下过来人的忠告!

    一,别以为在学生会你能得到你曾经想要的。工作的热情很可能因为你所看到的所经历的一些事而改变,
          但是也不必惧怕。你有大一一年来适应或者承受,并做出是继续坚持还是退出的决定。
     
    二,大学可能有真实的爱情,但是记住只是可能。很多时候他们是因为别人都谈恋爱而羡慕或者别的原
          因而在一起。所以,不必为任何分手而受太大的伤,记住,太大的伤,真爱,还是值得追求的。
     
    三,如果你的家庭一般的话,那么记得你在大学有很多意外用钱的地方。比如二专业或者将来的各种班,
          为了你的家人和你自己的前途,永远别乱花钱。记住,永远。
     
    四,朋友,你大学的朋友很可能就是你将来事业的一部分。他们会帮助你。但是你也应该让自己有帮助
          他们的实力,所以,你要努力,你和你的朋友会一起在将来打造一个可能很辉煌的事业。很好听是
          吗?但是记住,你们都要努力。
     
    五,很多事情当你再回忆时会发现其实没什么。所以,不管你当时多么生气愤怒或者别的,都告诉自己
          不必这样,你会发现其实真的不必。
     
    六,学习,永远别忘记她。不管别人怎么说大学是个提高综合能力的地方云云,如果你学习失败了,你
          就什么也不是——不排除意外,但你考虑好了吗?你会是那个意外吗?? 

    七,别说脏话,你应该知道习惯的力量。找工作或者和别人接触时,你随便的一个字或者几个字会让你
      在别人心中的形象大打折扣。 

    八,好好利用在公共场合说话的机会,展示或者锻炼,都可以。 

    九,别为你自己和别人下定论,无比重要。你所看到听到的可能只是一面,为这个失去可能的朋友,很
      不值。 

    十,如果你发现很久了你一直是一个人去食堂吃饭或者去上自习,别在意,大学里一个人是正常的,你
      觉得孤独?你的朋友是怕你觉得你没有自由的空间,所以别以为你没有朋友。 

    十一,很多事情别人通知你了,要说谢谢,没有通知你,不要责怪,因为那些事你其实应该自己弄清楚。
     
    十二,“我请你吃饭“之类的话不要乱说,因为所有人都会当真,不管你自己怎么想,大学里请人吃饭是
       很平常的事,几乎连请一个自己不怎么认识的人吃饭都很正常。

    十三,尊严是最重要的,但是在大学里,要懂得利用这个空间锻炼自己,要让自己的尊严有足够大的承
       受力,要知道,社会是一个最喜欢打碎人的尊严的地方,除了你自己,没人会为你保留它。
         
    十四,大学是亚社会。对,所以,当你上了高年级后,要让自己有大人的形象,大一的孩子看到你,你
       要能让他们感觉到你是他们的学长.你很成熟. 
         
    十五,你有足够的理由佩服每天早起的人,不信的话,你去做。做到后会发现有很多人佩服你呢。
        
     十六,经常给家里打个电话,即使他们说不想你。
         
    十七,你可以有喝醉的时候,我们可以接受,但是你要明白和真正的朋友一醉才能让伤心事方休,否则,
       你只会是别人的谈资和笑柄。 
         
    十八,如果你四年内很少去图书馆的话,你就等于自己浪费了一大笔一大笔财富。所以,长去那里,随
       意翻翻,都有收获。
        
     十九,不论男人还是女人,如果在大学里还把容貌当作重要的东西而过分重视的话,可能不会吃亏,但
       是早晚会吃亏。可能,很可能。
         
    二十,面试时很多老总会问你----如果你能见到老总的话-----你会做什么??也许你现在其实就可以记得这
       个问题,这样可能以后会好好答-----尤其对文科学生来说。
      
    二十一,新学期如果你接新生的话,当被问到学校怎么样之类的问题时,你要记住你不但是这个学校的
        一分子,你更要给你学弟学妹带来信心,你走过大一,你应该知道那时候对学长的信任多深。 
        
    二十二,别总抱怨不公平,你的不公平对别人是公平的,辨证法——高三时学的,忘记了? 
        
    二十三,别迷恋网络游戏。千万别。 
        
    二十四,“我爱你“。别对很多人说这句话,在大学里,我的意思是,希望你只对一个人说,这是尊重
        你爱的人,更是尊重你自己的感情。 
        
    二十五,大学,因为你呆的地方是大学,所以你有空间承受失败和打击,因此,你应该......真的应该,
        找找......自信和自傲的区别,可以用一辈子的。 

    二十六,如果你的个性让很多人对你敬而远之,那么你的个性是失败的,个性的成功在于能吸引,而不
        是能排斥。 
         
    二十七,如果把上课不睡觉当做一种锻炼并且你做到了,那么,你很强,而且记住,其实你应该是这样
        的,老师再差,也比学生强,因为他们是老师。 
        
    二十八,学生会的主席之类的干部,如果你尊重他们,告诉你自己那是因为他们是你的学长而不是因为
        他们是你的上级,事实上,大家都只是学生而已,只是学生。 
        
    二十九,疯狂英语的话:别怕丢人,如果你实在不行就别怕丢人,行的话,建议你们-去追求丢人,那是
        一种成功的尝试,至于为此笑话你的人,你可以把他们从你将来人生对手的名单中排除了,所
        以你也不要笑话那些上台丢人的人。 
         
    三十,从绝望中寻找希望,人生终将辉煌。  
       
    三十一,如果你不抽烟的话,你的精力将比抽烟的时候好的多,这是绝的。
        
    三十二,你的确要学的有心计。但是记住,永远记住,在社会上要胜利的唯一的方法永远只是一个,那
        就是实力,永远不用怀疑.。
        
    三十三,面对不公平的东西,不要抱怨。你的不公平可能恰恰是别人的公平。所以,你不如去努力的奋
        斗,争取你自己最合适的公平。    

    三十四,人生百态,不要对新的看不惯的东西生气,无所谓的,比如说恋人同居问题,和我们很多人无
        关的。

    三十五,别总请人吃饭,别总让别人请你吃饭……朋友除外! 
        
    三十六,在大学里就开始训练自己的冷静力,这是一种能力的,有大事时,能安静并能快速想出办法的
        人,很厉害。    

    三十七,大学的竞争范围是所有的大学生。所以,你知道是否可以放松学习的。 
        
    三十八,大了,成熟了,稳重了,但是这和激情不矛盾。一种对工作和学习的冲击力及持久力会让你有
        特殊的魅力和个人实力。 
        
    三十九,记着,在所谓的学生会里即便你就是主席,如果你的四级没过没有毕业证的话白搭,没单位想
        要你这样的人。单位需要的是工作的人,而不是当官的人,更何况现在的就是主席,学到的是
        喝酒 抽烟 相互的 吹捧 
        
    四十,永远不要嘲笑你的教师无知或者单调,因为有一天当你发现你用瞌睡来嘲弄教师实际上很愚蠢时,
              你在社会上已经碰了很多钉子了。 
        
    四十一,不要幻想自己成为招聘会上的宠儿,当你明白百分之七十的初中生都可以上大学时,你应该明
        白人们不会去崇拜一个群体的大多数的。 
        
    四十二,英语一定要学好,但英语绝对不会是你生活的全部保障,所以多学点东西可能有时会救命的。 
        
    四十三,你可以看不惯一些东西,但是你应该学会接受——如果你没法改变那一切的话。 
      
    四十四,对陌生人,或者把对方当做一张白纸,或者把对方当你的朋友,总之别当做敌人,即使你听到
        再多的关于他(她)的不好的传闻。 
        
    四十五,爱你的人,不管你接不接受,你都应该感谢对方,这是对你们的尊重。
     
        
    四十六,在晚上,听听收音机也是种快乐和幸福。 
        
    四十七: 每个星期一定要抽时间出来锻炼身体的。好处多多。 
        
    四十八,如果周围有人嫉妒你,那么你可以把他从你的竞争者之列排除了,嫉妒人之人,难以成大事。 
        
    四十九,别去争论,可以回忆一下,你会发现,人不可能赢得争论,可以说,争论所提级的话题都是不
        值得去争论的。 
        
    五十,成功的方法多种多样 ,别不接受你看不惯的方法。 
        
    五十一,男人,你长的可以不帅,但你这个人可以帅,而且,那才是真正得帅。(当然,女人也是同样
        得道理)所以,不必在穿着打扮上花太多心思。 
        
    五十二,只有学习潇洒才可能一切潇洒。但是只是可能,因为处世能力过分出众而成功得人是有,但是
        你必须牢记实力得价值。 
        
    五十三,进入大学,就是一个新的环境,接触新的人,你的所有过去对于他们来说是一张白纸,这是你
        最好的重新塑造自己形象的时候,改掉以前的缺点,没进入一个新的环境,都应该以全新的形
        象出现。 
        
    五十四,为爱坚持的人,记得坚持可以,但是不要为爱受伤。 
        
    五十五,或文或武,我是说你要有一样能行得地方,样样通样样松是为人之禁忌。样样通几样更通方是
        境界。 
        
    五十六,QQ是联系朋友的工具,可以是交朋友的工具但是别轻易相信QQ上的友谊更别轻易幻想QQ上
        朋友得样子。 
        
    五十七,还能冲动,表示你还对生活有激情,总是冲动,表示你还不懂生活。 

    五十八,如果你不能拥有,那么告诉自己别忘记——如果你能承受那伤痛的话。
     
    五十九,虽然班级的概念在大学并不明显,但是也别忘记,你的同学你的朋友。
     
    六十,准备考研,早点比晚点好。 
      
    六十一,别抱怨四级六级之类的东西,那是证明你能力的很好的东西。 
        
    六十二,要有精英意识,考虑一下,大学的人了,迷恋武侠言情,已经没有意义。 
        
    六十三,莫过于梗直,莫过于圆滑。外圆内方即可。 
        
    六十五,永远别渴望做个任何人都不得罪的人,有人反对有人支持然后自己做出决定是精彩的人生。 
        
    六十六,魄力,要有魄力,即使是失败,也不要让自己的人生平庸。 
        
    六十七,喜欢一个人,就勇敢的告诉他或者她,我在天涯说过大学是学习的地方,但是我理解爱情的力
        量。追求你真正爱的人,只要自己认为值得,那就是值得的。 
        
    六十八,应该相信一句话:没有不可能的事情!!真的没有,只要去做,现在我们是学生,十年后呢??
        二十年后呢??想想。 
        
    六十九,我不去想是否能够成功,既然选择了远方,便只顾风雨兼程。 
        
    七十,后悔是一种耗费精神的情绪.后悔是比损失更大的损失,比错误更大的错误。所以不要后悔。 
      
    七十一, 我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,
        如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使
        我感奋不已。 
        
    七十二,每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨.。
        
    七十三,于千万人之中,遇见你所遇见的人;于千万年之中,时间的无涯荒野里,没有早一步,也没有
        晚一步,刚巧赶上了。 
        
    七十四,你可以选择坚持,也可以选择放弃。没有对错。我是说对爱情来说,但是重要的是坚持你的选择。 
        
    七十五,相信时间的力量,可以冲淡很多东西。 
        
    七十六,在大学里坚持每天做一件相同的事,很能锻炼我们,试试便知。 
        
    七十七,多笑笑,会慢慢让自己真的快乐起来。 
        
    七十八,人生有很多次如果,但是没有一次但是. 
        
    七十九,当你不懂得放弃的时候,你可以告诉自己你还懂得坚持. 
        
    八十,大学的手机是否应该用只有自己有答案. 
        
    八十一,永远不要瞧不起大学里的贫困生. 
        
    八十二,在大学时代看看学校的招聘会吧.你会感觉到一种前途的危机. 
        
    八十三,全是人,全是人,全是人。我只有连说三次全是人才能形容出场面的人数。-------寝室一个大
        哥向我形容招聘会的场面,后来我去看了,全是人,全是人,全是人。 
        
    八十四,越大,我们就会发现对与错越是那么不明显。这不是错,这是事实,而且无法改变。 记得结
        交每一个值得结交的朋友。 
        
    八十五,无聊的时候,别忘记朋友。朋友无聊的时候,别忘记你是他们的朋友。
     
        
    八十六,社会上要想分出层次,只有一个办法,那就是竞争,你必须努力,否则结局就是被压在社会
        的底层。


     
    拼命三郎 @ 2006-01-13 19:22

    七种吃法有害于胃健康
      胃是食物经口进入人体后停留的第一站,一般的食物在胃中约4小时左右即被全部排入肠中。过热、过冷、过粗、过咸的食物及嗜烟嗜酒等,均可成为慢性胃炎的发病原因。以下几种吃法,有害于胃的健康: 

      吃得过快:狼吞虎咽,囫囵吞枣,食物咀嚼不充分,消化液分泌不足,食物难以充分消化,久而久之,易致胃病。 

      吃得过饱:暴饮暴食,不仅使胃的消化能力难以承受,造成消化不良,有时还可导致急性胃扩张、胃穿孔等严重疾患。 

      边读边吃:有些人喜欢一边看报,一边吃饭,或边玩边吃。由于阅读或玩时大量血液供脑,供胃肠消化吸收的血液相对减少,影响消化吸收,长期下去,易致慢性胃病。 

      常吃零食:经常吃零食,会破坏胃消化酶分泌的正常规律,胃得不到正常合理的休息,容易“积劳成疾”。

      多吃冷食:多吃冷食品会降低胃的温度,使胃的抗病能力下降;冷食中致病性微生物含量往往较多,多吃冷食后容易导致胃病。  

      食物过辣:经常进食辛辣食品可刺激胃粘膜充血,久而久之,可导致慢性胃炎。

      烟酒过度:吸烟可增加溃疡病和胃癌的发病率。饮酒过度可损伤胃粘膜,造成胃出血、胃穿孔等。经常大量饮酒,可影响胃液分泌,降低胃酸活性,使人食欲下降。

      胃肠道的活动是有规律、有顺序的。正确的饮食规律、应该是一日三餐,饭吃八分饱。除晚餐至次日早餐外,每餐进食时间相隔在4~7小时为宜。胃肠道疾病处在活动期、发作期时,饮食的次数、量和质等,就不能同正常人一样,必须严格按医生的指导进行,不能自行其是。


     
    拼命三郎 @ 2006-01-13 10:56

      鼻炎是个对于我来说是个很痛苦的东西,吃药没用,又惧怕手术,反复折腾我好多年,后来在网上找偏方的时候,在个犄角旮旯里找了个不麻烦的方子,用了用,至少对于我很有效,说出来大家不妨试试。

      强调一下,鼻炎似乎有很多种,我的症状是:气温或者室温出现较大变化时,不停的流浓涕。至于其他的就不知道能不能有效。

      方子很简单:2-3个大蒜籽切碎,放入碗中,倒一点点米醋(米醋到处有买,很便宜),和着把大蒜捣成泥,出汁水,将蒜汁和米醋的混合液体用棉签粘着,捅入鼻腔,深浅看自己承受能力。一天弄一次也行,两三天就可以了。

      用后的效果还要强调一下:当时刺激很大,很冲,要忍耐,不停的喷嚏,用后第二天或者更短时间,感觉鼻炎似乎有恶化的趋势,不要担心。

      我目前的情况是浓涕没了,在空调房和室外的寒风中交替,鼻炎也没有复发,希望能痊愈;就这么简单,大家试一下吧,希望你能有用。


     
    拼命三郎 @ 2006-01-12 12:42

    胃保健
    www.cy165.com  2005-10-28  好消息网


    要保护好胃首先要吃好早餐。

     

      经过一夜的睡眠,人体内储存的葡萄糖已被消耗殆尽,这时急需补充能量与营养,早上不进食,就不能弥补夜间丧失的水分和营养素,使血粘度增加,不利于一夜间产生的废物排出,从而增加患结石以及中风、心肌梗死的危险。从中医角度看,要想护好胃,应该注意以下两点:

      1.早餐要吃热。吃“热食”才能保护“胃气”。中医学说的胃气,其实是广义的,并不单指胃,还包含了脾胃的消化吸收能力、后天的免疫力、肌肉的功能等。早晨体内的肌肉、神经及血管都还呈现收缩的状态,假如这时候你再吃喝冰冷的食物,会使体内各个系统更加挛缩、血流更加不顺。天长日久,你会发现怎么吸收不到食物精华,好像老是吃不结实,或是大便老是稀稀的,或是皮肤越来越差,或是喉咙老是隐隐有痰不清爽,时常感冒,小毛病不断。这就是伤了胃气,伤了身体的抵抗力。

      2.早餐搭配要合理。合理指的是富含水分和营养,应该是享用热稀饭、热燕麦片、热羊乳、热豆花、热豆浆、芝麻糊、山药粥等等,然后再配着吃些蔬菜、面包、三明治、水果、点心等。牛奶容易生痰、容易过敏,较不适合气管、肠胃、皮肤差的人及潮湿气候地区的人饮用。谷类食品在体内能很快分解成葡萄糖,纠正一夜后可能产生的低血糖,并可提高大脑的活力及人体对牛奶、豆浆中营养素的利用率。适量的蛋白质和脂肪、鸡蛋、豆制品、瘦肉、花生等,不但可使食物在胃里停留较久,还能使人整个上午精力充沛。水果和蔬菜,这不仅补充了水溶性维生素和纤维素,还可以中和肉、蛋、谷类等食品在体内氧化后生成的酸根,达到酸碱平衡。


    养胃的方法其实非常简单。就是爱护它,体贴它,不勉强它。不能严重饥饿,也不能让它胀得饱满;少吃煎炸油腻,少吃冷饮冰食,少喝酒,也不吃太烫太咸的东西。不舒服的时候多喝烂粥,吃软面条和软饭,以及发酵面食。


    要加强体育锻炼,增强体质.

    要注意心理卫生.

    注意饮食调养,饮食以适量为宜,温淡软素.

    应戒烟酒.

    注意避免各种药物刺激,

    二 保健品及饮食营养:

      饮食要多样,饮食要适当,粗细要搭配,油脂要适量

      甜食要少吃,食盐要限量,三餐要合理,饮酒要节制

      宜多食富含抗氧化及清除机体自由基和清除胃肠道有害物质的食品,如甘薯、鲜果、豆 制品及海藻类食品。

      大枣、豆腐、白菜、牛奶、胡萝卜、健脾和胃

      苹果、柚子、葡萄、桔子,防脂肪积聚,补心益气生津止津

      海带、紫菜、黑豆、黄豆、绿豆、赤豆、小米、粟子防血管硬化及美容

      核桃、榛子、松子、桂圆、花生等坚果食品可及时补给微量元素益骨质健康。

      中药健脾养胃可服用人参健脾、参苓白术、四君子、香砂养胃。


    一、胃病要注意忌嘴,不吃过冷、过烫、过硬、过辣、过粘的食物,更忌暴饮暴食,戒烟禁酒。另外,服药时应注意服用方法,最好饭后服用,以防刺激胃粘膜而导致病情恶化。

    二、衣被要保暖。因此,要随气候的变化,适时增减衣服,夜间睡觉时要盖好被子,以防腹部着凉而导致胃病发作。


    三、胃气痛可解释为“胃受气就痛”,不言而喻,消气寻乐是养好胃的一**宝;过度紧张和无规律生活也是诱发胃病的祸根,适度减小精神压力、养成良好生活规律是养胃的好办法。

    四、 饮食五宜
    1 宜晨起早食(护胃、防寒、提高血糖);
    2 宜少量多餐(4-5餐/日);
    3 宜细嚼慢咽;
    4 宜食品温热;
    5 宜营养全面(五谷杂粮品种多、葷素搭配莫忌口,以保证必需氨基酸、必需脂肪酸和六大营养要素)。

    五、饮食五忌
    1 忌粗硬大块或粗纤维食物;
    2 忌嗜好炸煎烤腌渍食物;
    3 忌过分甜咸寒辣食品;
    4 忌浓茶浓咖啡和过量烟酒;
    5 忌巳确认吃了会引起胃部不适的食物。

    六、加强胃粘膜保护
    简便有效的方法是喝牛奶,在胃粘膜表面形成蛋白膜保护层来避免胃粘膜暴露受到某些化学致病物质(如胃酸、胃蛋白酶、胆汁、胰液)和致癌物质(如亚硝酸盐、幽门螺杆菌分泌的毒素等)的刺激;副食品方面要注意多吃些容易消化的蛋白质(如鸡蛋、嫩肉)以利于结合、消耗掉胃内多余的胃酸和胃蛋白酶而避免自我消化,同时也为基本营养和粘膜修复提供保障。


    按摩健胃 胃病患者要根据自己的体质,进行一些适量运动。除了一般的力所能及的体能锻炼外,每天要进行腹部的自我按摩,它是防治胃肠病最简单、最卓有成效的选择。通过自我按摩胃腹部,能提高胃动力和免疫功能。

      方法是:两手相叠于上腹部,以胸骨柄剑突下为中心,作顺、逆时针方向揉摩各30-50次;然后同法在神厥穴(即肚脐)周围揉摩各30-50次。此外,追加揉摩两腿足三里(左膝盖骨外侧下3寸,胫骨外侧上凹陷处)50-100次。每天早晚两次。随着按摩的坚持,胃肠部必有反应,或打嗝,或肠鸣,或肛门排气等,这都是正常的良好的生理反应,是对胃肠刺激相适应的结果。自我按摩是一种辅助治疗手段,所以服药的请不要停药;但随着胃动力的逐步增强,可以慢慢减药。为了防止胃病复发,持续自我按摩是一辈子的事,有百利而无一弊,既能防治肠胃病,还能提高其他器官的功能,如肾及泌尿系器官的功能等。

      心理平衡 据心理卫生学研究证明,心态与胃炎、十二指肠溃疡等症的发生与发展密切相关。所以胃病患者要保持心态平衡,精神愉快,情绪稳定;尽量避免紧张、恼怒、焦虑、忧郁等情绪的影响,注意劳逸结合,防止过度疲劳。


    睡前喝一杯酸奶,很养胃又美容!!



     
    拼命三郎 @ 2006-01-12 12:16

     
    分析SDK下的俄罗斯方块程序(仅供学习使用)  
     
    原作者姓名 毛建忠
     

    介绍
    对API有一定了解的可以看看
     

    正文
    // ToyBricks.cpp : Defines the entry point for the application.
    //

    #include "stdafx.h"


    /*******************************************************/

    /* 文 件 名: ToyBricks.c
    * 完成时间: 2001年9月
    * 完成地点: 华东地质学院综合楼507机房
    * 开发模式: SDK程序
    * 开发环境: MS VC++ 6.0
    * 作    者: 毛建忠
    * 工作单位: 中国建设银行三水市(广东省)支行
    * E - Mail: Mao_jzh@163.com      
    */

    /* 备注:
    *     这是一个简单的俄罗斯方块游戏程序,写程序时没有注释,
    * 这是我写程序时的一个坏习惯。毕业有半年了,也就半年没有写
    * 过程序,周末闲着没事,捡起那些旧程序看看,顺便加上一些注
    * 释。很怀念在学校写程序的那段日子,很怀念507。
    */

    /*******************************************************/

    #include <windows.h>
    #include <time.h>
    #include <stdlib.h>

    #define CELL    15             // 【方格】的边长(pix) 
    #define W        22             // 游戏区宽(22个【方格】边长)
    #define H        30             // 游戏区高(30个【方格】边长)
    #define MS_NEWBLOCK    WM_USER+1  // 消息ID,产生新的【方块】
    #define MS_DRAW        WM_USER+2

    LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM);/*窗口过程处理

    int WINAPI WinMain ( HINSTANCE    hInstance,    //当前实例句柄
                         HINSTANCE    hPrevInstance, //前一实例句柄
                         PSTR        szCmdLine,      //指向程序命令行参数的指针
                         int        iCmdShow)        //应用程序开始执行窗口时显示方式用int类型标志
    {
        static char AppName[]="ToyBrick";//定义一个静态字符数组保存字符串"ToyBrick"(机应用程序名)
        HWND        hwnd;           //定义一个窗口句柄
        MSG            msg;         //定义一消息结构体变量
        WNDCLASSEX    wndclass;     //定义一窗口类结构变量,包含窗口类全部信息
        int            iScreenWide; //定义屏幕显示宽度

        wndclass.cbSize            = sizeof(wndclass);//窗口类对象大小
        wndclass.style            = CS_HREDRAW|CS_VREDRAW;//窗口类对象风格
        wndclass.lpfnWndProc    = WndProc;//窗口处理函数为WndProc
        wndclass.cbClsExtra        = 0; //窗口类无扩展
        wndclass.cbWndExtra        = 0;//窗口类实例没有扩展
        wndclass.hInstance        = hInstance;//当前实例句柄
        wndclass.hIcon            = LoadIcon (NULL, IDI_APPLICATION);//窗口最小化图标为默认图标
        wndclass.hCursor        = LoadCursor (NULL,IDC_ARROW);//窗口当前光标为箭头光标
        wndclass.hbrBackground    = (HBRUSH)GetStockObject (BLACK_BRUSH);//获得当前背景设置为黑色
        wndclass.lpszMenuName    = NULL;//窗体菜单名为空
        wndclass.lpszClassName    = AppName;//应用程序名
        wndclass.hIconSm        = LoadIcon (NULL, IDI_APPLICATION);//为应用程序加载图标


        if(!RegisterClassEx (&wndclass)) return FALSE; //注册一个窗口类

        // 获取显示器分辨率的X值iScreenWide,将程序窗口置于屏幕中央
        iScreenWide=GetSystemMetrics (SM_CXFULLSCREEN);
       //创建窗口
        hwnd =CreateWindow (AppName,  
            "俄罗斯方块",
            WS_MINIMIZEBOX|WS_SYSMENU ,
            iScreenWide/2-W*CELL/2, CELL,
            (W+1)*CELL-8, H*CELL,
            NULL, NULL,
            hInstance,
            NULL );
        if(!hwnd) return FALSE; //没有获得窗口句柄,返回假

        ShowWindow (hwnd,iCmdShow); //显示窗口
        UpdateWindow (hwnd);        //更新窗口
        MessageBox(hwnd,"开始游戏","开始",MB_OK);//显示Message
        SendMessage(hwnd,MS_NEWBLOCK,0,0);//向当前窗口发送消息
        SetTimer (hwnd, 1, 550,NULL);//设置下落时间

        while (GetMessage (&msg, NULL, 0, 0))//进入消息循环
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg); 
        }

        return msg.wParam;
    }

    // 函数DrawRact: 画【正方形】
    // 参数: 设备环境句柄和【正方形】的四角坐标
    void DrawRect (HDC hdc, int l, int t, int r, int b)
    {
        MoveToEx (hdc, l, t, NULL);
        LineTo (hdc, r, t);
        LineTo (hdc, r, b);
        LineTo (hdc, l, b);
        LineTo (hdc, l,t);
    }

    // 函数DrawCell: 画【方格】
    // 参数: 设备环境句柄和【方格】的四角坐标
    // 每个方格由内外两个【正方形】(DrawCell)画成,使其有立体感
    void DrawCell (HDC hdc, int l, int t, int r, int b)
    {
        DrawRect (hdc,l+1, t+1, r-1, b-1);
        DrawRect (hdc,l+3, t+3, r-3, b-3);
    }

    // 函数DrawBlock: 画【方块】
    // 参数: 设备环境句柄和【方块】中四个【方格】在游戏区域中的位置
    // 每个【方块】由四个【方格】组成7种不同的形状
    void DrawBlock (HDC hdc, int block[4][2])
    {
        int i;
        HPEN hpen;
        hpen =CreatePen (PS_SOLID,1,RGB(255,255,255));
        SelectObject (hdc,hpen);
        for(i=0; i<4; i++)
            DrawCell (hdc, (block[i][0]-1)*CELL, (block[i][1]-1)*CELL, //....
                      block[i][0]*CELL, block[i][1]*CELL);
        DeleteObject (hpen);
    }

    // 函数Cover: 清除原来位置的【方块】
    // 参数: 设备环境句柄和待清除的【方块】
    // 清除【方块】即在该【方块】的每个【方块】处画一个正方形的黑块
    void Cover (HDC hdc, int org[4][2])
    {
        int i;
        SelectObject (hdc, (HBRUSH)GetStockObject (BLACK_BRUSH));
        for(i=0; i<4; i++)
            Rectangle ( hdc, (org[i][0]-1)*CELL, (org[i][1]-1)*CELL, //.....
                        org[i][0]*CELL, org[i][1]*CELL);
    }

    // 窗口过程函数WndProc
    LRESULT CALLBACK WndProc ( HWND        hwnd,
                               UINT        iMsg,
                               WPARAM    wParam,
                               LPARAM    lParam )
    {
        int            i,j,k,lines,r;
        static int    top, sel, flag;
        static int    cells[W+2][H];        // 控制游戏的【方格矩阵】
        static int    org[4][2], block[4][2];       // 【方块】
        HDC            hdc;
        HPEN        hpen;
        PAINTSTRUCT ps;

        switch (iMsg)
        {
        case WM_CREATE:
            top=H-1;
            // 将第一列和最后一列【方格】置1,控制【方块】不超出游戏区域
            for(i=0; i<H; i++)
            { cells[0][i]=1;    cells[W+1][i]=1;    }
            // 将最底下一行【方格】置1,控制【方块】不超出游戏区域
            for(i=0; i<W+2; i++)    cells[i][H-1]=1;
            // 其他【方格】置0,游戏方块只能在这里移动
            for(i=1; i<=W; i++)
                for(j=0; j<H-1; j++)
                    cells[i][j]=0;
            return 0;

        case MS_NEWBLOCK:
            flag=0;         // flag表示【方块】旋转了几次
            for(i=top; i<H-1; i++)
            {
                lines =0;
                // 循环语句检查是否有某一行全部被【方格】都填满
                for(j=1; j<=W+1; j++)
                    if(! cells[j][i])
                    {    lines=1;    break;    }
                // 若该行被填满,则将上一行的填充状态复制到该行,依此类推
                // 即从该行开始,所有的【方格】都下移一行
                if(!lines)
                {    for(j=1;j<W+1; j++)
                        for(k=i; k>=top; k--)
                            cells[j][k]=cells[j][k-1];
                    top++;
                    InvalidateRect (hwnd, NULL, TRUE);
                }
            }
            // 产生随机数0~7,分别代表【方块】的7种形状
            srand( (unsigned)time( NULL ) );
            sel =rand()%7;
            //【方块】形状初始化
            //【方块】的形状由其每个【方格】的位置决定
            // 游戏区宽W=22,block[?][0]=9/10/11/12,block[?][1]=0/1/2
            // 这样【方块】初始位置在游戏区的最顶部的中央
            switch(sel)
            {
            case 0:
                // ▓▓
                // ▓▓
                org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =11;    org[1][1]=block[1][1] =0;
                org[2][0]=block[2][0] =10;    org[2][1]=block[2][1] =1;
                org[3][0]=block[3][0] =11;    org[3][1]=block[3][1] =1;
                break;

            case 1:
                // ▓▓▓▓
                org[0][0]=block[0][0] =9;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =10;    org[1][1]=block[1][1] =0;
                org[2][0]=block[2][0] =11;    org[2][1]=block[2][1] =0;
                org[3][0]=block[3][0] =12;    org[3][1]=block[3][1] =0;
                break;

            case 2:
                //▓
                //▓▓
                //  ▓
                org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =10;    org[1][1]=block[1][1] =1;
                org[2][0]=block[2][0] =11;    org[2][1]=block[2][1] =1;
                org[3][0]=block[3][0] =11;    org[3][1]=block[3][1] =2;
                break;

            case 3:
                //  ▓
                //▓▓
                //▓
                org[0][0]=block[0][0] =11;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =11;    org[1][1]=block[1][1] =1;
                org[2][0]=block[2][0] =10;    org[2][1]=block[2][1] =1;
                org[3][0]=block[3][0] =10;    org[3][1]=block[3][1] =2;
                break;
               
            case 4:
                //▓
                //▓
                //▓▓
                org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =10;    org[1][1]=block[1][1] =1;
                org[2][0]=block[2][0] =10;    org[2][1]=block[2][1] =2;
                org[3][0]=block[3][0] =11;    org[3][1]=block[3][1] =2;
                break;

            case 5:
                //  ▓
                //  ▓
                //▓▓
                org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =10;    org[1][1]=block[1][1] =1;
                org[2][0]=block[2][0] =10;    org[2][1]=block[2][1] =2;
                org[3][0]=block[3][0] =9;    org[3][1]=block[3][1] =2;
                break;
            case 6:
                //  ▓
                //▓▓▓
                org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
                org[1][0]=block[1][0] =9;    org[1][1]=block[1][1] =1;
                org[2][0]=block[2][0] =10;    org[2][1]=block[2][1] =1;
                org[3][0]=block[3][0] =11;    org[3][1]=block[3][1] =1;
                break;

            default:
                SendMessage (hwnd, MS_NEWBLOCK, 0, 0);
                break;
            }
            return 0;

        case WM_TIMER:
            // 每个时间节拍【方块】自动下移一行
            for(i=0; i<4; i++)
                block[i][1]++;
            // 检查【方块】下移是否被档住,即判断下移后新位置是否有【方格】
            for(i=0; i<4; i++)
                if(cells[ block[i][0] ][ block[i][1] ])
                {
                    for(i=0; i<4; i++)
                        cells[ org[i][0] ][ org[i][1] ]=1;
                    if(top>org[0][1]-2) top=org[0][1]-2;
                    if (top<1)
                    {
                        KillTimer (hwnd, 1);
                        MessageBox (hwnd, "游戏结束,即将退出 !", "退出", MB_OK);
                        PostQuitMessage (0);
                    }
                    SendMessage (hwnd, MS_NEWBLOCK, 0, 0);
                    return 0;
                }
            SendMessage (hwnd, MS_DRAW, 0, 0);
            return 0;

        // 响应键盘控制
        case WM_KEYDOWN:
            r=0;
            switch((int)wParam)
            {
            case VK_LEFT:
               
               
                for(i=0; i<4; i++)
                    block[i][0]--;
                break;
               

            case VK_RIGHT:
                for(i=0; i<4; i++)
                    block[i][0]++;
                break;
            case VK_DOWN:
                for(i=0; i<4; i++)
                    block[i][1]++;
                break;

            // 按[向上键],【方块】顺时针旋转
            //【方块】的旋转不是真正的旋转,而是根据不同的【方块】形状和
            // 该【方块】旋转过的次数来移动其中的一个或几个【方格】,从而
            // 达到旋转的效果 这样做很复杂,算法不够理想,但是能够保持【方
            // 块】旋转时的重心比较稳定。
            case VK_UP:
                r=1;
                flag++;     //【方块】旋转加1
                switch(sel) // sel代表当前【方块】的形状
                {
                case 0: break;

                case 1:
                    flag =flag%2;
                    for(i=0; i<4; i++)
                    {
                        block[i][(flag+1)%2] =org[2][(flag+1)%2];
                        block[i][flag] =org[2][flag]-2+i;
                    }
                    break;

                case 2:
                    flag =flag%2;
                    if(flag)
                    {    block[0][1] +=2;    block[3][0] -=2;    }
                    else
                    {    block[0][1] -=2;    block[3][0] +=2;    }
                    break;

                case 3:
                    flag =flag%2;
                    if(flag)
                    {    block[0][1] +=2;    block[3][0] +=2;    }
                    else
                    {    block[0][1] -=2;    block[3][0] -=2;    }
                    break;

                case 4:
                    flag=flag%4;
                    switch(flag)
                    {
                    case 0:
                        block[2][0] +=2;    block[3][0] +=2;
                        block[2][1] +=1;    block[3][1] +=1;
                        break;
                    case 1:
                        block[2][0] +=1;    block[3][0] +=1;
                        block[2][1] -=2;    block[3][1] -=2;
                        break;
                    case 2:
                        block[2][0] -=2;    block[3][0] -=2;
                        block[2][1] -=1;    block[3][1] -=1;
                        break;
                    case 3:
                        block[2][0] -=1;    block[3][0] -=1;
                        block[2][1] +=2;    block[3][1] +=2;
                        break;
                    }
                    break;

                case 5:
                    flag=flag%4;
                    switch(flag)
                    {
                    case 0:
                        block[2][0] +=1;    block[3][0] +=1;
                        block[2][1] +=2;    block[3][1] +=2;
                        break;
                    case 1:
                        block[2][0] +=2;    block[3][0] +=2;
                        block[2][1] -=1;    block[3][1] -=1;
                        break;
                    case 2:
                        block[2][0] -=1;    block[3][0] -=1;
                        block[2][1] -=2;    block[3][1] -=2;
                        break;
                    case 3:
                        block[2][0] -=2;    block[3][0] -=2;
                        block[2][1] +=1;    block[3][1] +=1;
                        break;
                    }
                    break;

                case 6:
                    flag =flag%4;
                    switch(flag)
                    {
                    case 0:
                        block[0][0]++; block[0][1]--;
                        block[1][0]--; block[1][1]--;
                        block[3][0]++; block[3][1]++;
                        break;
                    case 1:
                        block[1][0]++; block[1][1]++; break;
                    case 2:
                        block[0][0]--; block[0][1]++; break;
                    case 3:
                        block[3][0]--; block[3][1]--; break;
                    }
                    break;
                }
                break;
            }
            // 判断【方块】旋转后新位置是否有【方格】,若有,则旋转取消
            for(i=0; i<4; i++)
                if(cells[ block[i][0] ][ block[i][1] ])
                {
                    if(r) flag +=3;
                    for(i=0; i<4; i++)
                        for(j=0; j<2; j++)
                            block[i][j]=org[i][j];
                    return 0;
                }
            SendMessage(hwnd, MS_DRAW, 0, 0);;
            return 0;

        // 清除当前【方块】,并在新的位置重新绘制【方块】
        case MS_DRAW:
            hdc =GetDC (hwnd);
            Cover (hdc, org);
            for(i=0; i<4; i++)
                for(j=0; j<2; j++)
                    org[i][j]=block[i][j];
            DrawBlock (hdc,block);
            ReleaseDC (hwnd, hdc);
            return 0;

        // 按照【方格矩阵】重绘游戏区域的【方格】
        case WM_PAINT:
            hdc =BeginPaint (hwnd, &ps);
            hpen =CreatePen (PS_SOLID,1,RGB(255,255,255));
            SelectObject (hdc,hpen);
            for (i=top; i<H-1; i++)
                for(j=1; j<=W; j++)
                    if( cells[j][i] )
                        DrawCell (hdc, (j-1)*CELL, (i-1)*CELL, j*CELL, i*CELL);
            DeleteObject (hpen);
            EndPaint (hwnd, &ps);
            return 0;

        case WM_DESTROY:
            KillTimer (hwnd, 1);
            PostQuitMessage (0);
            return 0;
        }

        return DefWindowProc (hwnd, iMsg, wParam, lParam);
    }

    /************************************************************/

    /* 结束
    * 注释时间: 2003/01/04 SAT
    * 于 广东省三水市建行宿舍
    */

    /************************************************************/

    -------------------------------------------------------------------------------------
    // stdafx.h : include file for standard system include files,
    //  or project specific include files that are used frequently, but
    //      are changed infrequently
    //

    #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
    #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000

    #define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers

    #include <windows.h>


    // TODO: reference additional headers your program requires here

    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

    #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
    ----------------------------------------------------------------------------------------
    // stdafx.cpp : source file that includes just the standard includes
    //    ToyBricks.pch will be the pre-compiled header
    //    stdafx.obj will contain the pre-compiled type information

    #include "stdafx.h"

    // TODO: reference any additional headers you need in STDAFX.H
    // and not in this file
    --------------------------------------------------------------------------------

    正文完
     
     



     
    拼命三郎 @ 2006-01-11 17:59

    DLL(Dynamic Link Libraries)专题:

        比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此
    协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系
    统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程
    序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘
    空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编
    写大的EXE程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂
    性,也不利于阶段性的单元测试。 

        Windows系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的
    程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试
    。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内
    存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块
    可以同时被多个应用程序使用。Windows自己就将一些主要的系统功能以DLL模块的形式实
    现。 

        一般来说,DLL是一种磁盘文件,以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的
    系统文件都可以是DLL。它由全局数据、服务函数和资源组成,在运行时被系统加载到进程
    的虚拟空间中,成为调用进程的一部分。如果与其它DLL之间没有冲突,该文件通常映射到
    进程虚拟空间的同一地址上。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可
    以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个
    DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器
    无关。 

        在Win32环境中,每个进程都复制了自己的读/写全局变量。如果想要与其它进程共享
    内存,必须使用内存映射文件或者声明一个共享数据段。DLL模块需要的堆栈内存都是从运
    行进程的堆栈中分配出来的。Windows在加载DLL模块时将进程函数调用与DLL文件的导出函
    数相匹配。Windows操作系统对DLL的操作仅仅是把DLL映射到需要它的进程的虚拟地址空间
    里去。DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有. 
          

    一、关于调用方式:

    1、静态调用方式:由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有
    其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的
    使用时才释放它),简单实用,但不够灵活,只能满足一般要求。

     隐式的调用:需要把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用
    DLL中的函数时,只须说明一下。隐式调用不需要调用LoadLibrary()和FreeLibrary()。程
    序员在建立一个DLL文件时,链接程序会自动生成一个与之对应的LIB导入文件。该文件包
    含了每一个DLL导出函数的符号名和可选的标识号,但是并不含有实际的代码。LIB文件作
    为DLL的替代文件被编译到应用程序项目中。当程序员通过静态链接方式编译生成应用程序
    时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的
    EXE文件中。LIB文件中也包含了对应的DLL文件名(但不是完全的路径名),链接程序将其
    存储在EXE文件内部。当应用程序运行过程中需要加载DLL文件时,Windows根据这些信息发
    现并加载DLL,然后通过符号名或标识号实现对DLL函数的动态链接。所有被应用程序调用
    的DLL文件都会在应用程序EXE文件加载时被加载在到内存中。可执行程序链接到一个包含
    DLL输出函数信息的输入库文件(.LIB文件)。操作系统在加载使用可执行程序时加载DLL。
    可执行程序直接通过函数名调用DLL的输出函数,调用方法和程序内部其他的函数是一样的


    2、动态调用方式:是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较
    复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。

     显式的调用:是指在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己
    所做的动态连接库调进来,动态连接库的文件名即是上面两个函数的参数,再用GetProcA
    ddress()获取想要引入的函数。自此,你就可以象使用如同本应用程序自定义的函数一样
    来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLib
    rary释放动态连接库。直接调用Win32 的LoadLibary函数,并指定DLL的路径作为参数。L
    oadLibary返回HINSTANCE参数,应用程序在调用GetProcAddress函数时使用这一参数。Ge
    tProcAddress函数将符号名或标识号转换为DLL内部的地址。程序员可以决定DLL文件何时
    加载或不加载,显式链接在运行时决定加载哪个DLL文件。使用DLL的程序在使用之前必须
    加载(LoadLibrary)加载DLL从而得到一个DLL模块的句柄,然后调用GetProcAddress函数
    得到输出函数的指针,在退出之前必须卸载DLL(FreeLibrary)。

        Windows将遵循下面的搜索顺序来定位DLL: 
    1.包含EXE文件的目录, 
    2.进程的当前工作目录, 
    3.Windows系统目录, 
    4.Windows目录, 
    5.列在Path环境变量中的一系列目录。

    二、MFC中的dll:

    a、Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用
    的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。

    b、Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。明显的特点是在源
    文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。

    静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。该类DLL应用程序里头的输
    出函数可以被任意Win32程序使用,包括使用MFC的应用程序。输入函数有如下形式:
    extern "C" EXPORT YourExportedFunction( );
    如果没有extern “C”修饰,输出函数仅仅能从C++代码中调用。
    DLL应用程序从CWinApp派生,但没有消息循环。

    动态链接到MFC的规则DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用M
    FC的应用程序。但是,所有从DLL输出的函数应该以如下语句开始:
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
    此语句用来正确地切换MFC模块状态。

    Regular DLL能够被所有支持DLL技术的语言所编写的应用程序所调用。在这种动态连接库
    中,它必须有一个从CWinApp继承下来的类,DllMain函数被MFC所提供,不用自己显式的写
    出来。

    c、Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类型的
    动态连接库,可以用来输出一个从MFC所继承下来的类。它输出的函数仅可以被使用MFC且
    动态链接到MFC的应用程序使用。可以从MFC继承你所想要的、更适于你自己用的类,并把
    它提供给你的应用程序。你也可随意的给你的应用程序提供MFC或MFC继承类的对象指针。
    Extension DLL使用MFC的动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序
    所调用。Extension DLLs 和Regular DLLs不一样,它没有一个从CWinApp继承而来的类的
    对象,所以,你必须为自己DllMain函数添加初始化代码和结束代码。

    和规则DLL相比,有以下不同:

    1、它没有一个从CWinApp派生的对象;
    2、它必须有一个DllMain函数;
    3、DllMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,如果返回0,D
    llMmain也返回0;
    4、如果它希望输出CRuntimeClass类型的对象或者资源(Resources),则需要提供一个初始
    化函数来创建一个CDynLinkLibrary对象。并且,有必要把初始化函数输出;
    5、使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类,而且,一般在InitInstan
    ce里调用扩展DLL的初始化函数。

    三、dll入口函数:

    1、每一个DLL必须有一个入口点,DllMain是一个缺省的入口函数。DllMain负责初始化(I
    nitialization)和结束(Termination)工作,每当一个新的进程或者该进程的新的线程访问
    DLL时,或者访问DLL的每一个进程或者线程不再使用DLL或者结束时,都会调用DllMain。
    但是,使用TerminateProcess或TerminateThread结束进程或者线程,不会调用DllMain。


    DllMain的函数原型:
    BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
    {
     switch(ul_reason_for_call) 
     {
     case DLL_PROCESS_ATTACH:
     .......
     case DLL_THREAD_ATTACH:
     .......
     case DLL_THREAD_DETACH:
     .......
     case DLL_PROCESS_DETACH:
     .......
     return TRUE;
     }
    }

    参数:
    hMoudle:是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段
    的一个选择符);
    ul_reason_for_call:是一个说明动态库被调原因的标志。当进程或线程装入或卸载动态
    连接库的时候,操作系统调用入口函数,并说明动态连接库被调用的原因。它所有的可能
    值为:
    DLL_PROCESS_ATTACH: 进程被调用;
    DLL_THREAD_ATTACH: 线程被调用;
    DLL_PROCESS_DETACH: 进程被停止;
    DLL_THREAD_DETACH: 线程被停止;
    lpReserved:是一个被系统所保留的参数。

    2、_DllMainCRTStartup

     为了使用“C”运行库(CRT,C Run time Library)的DLL版本(多线程),一个DLL应用程
    序必须指定_DllMainCRTStartup为入口函数,DLL的初始化函数必须是DllMain。

     _DllMainCRTStartup完成以下任务:当进程或线程捆绑(Attach)到DLL时为“C”运行时的
    数据(C Runtime Data)分配空间和初始化并且构造全局“C++”对象,当进程或者线程终止
    使用DLL(Detach)时,清理C Runtime Data并且销毁全局“C++”对象。它还调用DllMain和
    RawDllMain函数。

     RawDllMain在DLL应用程序动态链接到MFC DLL时被需要,但它是静态的链接到DLL应用程
    序的。在讲述状态管理时解释其原因。

    四、关于约定:

    动态库输出函数的约定有两种:调用约定和名字修饰约定。

    1)调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还
    是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。

    函数调用约定有多种,这里简单说一下:

       1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC+
    +5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,_
    _fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一
    致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈
    ,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。

        _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的
    压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在
    函数名后加上"@"和参数的字节数。

        2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把
    参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的
    函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。

        _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码
    ,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式
    。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。

        3、__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器
    来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参
    数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修
    饰约定方面,它和前两者均不同。

        _fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"
    前缀,在函数名后加上"@"和参数的字节数。    

        4、thiscall仅仅应用于“C++”成员函数。this指针存放于CX寄存器,参数从右到左
    压。thiscall不是关键词,因此不能被程序员指定。

        5、naked call采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码
    来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。nake
    d call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec共同使用。


        关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编
    译环境的Setting...\C/C++ \Code Generation项选择。当加在输出函数前的关键字与编译
    环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为
    /Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。

        要完全模仿PASCAL调用约定首先必须使用__stdcall调用约定,至于函数名修饰约定,
    可以通过其它方法模仿。还有一个值得一提的是WINAPI宏,Windows.h支持该宏,它可以将
    出函数翻译成适当的调用约定,在WIN32中,它被定义为__stdcall。使用WINAPI宏可以创
    建自己的APIs。

    2)名字修饰约定

    1、修饰名(Decoration name)

    “C”或者“C++”函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函
    数定义或者原型时生成的字符串。有些情况下使用函数的修饰名是必要的,如在模块定义
    文件里头指定输出“C++”重载函数、构造函数、析构函数,又如在汇编代码里调用“C”
    ”或“C++”函数等。

    修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。

    2、名字修饰约定随调用约定和编译种类(C或C++)的不同而变化。函数名修饰约定随编译种
    类和调用约定的不同而不同,下面分别说明。

        a、C编译时函数名修饰约定规则:

     __stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参
    数的字节数,格式为_functionname@number

     __cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为_functionname。
       
     __fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参
    数的字节数,格式为@functionname@number。

        它们均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输
    出的函数名无任何修饰且全部大写。

        b、C++编译时函数名修饰约定规则:

    __stdcall调用约定:
              1、以“?”标识函数名的开始,后跟函数名;
              2、函数名后面以“@@YG”标识参数表的开始,后跟参数表;
              3、参数表以代号表示:
                 X--void ,
                 D--char,
                 E--unsigned char,
                 F--short,
                 H--int,
                 I--unsigned int,
                 J--long,
                 K--unsigned long,
                 M--float,
                 N--double,
                 _N--bool,
                 ....
                 PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,
    以“0”代替,一个“0”代表一次重复;
              4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针
    标识在其所指数据类型前; 
              5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标
    识结束。

        其格式为“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如
              int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z
              void Test2()                       -----“?Test2@@YGXXZ

    __cdecl调用约定:
     规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YA

    __fastcall调用约定:
     规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YI

        VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用.
        
    五、关于DLL的函数:

        动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal f
    unction)。导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。

    输出函数的方法有以下几种:

    1、传统的方法

     在模块定义文件的EXPORT部分指定要输入的函数或者变量。语法格式如下:
    entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]

    其中:

    entryname是输出的函数或者数据被引用的名称;

    internalname同entryname;

    @ordinal表示在输出表中的顺序号(index);

    NONAME仅仅在按顺序号输出时被使用(不使用entryname);

    DATA表示输出的是数据项,使用DLL输出数据的程序必须声明该数据项为_declspec(dllim
    port)。

    上述各项中,只有entryname项是必须的,其他可以省略。

     对于“C”函数来说,entryname可以等同于函数名;但是对“C++”函数(成员函数、非
    成员函数)来说,entryname是修饰名。可以从.map映像文件中得到要输出函数的修饰名,
    或者使用DUMPBIN /SYMBOLS得到,然后把它们写在.def文件的输出模块。DUMPBIN是VC提供
    的一个工具。

    如果要输出一个“C++”类,则把要输出的数据和成员的修饰名都写入.def模块定义文件。


    2、在命令行输出

     对链接程序LINK指定/EXPORT命令行参数,输出有关函数。

    3、使用MFC提供的修饰符号_declspec(dllexport)

     在要输出的函数、类、数据的声明前加上_declspec(dllexport)的修饰符,表示输出。_
    _declspec(dllexport)在C调用约定、C编译情况下可以去掉输出函数名的下划线前缀。ex
    tern "C"使得在C++中使用C编译方式成为可能。在“C++”下定义“C”函数,需要加exte
    rn “C”关键词。用extern "C"来指明该函数使用C编译方式。输出的“C”函数可以从“
    C”代码里调用。
        
        例如,在一个C++文件中,有如下函数:
        extern "C" {void  __declspec(dllexport) __cdecl Test(int var);}
    其输出函数名为:Test 
     
     MFC提供了一些宏,就有这样的作用。

    AFX_CLASS_IMPORT:__declspec(dllexport)
     
    AFX_API_IMPORT:__declspec(dllexport)
     
    AFX_DATA_IMPORT:__declspec(dllexport)
     
    AFX_CLASS_EXPORT:__declspec(dllexport)
     
    AFX_API_EXPORT:__declspec(dllexport)
     
    AFX_DATA_EXPORT:__declspec(dllexport)
     
    AFX_EXT_CLASS: #ifdef _AFXEXT 
        AFX_CLASS_EXPORT
        #else
        AFX_CLASS_IMPORT
     
    AFX_EXT_API:#ifdef _AFXEXT
        AFX_API_EXPORT
        #else
        AFX_API_IMPORT
     
    AFX_EXT_DATA:#ifdef _AFXEXT
         AFX_DATA_EXPORT
         #else
         AFX_DATA_IMPORT

     像AFX_EXT_CLASS这样的宏,如果用于DLL应用程序的实现中,则表示输出(因为_AFX_EX
    T被定义,通常是在编译器的标识参数中指定该选项/D_AFX_EXT);如果用于使用DLL的应
    用程序中,则表示输入(_AFX_EXT没有定义)。

     要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使
    用_declspec(_dllexport)。如:

    class AFX_EXT_CLASS CTextDoc : public CDocument
    {
     …
    }

    extern "C" AFX_EXT_API void WINAPI InitMYDLL();

     这几种方法中,最好采用第三种,方便好用;其次是第一种,如果按顺序号输出,调用效
    率会高些;最次是第二种。 

    六、模块定义文件(.DEF)

     模块定义文件(.DEF)是一个或多个用于描述DLL属性的模块语句组成的文本文件,每个DE
    F文件至少必须包含以下模块定义语句:

    * 第一个语句必须是LIBRARY语句,指出DLL的名字;
    * EXPORTS语句列出被导出函数的名字;将要输出的函数修饰名罗列在EXPORTS之下,这个
    名字必须与定义函数的名字完全一致,如此就得到一个没有任何修饰的函数名了。
    * 可以使用DESCRIPTION语句描述DLL的用途(此句可选);
    * ";"对一行进行注释(可选)。

    七、DLL程序和调用其输出函数的程序的关系

    1、dll与进程、线程之间的关系

    DLL模块被映射到调用它的进程的虚拟地址空间。
    DLL使用的内存从调用进程的虚拟地址空间分配,只能被该进程的线程所访问。
    DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。
    DLL使用调用进程的栈。

    2、关于共享数据段

     DLL定义的全局变量可以被调用进程访问;DLL可以访问调用进程的全局数据。使用同一D
    LL的每一个进程都有自己的DLL全局变量实例。如果多个线程并发访问同一变量,则需要使
    用同步机制;对一个DLL的变量,如果希望每个使用DLL的线程都有自己的值,则应该使用
    线程局部存储(TLS,Thread Local Strorage)。

        在程序里加入预编译指令,或在开发环境的项目设置里也可以达到设置数据段属性的
    目的.必须给这些变量赋初值,否则编译器会把没有赋初始值的变量放在一个叫未被初始化
    的数据段中。

                                         rivershan原创于2002年9月18日