EDN首页   博客首页

最新日志

发表于:2006-8-11 21:11:12
标签:外企工作  

1

外企是如何掏空中国的?

外企是如何掏空中国的?今年40出头的方先生曾是最早一批进入外企的白领,几乎
见证了外资进入中--国
的整个发展史。尽管方先生目前的年薪不菲、生活舒适,但面对这份人人羡慕的
工作,他的心却始终沉甸甸的,他不无感慨地表示:“我帮着外国老板赚了中--国
人太多钱了,感觉这钱赚得自己都手酸了,他们的心却越来越贪。如果再这样下
去,恐怕中--国就要被他们搬空了!”这话,听上去危言耸听,却是不少业内人
士的共同心声。方先生与跨国公司的老板共事多年,对于外资企业虚亏避税、转
移利润等内幕知之甚详。

  利润转移:

  明修栈道 暗渡陈仓


  “一只猪和一只母鸡合资开餐馆,鸡用自己下的蛋出资,猪用自己的肉出资
———当猪肉割完后,合资还进行得下去吗?”


  方先生曾是某重点大学经济管理系的学生,毕业后被分配到了一家效益不错
的国企工作。工作刚满2年,他就碰上了一个难得的机会———一家业内知名的跨
国公司来华洽谈合作事宜。凭借着一口流利的英语,方先生成为洽谈中的骨干力
量。“那时候‘合资’可是块抛出来就能让人扑上去的肉,”方先生回忆着, “
几家国内同行之间的竞争极其惨烈,现在想来却是鹬蚌相争,让渔翁得了利。”
最后,方先生所在单位在胜出的同时,迫不及待地接受了外方剥离优势资产、组
建合资公司的建议。


  由于在洽谈中的出色表现,也出于对合资公司今后发展前景的信任,方先生
最终辞去了国企的工作,接受了合资公司一个中层职位,主管采购。本以为在中
方拥有 51%控股权的企业中,掌握领导权的应该是中--国人,但在实际工作中,
方先生发现,由于外资提供了“先进的管理经验”以及“先进的生产技术”,掌
握了绝大多数实际问题的决策方向。特别是外方凭技术控制权,在实际操作中控
制了原材料和零部件的采购大权。


  方先生刚开始本着干一番事业的信念,认真核查每一个递交了合作意向的零
件供应商,最终锁定了南方的一家民营企业,技术过关、规格也符合标准,最主
要的是价格低廉。而申请报告上交到上层主管后,却被驳回了,理由是“该厂必
须把产品提交到母公司进行认证”。


  当方先生把结论传达给投标的厂商、并委婉地要求对方进行认证时,对方急
了:“我们零部件产品的主要供应方向就是行业内中外合资企业。为了拿到零部
件配套权,我们多次到国外谈判,不仅花了大量的差旅费,而且花了数百万元技
术转让费。我们的产品已经通过了国际认证,保证质量,为什么还要再提交认证
?这些费用都是生产成本啊!”经过核算,如果认证费用将导致生产成本提高20%
左右,而经投标厂商反复计量勉强同意进行认证之后,外方又抛出了新的理由:
“认证标准不提供给非配套厂商”。方先生这才恍然大悟:外方根本就不同意在
国内采购零配件以及原材料,通过所谓的“原始供应制度”把利润转移到其国外
的母公司才是根本目的。合资企业利润必须要和中方共享,而高价采购给国外受
母公司直接控制的下属零件生产企业带来的巨额利润,却是他们可以独享的。


  “一只猪和一只母鸡合资开餐馆,鸡用自己下的蛋出资,猪用自己的肉出资
———当猪肉割完后,合资还进行得下去吗?”无奈的方先生在了解到外方的根
本意图后,手头的工作也简单了许多。虽然零配件的采购费用上翻了近60%,但
由于打的是“国际知名品牌”的旗号,良好的销售状况还是给合资公司带来了不
错的收益。不过,随着行业竞争的升级,利润逐步摊平,高成本的劣势开始显现
。在中方的反复交涉下,外方终于有保留地同意了对技术含量要求不高的零件以
及原材料 “本土化采购”。不过,方先生在实际采购中还是注意到,事实上取代
了原来国外零件供应商的是与其母公司有着千丝万缕关系的“合资厂商”。

  分析


  在国际上,一流企业挣钱靠认证,二流企业挣钱靠品牌。以汽车生产企业为
例,外商故意在其本国建立独资零部件企业,在中--国建立中外合资整车公司。
中外合资公司挣的钱要分给中方一部分,但是外商在其本国建立的独资零部件公
司挣的利润完全是外商的。中--国零部件企业给中外合资主机企业和整车企业供
应配套产品,必须通过外方总部的“认证”。这样就实现了“利润转移”。“认
证”只不过是一种手段,转移利润才是实质。


  从国家发改委公布的上半年经济运行情况看,一直被归为暴利行业之一的汽
车业,利润同比下降了48.8%。而来自中--国汽车工业咨询发展公司的数据则显
示,上半年中--国累计生产轿车185.17万辆,同比增长约3.28%,销量为184.30万
辆,同比增长10.55%。产销量增加了,利润反而降下来了。不仅仅是汽车业,很
多产业都出现了外资企业利润年年下降的“怪事”。据知情人士介绍,不是外企
的效益越来越差,而是他们用“乾坤大挪移”的方法将利润转移了。


  外资企业利润转移就发生在采购环节,其前提就是外方坚持“原始供应原则
”,在中外合资的主机企业和整车企业,外方凭技术控制权,掌握了原材料和零
部件的采购大权。近年来,中外合资企业和外商独资企业采购原材料和零部件,
普遍坚持“原始供应原则”,排斥中资企业。


  从母公司高价采购原材料和零部件是外资公司“偷梁换柱”的另一大法宝。
一家日---资汽车零部件企业从母公司采购原材料,其采购价比中--国同样的原材
料高出数十倍。权威人士告诉记者,外方从母公司高价采购原材料和零件,再以
低价向母公司出售产品,从而把利润转移到母公司,加大中外合资企业的成本,
减少中外合资企业的利润。


  另外,外方还通过“认证”等手段从中方收取高额技术转让费,以达到其转
移利润的目的。中外合资主机企业的技术部门都是外方控制的,因此,即使在中
方控股的中外合资主机企业,中方在产品配套问题上也几乎没有话语权。外方规
定为中外合资主机企业供应配套件的中--国零部件企业必须通过外方母公司认证
。这样就实现了“利润转移”。“认证”只不过是一种手段,转移利润才是实质


  亏损避税:

  外资悖论 令人惊诧


  跨国公司都有自己的律师团专门研究怎么把法律上的一个小缝隙钻成大窟窿
,我们法律上的空子大得像门,人家堂堂正正就走过去了,手里还举着个牌子“
合理避税”。


  随着外资企业大量涌入以及国内同行的低价优势,方先生所在公司的增长率
有所下滑,2001年纳税额从6000万下降到了4000万。此时,外方以“依靠国外先
进管理方式促进企业快速发展、为中--国创造更多税收”为由,向中方提出建立
独资企业的要求。而业已晋升为公司高层的方先生则受外方老板任命,负责此事
的协调工作。


  方先生不无感叹地告诉记者,当时所谓的“协调工作”根本就没有什么难度
,当地Z F听说外方独资办厂可以多创造利润、多纳税,几乎是毫不犹豫地答应了
外方的全部要求,并且主动地为外方独资办厂提供了优惠条件。而中方迫于Z F部
门的压力,也不得不以很低的价格把股份出售给了外方,很快外方就如愿以偿地
建起了独资公司,而方先生也以公司元老的身份进入了新公司。


  但惟一没有如愿的是当地Z F。外方“独资”第一年纳税3000万元,比“独资
”前的合资企业少纳税1000多万元;第二年纳税2000万元,比“独资”第一年又
少纳税1000万元;外方“独资”第三年纳税数额比第二年仍少了近一半。是竞争
越来越激烈,还是市场越来越糟?方先生表示:近年来中--国的市场形势越来越
好,是众所周知的事实。事实上,“独资”后在规范的管理下,企业状况越来越
好。据他所知,这家外资企业的产品销量在市场上的份额也一直稳步攀升,而中
--国区优秀的业绩也引来了母公司的注意,就在2004年底,公司董事会决定第三
次追加投资。


  既然如此,为什么这家企业账面上却持续亏损?面对记者的疑问,方先生摇
了摇头。由于分工不同,他对税务申报方面的情况并不太清楚。但方先生肯定地
告诉记者,由于在很多地方,引进外资的数额、以及相应的GDP增长是领导干部的
主要指标,所以类似于方先生所在外企这样的跨国公司来说,往往可以打着 “货
币选票”的王牌,与地方Z F讨价还价,得到一般国内同业难以想象的税收优惠。
而除了税收减免、财政返还、低廉地价等可以摆上台面的优惠措施之外,一些地
方领导为了本区域经济指标的增长,为了更快的升迁,甚至会对税务部门的查税
工作进行干预,这就是很多外企敢于“越亏损越投资”的一个重要原因。


  而另一方面,这些跨国公司有着极强的税务筹划力量。某国税局官员就曾透
露,大多数知名跨国公司会选择普华永道等国际知名会计公司应对,他们的运作
方法非常复杂,往往在国外转好几个圈,而且内部财务核算有着非常先进的软件
系统,有的软件系统国内税务工作者根本就不会操作,监管极其困难。再加海关
、税务等Z F部门间信息封锁更造成了查税工作难度加大。方先生半开玩笑地比喻
:“跨国公司都有一个律师团专门研究法律,只要有一点缝隙他们都能钻出一个
窟窿。我们现在的法律上的空子几乎比门都大,他们堂堂正正的就能走出去了。


  分析


  有数据表明,外企在中--国平均亏损达51%-55%,年亏损金额逾1200亿元
。另据国家统计局统计结果显示,今年1—4月份,外商及港澳台商投资企业的利
润(1075亿元)下降幅度为3.5%。对此,国家税务局官员认为,亏损企业2/3属于
非经营性的原因,意在避税。保守估计,我国一年流失的外资企业税收已达300亿
元。


  目前,我国已经成为全球吸引外商直接投资(FDI)最多的国家,然而每年大量
涌入国内的外商投资企业却普遍存在着亏损数目多、亏损额大的情况。有人将这
个现象称为“外资悖论”:第一,能够将资本运作手段延伸到别国,将价值链的
创造过程分解到他乡的跨国公司,其亏损率竟然高于东道国的地方企业。第二,
资本是趋利的,在亏损率如此之高的情况下,仍有大量的外资涌入这些热点地区
。如此令人惊讶的“外资悖论”究竟是怎样产生的呢,其中又隐藏着什么秘密?


  青岛是我国吸引外资的重点城市,2004年上半年,青岛市规模以上外资企业
共有479户亏损,亏损面仍达39.5%,占青岛市规模以上企业亏损总数的60%;亏
损额为8.3亿元,占青岛市规模以上企业亏损额的68%。


  不仅在青岛,长三角、珠三角和环渤海地区,外资企业亏损面大的情况普遍
存在。外资企业账面亏损目的就在于避税。目前外企避税主要有6大形式:购销两
头在外,通过“高进低出”将利润转移到境外;虚增投入固定资产设备价值提前
收回部分投资额,且虚报企业年度折旧费用,使企业迟迟未能进入获利年度;以
支付专利、专有技术、商标、商誉等特许权使用费、销售佣金、回扣等形式将利
润汇出境外;集团内部实行上、中、下游产品的多环节提取支付特许权使用费;
以支付网络维护、广告、咨询等劳务费用转移利润;利用资本弱化,通过关联企
业资金融通提供贷款支付利息或不收取利息等形式转移企业利润。外资企业如此
大规模的避税也反映了我国对外企监管的薄弱。曾有人估算,以我国现有的人力
、物力和技术手段,现有的外资企业平均每家被审计的概率是800年一遇!虽然数
字的真实性值得探讨,但也从一个侧面说明了我国税务稽查部门在反避税方面的
欠缺。

  招商

  本土企业:

  差别待遇话语权缺失


  “中--国人‘内战内行、外战外行’,某些官员看见外国人恨不得跪下来叫
‘洋大人’的老毛病不改,没有政 策支持的中--国企业在国际市场上永远难以拥
有真正的话语权。”


  对于像方先生这样在外企工作、尤其是已经升至高层管理者的中--国人来讲
,头上总是像悬着一块玻璃的天花板,永远无法进入核心。真正的主管总是空降
来的外国人,或者是“外黄内白”的华裔“香蕉”。而这些人除丰厚的薪金外,
每年还会有相当次数的探亲假,出入国境的高额路费也由公司全部报销。“为外
国人赚中- -国钱”的心理一直缠绕着方先生,而积累了一定客户资源、也受到了
良好的管理培训的方先生之所以一直没有离开外企创建自己的事业,却是因为看
到了当年一位同事的教训。


  小刘当年与方先生一同经历了那家公司由中外合资到外商独资的变革。惟一
不同的是,小刘是专业技术人员出身,在掌握了一定资源后,他选择了自己创业
。起初,小刘的工厂经营不错,由于他上的是技术含量较高的高端生产线,避开
了一些激烈的低端竞争,产品销量直线上升。可随着外资的不断注入,很多外企
开始进行规模化、配套化生产,小刘发现在招标会上,他们公司的产品总会被一
些新的合资公司击败,而由于反复认证,以及某些核心技术的转让费用不断攀升
使他们公司产品的利润被不断摊平。而更可怕的是在很多时候,他们这些本来就
不在技术上占有优势的民资企业还要面对更多的不平等待遇。以税收方面为例,
先不用说作为外企根据国家政策可以享有的各种税收优惠,在实际操作中,民营
企业被抽测的几率就会是外企的几十倍、甚至上百倍,很多民营管理者一听到税
务二字就会打哆嗦。据小刘说,在一次税务大检查中由于当时市场上出现了一些
真假难辨的假税务发票,收到发票的企业都不得不面对补缴税款的局面。由于正
在年底,资金紧缺,小刘不得不把房子抵押成现金才免了牢狱之灾。而面对同样
的问题,外企的管理者会得到更多的应对时间。

  分析


  事实上,中--国企业被淘汰是一个“正在进行时”而不是“将来时”,在某
些行业甚至接近“完成时”。看看我们的手机市场,到目前为止被外国厂商卖芯
片赚走了100多亿美金,而中--国手机制造商做得最好的TCL每年才挣了6、7亿元
人民币。第二代移动通信的基站市场份额高达4000多亿人民币,其中按民间的算
法只有2.4%是由中--国企业提供的,信息产业部的数据是6%。这两个数字没有
量级的差别,实际上4000多亿都被外国企业拿走了。


  中--国加入WTO以后,部分经济学家提出了中--国成为“世界制造中心”的概
念,目前,国际上制造业资本大举迁往我国。然而,在我国已占据国内外市场优
势的产品中,主要集中于非核心零部件生产和产品组装这两个环节。因此,中--国
只能算是制造大国,而非制造强国。


  不容否认,中--国企业能够拥有自主知识产权的企业并不多,在整个制造业
的产业链中,中--国大部分企业还处于下游,企业自身成长的条件很脆弱。方正
集团董事长魏新指出,过去我国“拿市场换技术”的做法被证明是失败的,市场
是被拿去了,但没换回技术。国内的企业只有掌握产业发展中的核心技术,才能
在国际经济竞争中居于主导地位,控制产业链中的分工和利润分配,有更大的自
主权决定产品推出和淘汰的时间表,获得高于行业平均水平的超额利润。


  在某种技术更新换代时,国内企业便有机会拥有自主的核心技术,出现这种
机会,Z F应该下大决心调整产业政策,尽量保护本土产业。对于中--国已经取得
了制造规模优势并形成了配套产品布局的产业,比如电子产品领域,国内企业不
能只停留在购买国外技术上,有能力的企业应选择若干关键的技术进行突破,进
而建立以中--国企业为主导的产业链。与此同时,国家有关部门应充分利用加入
WTO初期提供的政策保护手段,从产业政 策、税收政 策和国家采购几个方面给予
有可能形成重大突破性的领域以适当的支持,帮助这些企业将制造优势转化成技
术优势。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 无分类

评论(4) | 阅读(884)
发表于:2006-8-11 20:32:29
标签:秘密  

0

日本的惊人的七大秘密

日本的惊人秘密(一)

 
       我们是洛阳解放军150医院和8410生物研究所的成员,告诉大家一个非常不好的消息,根据我们近3年的研究,发现日本利用基因技术以知名化妆品和食品为主要的媒体来改变我们中国人的基因!?

  中国人普遍文化程度不高,买东西以价格的高低来判断东西好坏,于是不但一直被日本人当作活生生的试验品,还让日本人赚足了钱。比如有一个广告里经常看到的SK-II,小小一支卖价人民币2千3千的,中国女人拿它当宝贝,工资刚发下来就快马加鞭奔向商店,把辛苦一个月的血汗钱送到了日本人的手里。自己收入少一点的,就让老公平时省吃俭用多我违规,举报我!,然后在过生日之类的日子***着老公给她买,好象怕日本人穷,日子过不下去了似的。但是SK-II在德国、瑞士等许多欧盟国家及美国是不许销售的,因为他们发现在SK-II里含有能损害人体本身基因的剧毒成分。?

  在我们经过近3年的详细研究中发现了这种极难察觉的基因哈哈成分,能使我们下一代和下下一代的身体免疫力不断的衰弱,使我们的后代抗疾病的能力变得非常的差。目前我们的生化武器的研究能力还比不上日本,因为日本的731和类似部队很早就拿大量的活人作哈哈试验了,这些活人就是中国老百姓。所以我们希望同胞们一定要注意自身的防范,千万不要使用日本化妆品和食品还有药品,我们的研究报告已经上报中央上级部门了,相信过不了多久就会有措施出台。

  日本的惊人秘密(二)

  大家以后不要上新浪网了,告诉你
http://www.sina.com.cn/
的来历!ZT新浪的控股方竟是日本,怪不得日本人在西大、买春的丑闻新浪网充耳不闻,打灯笼都找不到!许多网友发誓:新浪不更名,永不登录新浪!刚从日本回来的华侨林小姐说:“在日语罗马字里,(sina)就是(支那),是部分日本人对中国带有侮辱性的称呼。这个词,主要是右翼分子在使用。”林小姐说:“在日本的中国人,只要一听到sina这个词,就觉得受到莫大的侮辱。这样一个有歧视性的字眼,怎么可以用做中国人自己的网站的名字呢?”林小姐的家人听后更是感到惊异,因为他们常用新浪免费电子邮箱与日本朋友和客户联系,对方看到中国人自己用“支那”邮箱发信,会不会觉得中国人自己承认是“支那人”呢?北京大学外国语学院日语系教授刘金才查阅了权威典籍,证实“sina”与日文中“支那”的发音完全相同。北京大学、社科院的语言学家和史学家们也证实:“sina”就是“支那”!!!看后要转贴!贴遍祖国大好河管他是不是真的,贴了再说,新浪惨了,不买RH也许没那么容易,但是不上有损民族情感的网站还不容易吗

  日本的惊人秘密(三)

  这是由日本富豪在中国上海将要盖得世界第一高楼,早些天看到了上海要建世界第一高楼,也看到了相关设计图。当时我就傻了,为了证实我的观点,这些天我对照祖上留下的典籍并翻阅了很多相关的风水学古谱(大家别猜疑我是谁,我是干什么的。),结合自己平生所学得到一个结论:第一高楼一旦建成,中国必亡!!!正如很多网友所讲,设计图有如两把军刀穿破大地托起一轮红日(每天每个人每个时刻通过不同的角度可透过中间的圆洞看到太阳......),这些只是大家因历史原因形成的个人意识形态。真正的解是:旱日鱼肚白!上海的地理位置犹如鱼腑,“旱日鱼肚白”本就死***,设计人很阴险,在鱼腑上挑出两拔尖刀,让就在海边的鱼不被烤死,也没有能力回到水中。鱼肚破了,鱼自然不能活。其用心之险恶,决不是善与之辈所为。

  还有很多因素恕我在此不能直言相告。此危急关头,我屏弃个人原则发贴。望斑竹每日拷贝传与大家,望大家奔走相告,为我中华,为我基业,希望政府能有所察觉,不能重导昔日高丽被日寇13颗龙钉钉死龙脉之覆辙.告中华同胞:上海准备建世界第一高楼,很多同胞还不知道是倭奴的全额投资!投资我们欢迎,问题是该楼外形酷似一把军刀,顶端有一50米的太阳标志,倭奴的用意很明显,它就是要把它的狂妄、它的野心再次插入中国人的心脏!!!时时羞辱在它身边走过的每一个中国人!!!还要向世界叫嚣:中国谁最高?唯我大日本!!!这个稍有头脑就能看透的险恶意图,竟然被缺钙的政府层层批准通过并正在踊跃庆贺!!!不知道他们这样做是为什么,可我感到哪天他们会把整个中华民族都出卖掉的!!!联想到世界第一高楼总是和随后的经济危机紧密联系在一起的,实非福兆!!!我感到了另一种刻骨的悲哀!此楼刚好是在陆家嘴的龙脉的正东方,就是风水上说的:炳泉东架笔!金融本身就是属金的,东方属木,所谓克者为用材,正是我违规,举报我!的好地方。正是上海金融区的龙脉走向迎风态势,就是书中所云的卷龙留水口,(正所谓书曰:水曲必有情)正所谓,书云:青龙刀刃入,金枯水止。一旦在这个水口中间用重金的刀刃形建筑劈开,就造成风水中的金刃断曲水格局!但这里妙处就是大楼不会把水路隔断,而是把水流分流到另外的地方,而令到这里的气数向周围散,无法形成陆家嘴这个上海金融区的原先设计规划!而日商在周围“三九”之数的地区低价(相对于陆家嘴的地价)地皮得到分流的龙气影响而兴旺起来,而就可以大大地赚一笔!造摩天大楼的区区一点点钱和这些利润比起来简直就是九牛一毛啦!

  最令人想不到的是,这栋楼上面工作的人都是在一个巨型的金鱼缸里的挡煞金鱼!因为这里要分流龙脉的气,就需要极多的锐气,这栋楼里面工作的人绝大部分都是各个领域里面的精英人物,这样巧妙地利用他们的锐气!(这就是我非常佩服而又不齿日本风水界“九菊一派”的绝妙并且阴毒的风水风格!他们就是以世间万物唯我所用,当然,人也是极其普遍的用法!现在你们明白日本富人为什么喜欢在自己的豪宅养锦鲤了吧!一、挡煞。二、引气。)因为在重金格局里面工作的人受到金的属性影响,这就造成了在这里面工作的人身体不好,非常情绪化!在里面工作的人一旦失败就一跌到低,如果不离开这座建筑影子遮住的地区(就是上海地区)就永无翻身之日!愚人陋见,诸君二十年后便见分

  晓!,是中国人的一定要转发,不能让起盖成!

  日本的惊人秘密(四)

  中国和日本难免一战的!谁还买RH就是在自杀!日本在中国的南方,一直在不停的部署,就是随时准备做好跟中国打杖的准备。所以日本人,在这个事当中,全国都基于这种共识,所以不光日本国防部有这个想法,这个没有什么稀奇,整个日本全国具备这种想法。为什么?我讲两个道理你听听看,他们是否全国皆兵。中国大陆一个河北的石家庄,一个山西的太原跟大同是产煤的地方,你认为最大的买主是谁?日本。其实日本这个国家不烧煤的,你有没有注意到,为什么他大量的向中国采购煤炭呢?其实二、三十年来日本大量不断的向中国采购煤炭,回去以后在日本的下关下船,然后统统用水泥把他封起来,封成一个个石方,然后沉在内部的内海的海底。听说现在已经沉下去半个太原,这个煤炭是准备将来跟中国打仗的时候要用的。公元2015年至2020年,中国跟日本可能开战。这时候中国的核潜艇可能封锁他的太平洋,中国如果那时有航空母舰,可能出动在日本海,日本主力舰如果跟中国不能突转,就把这个煤炭挖起来烧。所以,现在就开始在采购了。所以,中国一船一船的煤向日本去,统统沉在他的海底,不知他心中有什么想法?

  第二件事情,从人造卫星,看下去,整个日本是条绿色的,你知道为什么吗?因为他们的树一棵都不砍。所以在日本砍任何一棵树,都要经过日本政府的许可,因为他们把森林看成重要的资源。可是全日本都用筷子,那怎么办?就中国东北、黑老江、大兴安岭的木材统统日本出口,从乌苏里江送下去,在海参崴整装了以后,向日本外销。所以日本人买的全部是我们东北的木头,买回去以后全部削成筷子,给一亿一千万人口使用。当他们吃完以后,没有一根筷子是丢掉的,全部收起来,再给他磨成纸浆,卖给人民日报印报纸。所以人民日本印报纸的纸浆全部是自己的木头,不过是在日本的嘴巴上面转了一圈。


  中国跟日本100年打一次,19世纪干了场甲午战争,我们输了,20世纪又打了8年抗战,我们又输了,要不是美国丢了两颗原子弹,我真不晓得、真难想像,中国是否要亡国了。我到日本去的时候,你猜他们讲了句什么话?我们是一头野狼,挨了十几拳,死于两颗枪弹,那十几拳就是中国,那两颗枪弹,讲的就是美国,这句话全日本都在讲。我们是一头野狼,挨了十几拳,死于两颗枪弹。这个是他们永远记住的,21世纪跟中国再干一仗。万一又输了,我们中国就22世纪,100年打一次,这件事情全日本都记在心上。我们现在搞经济发展,不承认错误,至少要有这种忧患意识。所以,我觉得美国其实不是中国的心腹大患,美国那个家伙,喜欢当老大,没有事就过来问,你看谁是大哥?那当然是你了,老大!他就说,说得也是!走了,他就走了,你就不要管他了。他对中国没有领土野心。倒是那个小日本就不同了,一碰到的时候就说,日中友好,一边握手,一边在那里磨刀。没有事就嗯搞你一下。所以我们躺在旁边那个日本,我晚上都睡不着觉。那个美国,我坦白讲,我真的无所谓。

  日本出动运输机,支援阿富汗战争,其实那地方挥手的统统是日本军人。那个飞机已经在巴基斯坦,所以日本为了这个事情出动。为什么?做军人就是要常常练习练习,所以日本的军队好久没有打仗了。上一次打了波斯湾战争,日本就想要参战,美国总统就是现在那个小布什的爸爸没有同意。这一次日本人又出动了,这一次他们美国改变了一个方针,允许日本做后勤。所以他们的运输部队,后勤部队就统统出动了。日本实际很想参加前卫部队,希望美国让日本参加,打那个野战。可是美国怎么想,都觉得不太妥当。所以日本的前卫部队到现在没有出动,下次如果世界上再有什么战争,日本兵还希望出兵,来练习练习他的野战部队。其实他们在做打仗的准备,积极地做好跟中国战争的准备,中国是亚洲新列强,日本是亚洲霸权,这两个国家非打一仗不可。不打一仗,不能够了断的。

  后来??发?签订的叫什么条约?割让多少土地?赔偿多少银两?我后来到了日本大阪,才知道他们考这道题目不是这样考的。日本跟中国100年打一次仗,19世纪打了一杖,日清战争,他们叫日清,我们叫甲午战争。20世纪打了一场日中战争,我们叫做八年抗战。21世纪如果日本跟中国开火,你认为大概是什么时候?可能的远因和近因在哪里?如果日本赢了,是赢在什么地方?输了是输在什么条件上?分析。每个学生都努力作答案。结果我们一天到晚研究割让辽东半岛、台湾澎湖,赔偿二万万银两,1894年爆发甲午战争,1895年订马关条约,那又怎么样,反正都赔了嘛!银两都给了所以人家就分析了,日本跟中国很可能在台湾回到中国以后,有一场激战。台湾如果回到中国。中国会把基隆与高雄封锁,台湾海峡就会变成中国的内海,日本的油轮就统统走右边,走中国未来台湾基隆和高雄的右边。这样,会增加日本的运油成本,日本的石油从波斯湾出来跨过印度洋,穿过马六甲海峡,上中国南海,跨台湾海峡进东海,到日本海。这条在日本叫做石油生命线,中国政府如果把台湾海峡锁起来,日本的货轮一定要从那里经过,日本的主力舰和驱逐舰就会出动,中国海军一看到日本出兵,海军马上就会上场,那就打!按照判断,

  公元2015年-2020年,这场战争可能爆发。所以,日本现在统统做了对华抗战的准备,所以什么事情是进入长期状态,他们的情况,现在开始,把这个事情当作是时事,在小心谨慎的在那里准备。按照他们的判断,中国跟日本的摩擦,会从东海开始,从台湾海峡开始,时间判断是2015-2020年,他们的学生统统在开始答了。这种题目在他们那里是这么考虑的,在我们这里是李鸿章伊腾博文,所以这叫做思考,全世界都在研究他们中学的教育,小学的教,都在启发他们思考,而我们就孤独地教条化。

  日本人的秘密(五)

  笔者曾经在某个项目中结识了合作硬件厂商的硬件工程师王先生(化名)。双方合作的非常愉快,一次工作之余,大家去附近的某饭馆吃饭。席间,王先生听见我们无意中议论起齐齐哈尔的毒气泄露事件,于是就说起了在日本的一件逸事。

  当时的王先生刚刚从日本的早稻田大学毕业,进了三菱重工的某个技术研发部门。三菱重工是日本数一数二的企业,王先生对这份工作很满意,所以工作也很卖力。后来有一天,他们去三菱重工的某个厂区做设备测试。那边厂区很大,但有片厂区被封闭了起来,只能看到围墙中厂房很壮观,从外面看,也能看到一些设备。中午吃饭的时候,王先生就向很早就进了公司的日本同事问起那片厂区是生产什么的?那个同事就介绍说,那是个备用厂区,设备主要是用来生产坦克及装甲车底盘的,但设备调试完成后,从来就没有开过工。这个厂区三菱重工每年都要投入很多经费进行设备维护。王先生很奇怪地问:“那这个厂区岂不是年年赔本的?”日本的同事吃惊地看着他,然后告诉王先生:“即使是赔本,三菱重工也要让这片厂区所有的设备保持最佳状态。”那个日本同事是这么解释的:“如果三菱不投入资金保证这个厂房设备时刻处于最佳状态,那么一旦有一天支那人和日本开战的话,日本根本来不及生产那么多武器装备,那么日本就将战败。如果日本战败的话,三菱就是大和民族的罪人。所以无论投入多少钱,三菱都必须这么做。”

  王先生当时触动很大,不久他就放弃了在三菱的工作回到了国内。他在席间对我们说:“当他听了日本的同事说的话,感到自己再也不能为这么一个虎视耽耽敌视中国的企业工作了。从回国的那天起,他就再也没有买过日本生产的东西。倒不是别的原因,只是良心上过不去。”

  故事说完了,没别的意思。只是告诉大家,DZRH,并不是什么经济上的问题,而是生存的问题……

  日本的惊人秘密(六)

  如果我们使用了新干线,就等于救了日本的三菱重工。(虽然主要是东日本铁路作为承办,但三菱重工肯定是主要的承包方)。三菱重工生产了日本自卫队主要的海、陆、空兵器。主要有性能先进的90式坦克、F-2战机等等。特别是目前正在研发的导弹、军用卫星和更先进的F-X战机,更将成为中国的大威胁。

  日本的民族性和地域特点,决定了中日两国的战略利益肯定是相冲突的,而且还有钓鱼岛这个导火索。未来两国究竟是战略合作,还是相互的战略对手,还很难说。就日本的民族性而言,绝对不会屈从于中国的压力。而日本成为军事正常化国家已经成为必然。日中之间的争端,从经济到再到地缘战略,会越来越突显。所以在战略上打压日本是必然要做的事情。而中国这个订单,比全日本铁路总长度加起来还要多好几倍。对于四五百亿对于经营上面临重大压力的三菱重工,无疑是雪中送炭。也就等于挽救了三菱重工,这个日本的重工业支柱性的企业。而三菱重工则是日本右翼团体主要的资助方。从种种角度考虑,我们都不应该把这项计划包给日本人做。

  当然,目前日本方面还有优势。首先是在成本和安全性方面超过法、德对手。而日本成功的新干线控制技术也是我们所需要的。而且,日本方面可以先提供部分贷款。条件诱人,但仔细考虑一下。日本人的算盘也精得很,肯定会向中国索取若干年的铁路管理和运营权,然后再进行技术转让,在此期间因为他们的控制技术是中国人所掌握不了的,所以这就等于控制住了中国北京到上海的大动脉。若干年后再进行技术转让,那时的这种技术我们是否需要也未可知。小泉前段时间说,给中国的经济援助中国人不知道,中国人民也不领情,让日本人民伤心了。其实,中国并不是日本最大的经援国。他在这个时候说这样的话,无疑就是在暗示中国,可能会将京沪铁路建设权与日本给中国的经援捆绑到一起。想给中国来个敲山震虎。我希望中国的高层要看清本质,坚决顶住。说实话,日本给中国的经援,是中日两国表面上友好的支柱之一,日本方面不能,也不敢砍断了这根柱子。主要就是想吓吓中国人,然后给他们在中国的几个主要经济项目打出政府牌罢了。

  而目前的情况好像不太乐观,中国高层好像更倾向于使用日本新干线技术,这是一种在战略上短视的行为。也不符合目前中国应该尊旬的远交近攻的战略思想。希望能够看到这个建议。再让京沪铁路招标的中国高层的具体负责认真的、全盘的考虑一下。然后再做定论为好可是当我翻开资料后,却发现一个很可怕的问题,资料中提到架设新干线的首要条件是必须对新干线所经过的城市,地区,进行彻底的地质勘探在往后翻我发现,这些资料对东京到大阪的东海新干线所经过的地区,乃至周围的地域都进行了详细地分析。线路经过的地点,精确到厘米或更细,周围的地域精确到分米,对整个日本东海地区大到山脉、河床;小到下水道、煤气管道、电信设备;下到地下近千米的地层分析、地质构造,上到该地区的温度、湿度,里到沿途人工隧道,天然洞***,外到植被分布,人口密度等等,无一不精确标示。看到这里我觉得日本人的认真二字就够咱们中国人学习好久了。这还只是日本公布的资料啊,没有公布的一定比这详细百倍。可是仅仅看到这里我就已经是盛夏里出了一身冷汗!!中国的高铁能让日本进行建造吗?

  如果与日本进行合作,必然要向日本提供地质报告,中国可能还不具备如此详细的资料,那就有可能让日本对中国的华北华东地区进行全面的地质地理勘探,即便不由日本勘探,那也必须向日方提供详细资料,如果这样的话,日本不就对中国华东华北地区的地理,地质,人口,工业,环境,军事情报等等了如指掌了吗?这样一来,两国如果世世代代和平相处倒也罢了,可是万一两国交恶,发生战事了那中国如何是好,哪怕中日没有直接冲突,万一日本把资料提供给中国的敌对国了怎么办。这其实就相当于把祖国的大好河山拱手送人啊!到那时,天堑何以为天堑,地势无以为地势,天时地利将尽始,敌人对中国的侵略只会如虎添翼,势如破竹啊!这并不是保守,不是闭关锁国,而为那死去的3000万同胞!!!

  日本的惊人秘密(七)

  回顾中日历史,与其说是一衣带水,倒不如说是一衣带血倒更为贴切。自龙翔三年(公元663年唐高宗时代),日本占领朝鲜锦江口始,中日间就拉开了兵戈相见的序幕(至于那个携大量珍贵文物东渡的汉奸和尚鉴真,不明白历史书上为什么还要对他大加褒扬),明太祖洪武年,肆虐达七十八年之久。万历年,丰臣秀吉出兵二十一万,攻占朝鲜,明大将李如松出兵援朝,在付出较大牺牲后一举击败日本。然而。从那时起,日本的战略家们就已经开始处心积虑地研究和制订灭亡中国的计划。到了近代,甲午战争的惨败彻底暴露了老大帝国的颓弱本质,倭寇的帝国梦,就是那时开始于中华民族的血泊与白骨之中的。

  56年前的8月6日和8月9日,曾经不可一世的日本在屡受挫败后,遭到的真正的天谴。上帝说:伸冤在我,我必报应。果然,那动人心魄的一瞬间的闪光与冲天而起的蘑菇云,让日本人第一次感到了死亡的恐惧。但今天,当废墟再一次成为繁华的大都市的时候,我们看到的是:今天的日本人,爪牙更锋利,气焰更嚣张,而记忆却更差了。在一部叫《漂流街》的电影里,一个爱打乒乓球的中国黑帮老大,曾对日本人说过这样一段话:从前,一个岛上生活着一群猿猴,后来有中国人去教他们写字,猿猴们学会了,但却不懂得字的含义,不懂得什么叫诚实,什么叫善良,什么叫认罪……(大意)

  日本一直流行这这样一种调子,中国并没有战胜日本。的确,面对“8.15”,中国的确不是那么理直气壮。有一篇介绍苏军攻打柏林的文章写到,“巨大的仇恨使苏军进攻柏林时没有溶入丝毫的怜悯,他们动用了所有可以拉到柏林的重武器,而根本不考虑平民的伤亡”。苏军也曾经拒绝一支杀害过卓娅的德军投降,而坚持把他们全部消灭。壮哉!这才是真正的大国之魂!而我们呢,做为战胜国却从未有过一兵一卒踏上过日本的领土,与量浴血奋战的国民党高级将领们,却作为内战的牺牲品与昔日的敌人同处牢狱。据我所知,全国各地的纪念内战的纪念馆要远比抗日的纪念馆数量多,规模也大得多。政府对日本宽厚,一来只是目光短浅的只考虑短期的国际形式,二来无非因为日本自78年以来给中??想过,与这些低三下四争来的贷款相比,马关条约赔出去的二万万两白银价值几许?仅仅8年抗战中中国600多亿美元的财产损失价值几许?永难重生的文物古迹,自然资源价值几许?而千年来无数在对日战争中牺牲的中国军民的冤魂,一个拥有12亿人口的东方大国的民族尊严又价值几许?!

  总是有人对日本报有幻想,“军国主义是一小部分,广大日本人民对中国是友好的”的声音不时响起,奴才的腔调,自上而发。看过日本兵出征前在街上请路人给他们的吉祥物上缝一针以祈求平安吉祥的资料片吗?看过那些身穿和服的年轻女子,在疯狂地叫喊着反华的口号的资料片吗?看看吧,你可以知道“广大日本人民”的真实嘴脸。中国的一艘考察船去钓岛附近探了一下.随之而来的是日本外交部的警告:未经日本政府允许不得进入日本领海。日本青年纷纷要求与中国一战。日本人对中国的敌意,是全民族的,是发自骨子里的。今天小泉的种种行径,每个中国人都看在眼里,不需冗言。小泉,不仅仅代表他自己,他是两亿日本人一票一票选出来的!日本人聪明、勇敢、坚忍、团结,但他们更变态、畸形、极端、怪异(这些贬义词并非凭空捏造,如果你领略过那些深受日本人喜爱的病态的艺术,你就会感受到,日本人性最深处的丑陋与邪恶),这样一群有着人的思维的高级禽兽,要远比头脑简单,只是知道嗜血的豺狼可怕的多。

  中华民族,不是狭隘的种族,在她的怀抱中,56个民族能够亲密无间,和睦相处;中国人,更不是狭隘的民族主义者,我们在全世界有这数不清的不同语言,不同肤色的朋友。但唯一的例外,就是太平洋上的四个小岛,那里生活着地球上最凶残与可怕的动物,中华民族永远的心腹之患。中日世仇,不共戴天!每一个中国人永远都不应该忘记日本曾经对我们做过什么!对于一个应该在地球上消失的种群,对于一个人人可以诛之的国家,对于一个极端变态的民族,我们永远也不要再对他们抱有丝毫幻想。抗战期间的一首小诗,叫做《假如我们不去打仗》:假如我们不去打仗/那么敌人杀死了我们/还要用刺刀指着我们的骨头说/看哪,这是奴隶!


  中日之间,没有任何友谊可言,有的只有连绵千年的仇恨!先辈的英灵,每天都在半空中凝视我们这些至今依然无所作为的不肖的子孙,他们焦虑,他们失望……但我们忍耐终将会有尽头,厉兵秣马,做好准备吧,犯强汉者,虽远必诛!浑浊的小泉,永远也别想再一次兴风作浪!“巨浪”和“东风”就是我们的怒吼,我们期待着,铭刻着中国制造的蘑菇云再次生起,在东京,在京都,在大版,在每一个孳生着量艿巢***。中华民族的千年梦魇,永远沉入太平洋底,累劫不复超生!也许很快,也许还要等很久,但血债必用血来!大直若屈,大巧若拙,大辩若讷。

  静胜躁,寒胜热。清静为天下正怎么办呀?怎么办呀?愁呀,


  我知道了,我知道


  可是有好多人不知道
 
     
      大家说该怎么办?
      
     
      我们不是战争狂!但我们也决不怕战争!
 
      
      该拔剑时就拔剑!
 
 
      但是,国人必须清醒!!!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 无分类

评论(2) | 阅读(696)
发表于:2006-8-10 19:25:08
标签:无标签

1

考研政治80分独门绝技:注重效率!

我和大家谈谈我的考验政治经验:

    06年参加的考试,考了80。经验如下:

    1) 我的政治是大约9月初的时候才开始看的,开始不知道看什么书。先去买了一本陈先亏的那本厚厚的什么《标准辅导全书》。回来看了一遍,大呼上当,尤其是他们广告上宣传的那个mp3,开始的时候更本就不能下载,后来大约10月的时候的终于能下载了,我当时真是很高兴的去下载,下下来一听就生气,根本就是在念那本书,而且念的那个差啊,就别提了。我觉得小学生都比他们读的好,根本就是骗人吗!(他们动不动就读错!你说可气不!根本就是没有职业道德)我当时就想给陈先亏打个电话把他骂一顿。幸亏没有被我弄到他的电话。

    所以我建议大家千万不要买他编的书,想买也没有关系,那就等着后悔吧。

    2) 至于书的选择,我还是觉得教育部考试中心的《大纲解析》比较好,毕竟人家是权威的出题部门,书薄厚合适,内容也权威。其他的资料基本都是变相抄人家的。

    其他的资料大家可以看看上届大家都推崇的那些书:比如后期的导航的那本小册子《2020题》和一些大家都认可的比较好的模拟题。

    但有一点我告诉大家:就是不要买那种厚的和砖头似的那种书,有人说那样的书全,废话!不全才怪!考研复习最重要的是重点突出,举一反三,事半功倍,不是比书厚!

    3) 买一本合适的书看上多多遍,这才是对付政治的不二法则。有人能把红宝书看10多遍,我没有达到,我只把我的所有资料看了可能有45遍吧,不过我觉得还是少了点。反正尽量的反复的看。所谓:书读百遍其意自见!绝对是真理,不要想你一遍就能完全看懂记住。莫非你是神仙?

    其实看很多遍并不是要用很多时间的!开始的时候(10月前)我只是在看数学,英语看累的时候拿政治当放松,有时候睡觉前看的看的就睡着了,基本这样就能看个23遍。这样基本主干你就了解了,然后在10月后,每天用2个小时左右时间重点突破就可以了!只要你的复习方法对路,资料合适,前期看过个几遍,后期的政治绝对是可以在一个月内可以突破的课程。

    4)不要相信什么密押题啊什么的,如果你把宝全押在他们身上,你就等来年再考一次吧,这次估计你基本没有什么希望了。不过在全面复习的基础上,看看这些题还是没有什么坏处的。

    5)再说说考研辅导班。我11月的时候参加过一个任汝芬的冲刺班,因为我觉得自己政治基本没有怎么好好看,所以有些不放心就去参加了一个。应该说是有些收获吧,但绝没有象宣传的那么的大。后来听课中老师给我们宣传什么最后点睛班,看大家都去报了,我就也跟着报了一个,基本觉得是上当。现在想来,如果大家不放心就报一个冲刺班就可以了,其他的基本没有必要!不要去还报什么全程班啊点题班啊什么的,那纯粹是浪费钱。

    6)再是另外就是现在看政治还有些早,等到了89月再说,还是先突破英语和数学吧,他们才是考研的关键!如果不放心就在复习英语和数学累了后看,这样不浪费时间而且有效率!

    最后和大家说一下,我是重61日才开始看书考研的,除去周六周日和节假日(基本都被迫和女朋友出去了逛街了)。每天大约看6小时,注意!我说的是有效率时间,好多人以为坐到教室里就算学习了,那是大错特错了!看书的目的只有一个就是看会!在教室里发呆还不如出去玩!

    最后的成绩还行(政治80,数学137,英语55),主要是效率比较高。我说的目的是提醒大家注重效率!时刻记住学习的目的只有一个就是学会!其他的什么方法不重要!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 无分类

评论(1) | 阅读(490)
发表于:2006-8-10 19:13:56
标签:MFC  消息  

3

MFC消息映射与消息传递内幕

                 MFC消息映射与消息传递内幕

 ////////////////////////////////////////////////////////////////////////////////////
                     /********* 文章系列:MFC技术内幕系列***********/
                     /************MFC技术内幕系列之(四)***********/
                     /*****文章题目:MFC消息映射与消息传递内幕******/
                     /*                     Copyright(c)2002 bigwhite                    */
                     /*                            All rights Reserved                        */
                     /   *********关键字:消息映射,消息传递************/
                     /*                              时间:2002.7.23                        */
                     /*      注释:本文所涉及的程序源代码均在Microsoft   */
                     /           Visual Studio.Net Enterprise Architect Edition       /
                     /*                   开发工具包提供的源代码中                  */
                    
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
引言:
    Windows操作系统是以消息为基础,事件驱动的。作为程序员了解操作系统的消息传递机制是非常必要的。Microsoft的MFC又它自己的一套支持Windows操作系统消息机制的技术--消息映射(Message Mapping)和命令传递(Command Routing),在这篇文章中我就详细的挖掘一下MFC的消息映射技术以及命令传递技术。

正文:
                       ///////////////////////////////////////////////
                       /*     1.Windows消息概览      */
                       //////////////////////////////////////////////
    对于消息,程序员应该不陌生。WM_CREATE,WM_PAINT等等都是Windows程序设计中必不可缺少的组成部分。大多有关MFC Win32编程的书籍都将Windows消息分为三大类即:
    * 标准消息:   任何以WM_开头的消息(WM_COMMAND除外);如:WM_QUIT,WM_CREATE;
    * 命令消息:   WM_COMMAND;
    * 子窗口通知: 由子窗口(大多为控件)产生并发送到该控件所属的父窗口的消息。(注意:此类消息也                    以WM_COMMAND形式出现)
    消息类型我们已经了解了,下面我们就来看看消息映射是如何工作的:
                       //////////////////////////////////////////////////////
                       /*  2.MFC消息映射网的组成元素 */
                       //////////////////////////////////////////////////////   
   我的前几篇文章中涉及到了MFC内部建立的一些“网”技术,比如“执行期类型识别网”等,这回我们将建立一个消息映射网,这个网的建立与前面相同的是它也利用了一些神秘的宏。下面我们就来掀开它们的神秘面纱。
   我们先简单地看看这些宏在程序源文件中的什么地方?
   //in xx.h
   class theClass
  {
      ...//
     DECLARE_MESSAGE_MAP()
   };
   //in xx.cpp
   BEGIN_MESSAGE_MAP(theClass, baseClass)
 ON_COMMAND( ID_MYCMD, OnMyCommand )
        ON_WM_CREATE()
   END_MESSAGE_MAP()
   ...//
  
   这些宏的定义如下:
   //in Afxwin.h
   #define DECLARE_MESSAGE_MAP() \
   private: \
 static const AFX_MSGMAP_ENTRY _messageEntries[]; \
   protected: \
 static const AFX_MSGMAP messageMap; \
 static const AFX_MSGMAP* PASCAL GetThisMessageMap(); \
 virtual const AFX_MSGMAP* GetMessageMap() const; \

   #define BEGIN_MESSAGE_MAP(theClass, baseClass) \
 const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \
  { return &theClass::messageMap; } \
 const AFX_MSGMAP* theClass::GetMessageMap() const \
  { return &theClass::messageMap; } \
 AFX_COMDAT const AFX_MSGMAP theClass::messageMap = \
 { &baseClass::GetThisMessageMap, &theClass::_messageEntries[0] }; \
 AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
 { \

   #define END_MESSAGE_MAP() \
  {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
 }; \
   DECLARE_MESSAGE_MAP()宏为每个类添加了四个东东,包括那个重要的消息映射表messageMap和消息入口结构数组AFX_MSGMAP_ENTRY _messageEntries[];BEGIN_MESSAGE_MAP(theClass, baseClass)和END_MESSAGE_MAP()宏则初始化了它们,随后我将带领大家看看这个初始化过程。

                       ///////////////////////////////////////////////
                       /*      3.MFC消息映射表       */
                       //////////////////////////////// //////////////
   下面我们看看消息映射表messageMap和消息入口结构AFX_MSGMAP_ENTRY的定义:
 //in Afxwin.h
 struct AFX_MSGMAP_ENTRY
 {
 UINT nMessage;   // windows message
 UINT nCode;      // control code or WM_NOTIFY code
 UINT nID;        // control ID (or 0 for windows messages)
 UINT nLastID;    // used for entries specifying a range of control id's
 UINT_PTR nSig;   // signature type (action) or pointer to message #
 AFX_PMSG pfn;    // routine to call (or special value)
 };


 struct AFX_MSGMAP
 {
 #ifdef _AFXDLL
 const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();//基类的映射表指针,本程序将使用
 #else
 const AFX_MSGMAP* pBaseMap;
 #endif
 const AFX_MSGMAP_ENTRY* lpEntries;
 };
 
  其中AFX_MSGMAP结构中包含一个基类的映射表指针和一个指向消息入口结构AFX_MSGMAP_ENTRY的指针。

                       /////////////////////////////////////////////////
                       /*    4.MFC消息映射宏展开     */
                       /////////////////////////////////////////////////

  上面的宏展开后代码如下:(以CMaimFrame为例)
   //in MaimFrm.h
   class CMaimFrame : public CFrameWnd
  {
    ...//
    private:
        static const AFX_MSGMAP_ENTRY _messageEntries[];
    protected:
 static const AFX_MSGMAP messageMap;
 static const AFX_MSGMAP* PASCAL GetThisMessageMap();
 virtual const AFX_MSGMAP* GetMessageMap() const;
  };
  //in MaimFrm.cpp
    const AFX_MSGMAP* PASCAL CMaimFrame::GetThisMessageMap()
  { return &CMaimFrame::messageMap; }
    const AFX_MSGMAP* CMaimFrame::GetMessageMap() const
  { return &CMaimFrame::messageMap; }
    AFX_COMDAT const AFX_MSGMAP theClass::messageMap =
 { &CFrameWnd::GetThisMessageMap, &CMaimFrame::_messageEntries[0] };
    AFX_COMDAT const AFX_MSGMAP_ENTRY CMaimFrame::_messageEntries[] =
        {
          {         ...//                      }
                    ...
          {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
 };
   相信大家看了后大多源代码都能够理解,但是AFX_MSGMAP_ENTRY结构还是能够引起我们的兴趣的。下面让我们看看_messageEntries[]是如何被初始化的:
   我们还是举例来说明吧!(还是CMainFrame为例吧)
   BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 ON_WM_CREATE()
        ON_COMMAND( ID_MYCMD, OnMyCommand )
   END_MESSAGE_MAP()
  
   大家看到了夹在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间的宏,这些宏可分为基类,一类是Windows预定义消息宏(比如:ON_WM_CREATE(),ON_WM_DESTROY()等定义在afxmsg_.h中的Message map tables for Windows messages),一类是自定义的ON_COMMAND宏以及类似的如ON_UPDATE_COMMAND_UI等宏 。
   //in afxmsg_.h
   // Message map tables for Windows messages
   #define ON_WM_CREATE() \
 { WM_CREATE, 0, 0, 0, AfxSig_is, \
  (AFX_PMSG) (AFX_PMSGW) \
  (static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT) > (OnCreate)) },
 
   #define ON_COMMAND(id, memberFxn) \
 { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_v, \
  static_cast<AFX_PMSG> (memberFxn) },

   AFX_MSGMAP_ENTRY结构初始化过程:
   AFX_COMDAT const AFX_MSGMAP_ENTRY CMaimFrame::_messageEntries[] =
        {
          { WM_CREATE, 0, 0, 0, AfxSig_is,
  (AFX_PMSG) (AFX_PMSGW)
              (static_cast< int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT) > (OnCreate)) },
          { WM_COMMAND, CN_COMMAND, (WORD)ID_MYCMD, (WORD)ID_MYCMD, AfxSigCmd_v, \
  static_cast<AFX_PMSG> ( OnMyCommand) },       
          {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
 };
   现在一切都清楚了吧!

                       //////////////////////////////////////////////////
                       /*    5.MFC消息映射网的连接   */
                       //////////////////////////////////////////////////
   MFC消息映射网的连接也是在初始化过程中完成的,其建立过程很简单。主要有关成员有:
   private:
        static const AFX_MSGMAP_ENTRY _messageEntries[];
   protected:
 static const AFX_MSGMAP messageMap;
   和BEGIN_MESSAGE_MAP()宏开后的
   AFX_COMDAT const AFX_MSGMAP theClass::messageMap =
 { &baseClass::GetThisMessageMap, &theClass::_messageEntries[0] };
   该宏将pfnGetBaseMap赋值为其基类的messageMap地址;将AFX_MSGMAP_ENTRY* lpEntries赋值为该类的
_messageEntries[0];
   这样一个类不仅拥有本类的messageMap,而且还拥有其基类的messageMap,依此类推MFC消息映射网的连接
就建立了,最终的基类都是CCmdTarget

                       //////////////////////////////////////////////////
                       /*    6.MFC命令传递机制概述   */
                       //////////////////////////////////////////////////
   有了MFC消息映射网就为命令传递打下了坚实的基础。Win32API程序员都熟悉传统的API编程都有一个
WndProc回调函数来集中处理各种的Windows消息,然而在MFC中我们却怎么也看不见WndProc回调函数的踪影了。而MFC命令传递机制恰是为了将各种消息“拐弯抹角”地送到各个对应的"WndProc"函数的一种技术。MFC是如何将各种Windows消息准确的送到期该区的地方呢? MFC使用了钩子函数等技术来保证其准确性和全面性。
   不知大家是否还记得MFC在注册窗口类时作了什么?
   BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)//部分源代码
  {
        ...//
        // common initialization
 WNDCLASS wndcls;
 memset(&wndcls, 0, sizeof(WNDCLASS));   // start with NULL defaults
 wndcls.lpfnWndProc = DefWindowProc;
 ...//
   }
  可以看到MFC注册时将wndcls.lpfnWndProc赋值为DefWindowProc函数,那么实际上是否消息都是由它处理的呢?显然不可能,MFC又不知道我们要处理什么消息。那么还有什么函数能帮我们处理消息呢?这就是我要讲的;  在MFC技术内幕系列之(二)----《 MFC文档视图结构内幕》中曾提到“CWnd::CreateEx函数调用了AfxHookWindowCreate(this);后者是干什么的呢?其实它与消息映射和命令传递有关。”
   实际上MFC命令传递机制就是从这里AfxHookWindowCreate(this)开始的。还是老办法看看代码吧:
 //in wincore.cpp
 void AFXAPI AfxHookWindowCreate(CWnd* pWnd)
 {
 ...//
 if (pThreadState->m_hHookOldCbtFilter == NULL)
 {
  pThreadState->m_hHookOldCbtFilter = ::SetWindowsHookEx(WH_CBT,
   _AfxCbtFilterHook, NULL, ::GetCurrentThreadId());
  if (pThreadState->m_hHookOldCbtFilter == NULL)
   AfxThrowMemoryException();
 }
 ...//
 }
  该函数设置了消息钩子,其钩子处理函数为_AfxCbtFilterHook;这里简介一下钩子函数:
  用我的理解,钩子就是能给你一个在某个消息到达其默认的处理函数之前处理该消息机会的工具。
与钩子有关的函数主要有三个:
HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId );
LRESULT CallNextHookEx(HHOOK hhk,  int nCode,    WPARAM wParam,   LPARAM lParam  );
BOOL UnhookWindowsHookEx( HHOOK hhk   // handle to hook procedure);
关于这三个函数我也不想多解释,大家看看MFC有关文档吧!这里主要讲的是在AfxHookWindowCreate(CWnd* pWnd)中注册的钩子函数的类型(hook type)--WH_CBT;
有关WH_CBT,MFC文档时如是说的:
  Installs a hook procedure that receives notifications useful to a computer-based training (CBT) application. The system calls this function(这里指的是_AfxCbtFilterHook) before activating, creating, destroying, minimizing, maximizing, moving, or sizing a window; before completing a system command; before removing a mouse or keyboard event from the system message queue; before setting the keyboard focus; or before synchronizing with the system message queue. A computer-based training (CBT) application uses this hook procedure to receive useful notifications from the system.
 
                       /////////////////////////////////////////////
                       /*    7.偷换“窗口函数”      */
                       /////////////////////////////////////////////

   这会知道了吧,当发生窗口(包括子窗口)发生被激活,创建,撤销,最小化等时候,应用程序将调用
_AfxCbtFilterHook函数;下面就让我们看看_AfxCbtFilterHook函数做了个啥:
 //in wincore.cpp
// Window creation hooks
 LRESULT CALLBACK _AfxCbtFilterHook(int code, WPARAM wParam, LPARAM lParam)
 {
 _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
 if (code != HCBT_CREATEWND)
 {
  // wait for HCBT_CREATEWND just pass others on...
  return CallNextHookEx(pThreadState->m_hHookOldCbtFilter, code,
   wParam, lParam);
 }

 ...//   CWnd* pWndInit = pThreadState->m_pWndInit;
  HWND hWnd = (HWND)wParam;
  WNDPROC oldWndProc;
  if (pWndInit != NULL)
  {
                 #ifdef _AFXDLL
   AFX_MANAGE_STATE(pWndInit->m_pModuleState);
                 #endif

   // the window should not be in the permanent map at this time
   ASSERT(CWnd::FromHandlePermanent(hWnd) == NULL);

   // connect the HWND to pWndInit...
   pWndInit->Attach(hWnd);
   // allow other subclassing to occur first
   pWndInit->PreSubclassWindow();//***

   WNDPROC *pOldWndProc = pWndInit->GetSuperWndProcAddr();
   ASSERT(pOldWndProc != NULL);

   // subclass the window with standard AfxWndProc
   WNDPROC afxWndProc = AfxGetAfxWndProc();//***
   oldWndProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC,
    (DWORD_PTR)afxWndProc);//***
   ASSERT(oldWndProc != NULL);
   if (oldWndProc != afxWndProc)
    *pOldWndProc = oldWndProc;

   pThreadState->m_pWndInit = NULL;
  }
 ...//
 lCallNextHook:
 LRESULT lResult = CallNextHookEx(pThreadState->m_hHookOldCbtFilter, code,
  wParam, lParam);

 #ifndef _AFXDLL
 if (bContextIsDLL)
 {
  ::UnhookWindowsHookEx(pThreadState->m_hHookOldCbtFilter);
  pThreadState->m_hHookOldCbtFilter = NULL;
 }
 #endif
 return lResult;
 }

 void CWnd::PreSubclassWindow()
{
 // no default processing
 }
 
 // always indirectly accessed via AfxGetAfxWndProc
 WNDPROC AFXAPI AfxGetAfxWndProc()
 {
 #ifdef _AFXDLL
 return AfxGetModuleState()->m_pfnAfxWndProc;
 #else
 return &AfxWndProc;
 #endif
 }

  原来_AfxCbtFilterHook函数偷换了窗口函数,将原来的DefWndProc换成AfxWndProc函数.
                       ////////////////////////////////////////////////////
                       /*   8.MFC的“WndProc”函数   */
                       ////////////////////////////////////////////////////
   AfxWndProc函数就可以说是MFC的“WndProc”函数,它也是MFC中消息传递的开始,其代码如下:
//in wincore.cpp
// The WndProc for all CWnd's and derived classes
LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
 // special message which identifies the window as using AfxWndProc
 if (nMsg == WM_QUERYAFXWNDPROC)
  return 1;

 // all other messages route through message map
 CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
 ASSERT(pWnd != NULL);
 ASSERT(pWnd->m_hWnd == hWnd);
 return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
}

// Official way to send message to a CWnd
LRESULT AFXAPI AfxCallWndProc(CWnd* pWnd, HWND hWnd, UINT nMsg,
 WPARAM wParam = 0, LPARAM lParam = 0)
{
 _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
 MSG oldState = pThreadState->m_lastSentMsg;   // save for nesting
 pThreadState->m_lastSentMsg.hwnd = hWnd;
 pThreadState->m_lastSentMsg.message = nMsg;
 pThreadState->m_lastSentMsg.wParam = wParam;
 pThreadState->m_lastSentMsg.lParam = lParam;
         ...//
       // in debug builds and warn the user.
 LRESULT lResult;
 TRY
 {
#ifndef _AFX_NO_OCC_SUPPORT
  // special case for WM_DESTROY
  if ((nMsg == WM_DESTROY) && (pWnd->m_pCtrlCont != NULL))
   pWnd->m_pCtrlCont->OnUIActivate(NULL);
#endif
               // special case for WM_INITDIALOG
  CRect rectOld;
  DWORD dwStyle = 0;
  if (nMsg == WM_INITDIALOG)
   _AfxPreInitDialog(pWnd, &rectOld, &dwStyle);

  // delegate to object's WindowProc
  lResult = pWnd->WindowProc(nMsg, wParam, lParam);//***

  // more special case for WM_INITDIALOG
  if (nMsg == WM_INITDIALOG)
   _AfxPostInitDialog(pWnd, rectOld, dwStyle);
 }
 CATCH_ALL(e)
 {
  ...//
 }
 END_CATCH_ALL

 pThreadState->m_lastSentMsg = oldState;
 return lResult;
}

// main WindowProc implementation
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // OnWndMsg does most of the work, except for DefWindowProc call
 LRESULT lResult = 0;
 if (!OnWndMsg(message, wParam, lParam, &lResult))
  lResult = DefWindowProc(message, wParam, lParam);
 return lResult;
}

BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
 LRESULT lResult = 0;
 union MessageMapFunctions mmf;
 mmf.pfn = 0;
        // special case for commands
 if (message == WM_COMMAND)
 {
  if (OnCommand(wParam, lParam))
  {
   lResult = 1;
   goto LReturnTrue;
  }
  return FALSE;
 }
        // special case for notifies
 if (message == WM_NOTIFY)
 {
  NMHDR* pNMHDR = (NMHDR*)lParam;
  if (pNMHDR->hwndFrom != NULL && OnNotify(wParam, lParam, &lResult))
   goto LReturnTrue;
  return FALSE;
 }
        ...//
        const AFX_MSGMAP* pMessageMap; pMessageMap = GetMessageMap();
 UINT iHash; iHash = (LOWORD((DWORD_PTR)pMessageMap) ^ message) & (iHashMax-1);
 AfxLockGlobals(CRIT_WINMSGCACHE);
 AFX_MSG_CACHE* pMsgCache; pMsgCache = &_afxMsgCache[iHash];
 const AFX_MSGMAP_ENTRY* lpEntry;
 if (message == pMsgCache->nMsg && pMessageMap == pMsgCache->pMessageMap)
 {
  // cache hit
  lpEntry = pMsgCache->lpEntry;
  AfxUnlockGlobals(CRIT_WINMSGCACHE);
  if (lpEntry == NULL)
   return FALSE;

  // cache hit, and it needs to be handled
  if (message < 0xC000)
   goto LDispatch;
  else
   goto LDispatchRegistered;
 }
 else
 {
  // not in cache, look for it
  pMsgCache->nMsg = message;
  pMsgCache->pMessageMap = pMessageMap;

  #ifdef _AFXDLL
  for (/* pMessageMap already init'ed */; pMessageMap->pfnGetBaseMap != NULL;
   pMessageMap = (*pMessageMap->pfnGetBaseMap)())
  #else
  for (/* pMessageMap already init'ed */; pMessageMap != NULL;
   pMessageMap = pMessageMap->pBaseMap)
  #endif
  {
   // Note: catch not so common but fatal mistake!!
   //      BEGIN_MESSAGE_MAP(CMyWnd, CMyWnd)
  #ifdef _AFXDLL
   ASSERT(pMessageMap != (*pMessageMap->pfnGetBaseMap)());
  #else
   ASSERT(pMessageMap != pMessageMap->pBaseMap);
  #endif

   if (message < 0xC000)
   {
    // constant window message
    if ((lpEntry = AfxFindMessageEntry(pMessageMap->lpEntries,
     message, 0, 0)) != NULL)
    {
     pMsgCache->lpEntry = lpEntry;
     AfxUnlockGlobals(CRIT_WINMSGCACHE);
     goto LDispatch;
    }
   }
   else
   {
     // registered windows message
           lpEntry = pMessageMap->lpEntries;
   while ((lpEntry = AfxFindMessageEntry(lpEntry, 0xC000, 0, 0)) != NULL)
    {
     UINT* pnID = (UINT*)(lpEntry->nSig);
     ASSERT(*pnID >= 0xC000 || *pnID == 0);
      // must be successfully registered
     if (*pnID == message)
     {
      pMsgCache->lpEntry = lpEntry;
      AfxUnlockGlobals(CRIT_WINMSGCACHE);
      goto LDispatchRegistered;
     }
     lpEntry++;      // keep looking past this one
    }
   }
  }

  pMsgCache->lpEntry = NULL;
  AfxUnlockGlobals(CRIT_WINMSGCACHE);
  return FALSE;
 }
   LDispatch:
 ASSERT(message < 0xC000);

 mmf.pfn = lpEntry->pfn;

 switch (lpEntry->nSig)
 {
 default:
  ASSERT(FALSE);
  break;

 case AfxSig_b_D_v:
  lResult = (this->*mmf.pfn_b_D)(CDC::FromHandle(reinterpret_cast<HDC>(wParam)));
  break;
        ...//
  LDispatchRegistered:    // for registered windows messages
 ASSERT(message >= 0xC000);
 ASSERT(sizeof(mmf) == sizeof(mmf.pfn));
 mmf.pfn = lpEntry->pfn;
 lResult = (this->*mmf.pfn_l_w_l)(wParam, lParam);

  LReturnTrue:
 if (pResult != NULL)
  *pResult = lResult;
 return TRUE;
 }
   该源代码有整整700行,不知道是不是MFC源码中最长的一个函数,在这里我只列出部分有代表性的源码。从源代码中大家也可以看得出该函数主要用于分辨消息并将消息交于其处理函数。MFC为了加快消息得分检速度在AfxFindMessageEntry函数中甚至使用了汇编代码。
在CWnd::OnWndMsg中得不到处理的消息则交给CWnd::DefWindowProc(相当于MFC的默认DefWindowProc函数)处理,其代码为:
 // Default CWnd implementation
 LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
 {
 if (m_pfnSuper != NULL)
  return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);

 WNDPROC pfnWndProc;
 if ((pfnWndProc = *GetSuperWndProcAddr()) == NULL)
  return ::DefWindowProc(m_hWnd, nMsg, wParam, lParam);
 else
  return ::CallWindowProc(pfnWndProc, m_hWnd, nMsg, wParam, lParam);
 }
  CWnd::DefWindowProc这调用了传统win32程序员熟悉的::DefWindowProc(m_hWnd, nMsg, wParam, lParam);
在挖掘上面源代码的同时你也看到了消息的传递路线。在MFC中CWnd以及派生于CWnd的类都拥有虚函数
CWnd::WndProc(...)。
 
                       /////////////////////////////////////////////////////
                       /* 9.MFC各类消息的"行走路径 " */
                       /////////////////////////////////////////////////////
   在篇头我就将消息分了类而且到目前我们已经了解了消息的传递机制了,下面我就具体的某类消息来看看其传递路径。
   无论什么消息都有AfxWndProc进入,到达CWnd::OnWndMsg函数分检消息;
   对于标准消息:
       标准消息一般都沿其消息映射表从本类到父类逐层查找其处理函数,若没查到着交给::DefWindowProc        处理。
   对于命令消息:
       命令消息除了能像标准消息一样从本类到父类逐层查找其处理函数外,有时他们可能还要拐弯。
       再回头看看CWnd::OnWndMsg源码是如何处理WM_COMMAND消息的:
        if (message == WM_COMMAND)
 {
  if (OnCommand(wParam, lParam))
  {
   lResult = 1;
   goto LReturnTrue;
  }
  return FALSE;
 }
        原来交给了CWnd::OnCommand(wParam, lParam)
        下面看看一个SDI程序中命令消息在Frame,View,Document以及CWinApp对象之间的传递路线。
        //in winfrm.cpp
        BOOL CFrameWnd::OnCommand(WPARAM wParam, LPARAM lParam)
 // return TRUE if command invocation was attempted
       {
 HWND hWndCtrl = (HWND)lParam;
 UINT nID = LOWORD(wParam);

 CFrameWnd* pFrameWnd = GetTopLevelFrame();
 ASSERT_VALID(pFrameWnd);
 if (pFrameWnd->m_bHelpMode && hWndCtrl == NULL &&
  nID != ID_HELP && nID != ID_DEFAULT_HELP && nID != ID_CONTEXT_HELP)
 {
  // route as help
  if (!SendMessage(WM_COMMANDHELP, 0, HID_BASE_COMMAND+nID))
   SendMessage(WM_COMMAND, ID_DEFAULT_HELP);
  return TRUE;
 }

 // route as normal command
 return CWnd::OnCommand(wParam, lParam);
        }
       
        //in wincore.cpp
        // CWnd command handling
        BOOL CWnd::OnCommand(WPARAM wParam, LPARAM lParam)
 // return TRUE if command invocation was attempted
       { ...//
         return OnCmdMsg(nID, nCode, NULL, NULL);//CFrameWnd::OnCmdMsg
       }
      
      // CFrameWnd command/message routing
       BOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra,
 AFX_CMDHANDLERINFO* pHandlerInfo)
      {
 CPushRoutingFrame push(this);

 // pump through current view FIRST
 CView* pView = GetActiveView();
 if (pView != NULL && pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // then pump through frame
 if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // last but not least, pump through app
 CWinApp* pApp = AfxGetApp();
 if (pApp != NULL && pApp->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 return FALSE;
       }
       Frame的COMMAND传递顺序是View--->Frame本身-->CWinApp对象。
       
       //in viewcore.cpp
       BOOL CView::OnCmdMsg(UINT nID, int nCode, void* pExtra,
 AFX_CMDHANDLERINFO* pHandlerInfo)
      {
 // first pump through pane
 if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // then pump through document
 if (m_pDocument != NULL)
 {
  // special state for saving view before routing to document
  CPushRoutingView push(this);
  return m_pDocument->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
 }

 return FALSE;
      }
      View的COMMAND传递顺序是View本身--->Document

     //in doccore.cpp
     BOOL CDocument::OnCmdMsg(UINT nID, int nCode, void* pExtra,
 AFX_CMDHANDLERINFO* pHandlerInfo)
     {
 if (CCmdTarget::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // otherwise check template
 if (m_pDocTemplate != NULL &&
   m_pDocTemplate->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;</