??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品中文字幕久久,国产精品一久久香蕉国产线看
,久久青青草原精品国产不卡http://www.shnenglu.com/wlwlxj/category/2266.html<div>一个吃软饭的男?!!!!我只惛_E序####<br>师夷之技以制? 向ְl日而思矣,不如臾之所学也<br>喝碗孟婆?t过奈何?涅槃</div>
I've been programming since I was 21. Started with C++, looked at Java, keen on Visual Basic and Visual C++, thinking about .NET and C#.^_^,very ridiculous.zh-cnTue, 20 May 2008 12:08:04 GMTTue, 20 May 2008 12:08:04 GMT60VC8中MFC集成ATLlg注册时注意的一个问?/title>http://www.shnenglu.com/wlwlxj/archive/2008/02/26/43247.html万连?/dc:creator>万连?/author>Tue, 26 Feb 2008 03:49:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2008/02/26/43247.htmlhttp://www.shnenglu.com/wlwlxj/comments/43247.htmlhttp://www.shnenglu.com/wlwlxj/archive/2008/02/26/43247.html#Feedback0http://www.shnenglu.com/wlwlxj/comments/commentRss/43247.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/43247.html׃VC8生成MFCE序时候如果选择创徏solutionQexe不在本目录的debug目录下,而是在solution的debug目录下。当加入atl支持时候,生成的tlb却在本目录的debug下。此时类型库注册需要手工执行:%exe路径% -RegServer。此Ӟ如果tlb不在exel一目录Q注册是p|的。所以一定要拯到当前目录再注册?
if (m_nHtmlResID) LoadFromResource(m_nHtmlResID); else if (m_szHtmlResID) LoadFromResource(m_szHtmlResID); else if (m_strCurrentUrl) Navigate(m_strCurrentUrl);
初识MFC 我最初知道MFC大概是在1993q_那个时候Visual C++q没面世Q当时Microsoft的C++~译器还很弱Q官方的名字是Microsoft C/C++ 7.0QMFC的版本是1.0Q几乎没有引起什么反响,那个时期最好的C++开发环境是Borland C++ 3.1Q其实,大概?992q?1月䆾Q一个偶然的ZQ我领略到Borland公司的厉宻IC得在什么地方,我看C个绝妙的集成开发环境,即Turbo C++ 3.0 for WindowsQ这是我记忆中第一个真正的Windows环境下的C++集成开发环境,那种Ȁ动的感觉至今仍记忆犹斎ͼ不客气的_当时臛_在C++斚wQMicrosoft与Borland不是一个水q的QBorland明显的要高于Microsoft QBorland的品在技术上l我留下深刻的印象。那个时候Microsoft最好的开发^台是Visual Basic 3.0Q而Borland的Delphi正处于开发阶D(Delphi 的代码名U是Q“VB Killer”)……,惌vq些十几q前的往事,我不感慨万千? 十几q来Q我用过许多开发环境,关于Visual BasicQ我用过最早的DOS版本QWindows版的Visual Basic我基本上全都用过Q至今我q记得每个版本的VB安装盘磁盘的盘数。同P我用q各个版本的DelphiQ特别是Delphi 2.0Q给我留下极好的印象。Delphi提供真正~译的可视化开发环境,那个时候(1994q左叻IQDelphi可以开发带有GUI的动态链接库Q你可以惌Q在Microsoft Access 2.0的应用程序中可以加蝲一个Delphi Formq进行程序交互,那种感觉真是极了? Borland C++是我心中无法Ҏ的遗憾,从Turbo C到C++ BuilderQ我深刻的体验到Borland的辉煌和无奈QDelphi从VB Killer走到为VB护航Q你可以惌Delphi一步到位的ActiveX 控g开发技术有多牛Q早期的VB有多土,早期的VB不能开发动态链接库Q因此无法开发ActiveX 控gQ想h真o人嘘唏不ԌQBorland C++的命q也是不。Borland C++ 3.1的辉煌永q不再了Q十几年的开发工作中Q我在C++上投入了大量的精力,Borland C++曄l我带来无数的激动,然而这个经典的名字却在与Microsoft的竞争中渐渐的流逝了……? MFC4.0的出玎ͼ使得Z感觉Microsoft在C++斚w赶上来了Q这一版的MFC是Win95推出后出现在Visual C++ 4中(Microsoft没有VC 3QVC4以前的版本是2.2?.1?.0?.51?.5?.0Q。也许是对Borland C++的潜意识的失望,我不知不觉的接受了MFCQVC 4.2推出Ӟ我通过正常渠道购买了这个编译器的企业版?
关于Microsoft 关于MicrosoftQ有无数的h要对q个名字叙说感觉Q这个o厌的名字Q不知道是喜Ƣ还是憎Ӟ你是E序员,你的心思可能就要因Microsoft的存在而动Q即使你用LinuxQ你可能也是因ؓMicrosoft技术因素。多年来,q个名字每天都出现在你、我、他的面前,因ؓ你不得不面对Windows的存在,可是你憎恨这个名字吗Q你讨厌q个名字吗?我不知道是否已经对这个名字麻木了?998q我个h订了Microsoft MSDN Universal 版,我开始比较全面接触这个公司的开发技术,你可以想象,1998q当你面对上癑ּ技术光盘的时候,你就知道什么叫做“厚度”,当我们有时说出“赶上”或 “达到”Microsoft某些产品的水q的时候,可能我们~Z对这个公司“厚度”的真实了解。进入MSDNQ我感觉Microsoft直不是一个“公司”,而是Q或者正在Ş成)一个“社会”。当时著名的技术网站http://www.codeguru.com全部的技术资料是可下载的Q那个时候http://www.codeguru.com提供整个|站内容下蝲服务Q大U?M左右Q,大名鼎鼎的www.codeproject.comq不存在。一开始,我始l潜意识在技术上ҎMicrosoft与BorlandQ应当说技术上Borland不比Microsoft弱,即现在也有人持有这个看法,可是Z么Borland走到今天q个地步Q而Microsoft却如日中天?若干q前Q这两个公司竞争何等Ȁ烈,而现在却是另一番“合作”的景象Q可能很多h惌Q如果Borland不存在,对Microsoft不是更有力吗Q其实Microsoft可能_N中国历Ԍ读过《三国》、十分了解战国时期的中国Q其实Borland形式上的存在Q对Microsoft是十分有利的Q至Ş式上q有竞争ҎQ而事实上Borland已经受控于MicrosoftQMicrosoft是Borland的大股东Q。你可以看到一些微妙的现象QBorland为Microsoft提供了大量的人才Q其中包括Delphi总设计师以及Borland C++~译器的核心成员Q同时也为Microsoft .NET提供强有力的护航服务Q看看C# Builder、Delphi .NETQ?998qMicrosoft 的COM技术基本已l成熟,q个技术人感到震|当时Microsoft的对手们提出“OpenDoc”用于对抗“COM”,你看看“OpenDoc”阵营的几个成员QIBM、Apple、Borland、NovellQ你会感到这个阵营十分豪华、强大。但l果却差Zh意,“OpenDoc”无疾而终Q而“COM”依然生机勃勃? 有h说“COM”没落了Q那么就太不了解Microsoft了。在与“OpenDoc”的竞争中,“COM”是个彻底的胜利者,在与“Java”的竞争中,“COM”成功的q化了,在这个过E中Microsoft体现了强大的吸收能力、以及无法想象的韧劲?NET只不q是COM的“别名”而已。对于一个经验丰富的C++E序员而言Q?NET是COM的进化,而Microsoft内部.NET是“COM 3.0”(OLE2是COM 2.0Q,而“CLR”就是一个不择不扣的COM对象。曾l有人问我,既然牛顿时代奠定了基础Q想惌名的牛顿-莱布D公式Q,几百q后的今天,数学q研I“微U分”吗Q回{当然是依然在研IӞ“微U分”早期是针对函数的,C“微U分”是针对“流形(ManifoldQ、纤l丛QFiber BundleQ”的Q概忉|奥了Q可是基本思想不变Q只是“微U分”的思想得到合理的g拓与q化Q你了解Microsoft吗?Microsoft Research有一批超一的数学家在为Microsoft工作Q其中一些是斐尔兹奖的得主,Microsoft正在实现如同“微U分”进化到“微分流形”一样将“COM”进化到?NET”。从U学概念角度上分析COM与JavaQ可能COM更全面、精,从实现的成熟度上Java可能更成熟,可是你看刎ͼMicrosoft正在不紧不慢的追赶。Microsoft令h联想h国时期的强秦? 战国时期的秦国,采取“远交近攠Z“抚弱掠强”等措施傲视六国Q今天的Microsoft也是q样QVB1.0ӞMicrosoft推出“VBX”控件技术,众多的小公司得以生存QMicrosoft自己不开发“VBX”组Ӟ同样“VBX”进化ؓ“OCX”时QMicrosoftq不十分强大Q可是这U试探得C多小公司的响应?997qMicrosoft Office 97?998qMicrosoft推出Visual Studio 6.0Q给众多中、小公司提供了生存、发展的ZQ例如Microsoft Office 97中集成了Visual Basic for Application 5.0Q这Ҏ术得几癑֮软g开发商与Microsoft{v了VBA技术许可协议,即AutoDeskq样的公叔R与Microsoft{v了这个协议,q个协议使得每个集成VBA的品的l个用户许可为Microsoft?0$的许可费Q如果你了解VSIPQVisual Studio Integration ProtocolQ协议,以及有多公司签订了VSIP协议Q你q正感觉到Microsoft的可怕;Microsoft Office 97、Visual Studio 6.0的用L面十分漂亮,Z么Microsoft自己的开发工具不提供cM的Y件组Ӟ你看C多第三方的Microsoft盟友UL推出自己的界面库以模仿MicrosoftQ他们不会反对MicrosoftQ因Z们已lŞ成了使得Microsoft以及q些公司得以生存的生态圈? Microsoft的技术储备有多少QMicrosoft之外的h很难说清楚,Microsoft中国公司也未必了解多,1999qWTLcd刚刚出现的时候,Z希望WTL能得到官方的支持Q或授权l一个Microsoft之外的一个公司(你能惌出Borland C++ 5.0内置的ActiveX开发机制是ZMicrosoft ATLcd吗?Q,直到今天QWTL依然如故Q我们完全相信,如果Microsoft强力推广WTLQWTL完全可以行Q可是Microsoft不缺cM的技术,cM的类库还有BCL(Base Control LibraryQ一个用于开发轻量ActiveX控g的类?QMicrosoftq有一个基于ATL的类库,q个cd用于开发ActiveX DesignerQActiveX Designer是绝大多数程序员不了解得一cd象,如果你熟悉Office开发,你知道Office VBA 中有一cd象,即Form2Q此外VB6.0 中的报表设计器(以及著名的Active ReporterQ,都属于此cd象,用这个类库,你可以ؓVB6.0以及集成VBA的系l提供定制化的可视化设计机制{等Q如今ActiveX Designer已经演化为集成于Visual Studio .NET中的设计器?
向Microsoft学习 无论从什么角度评价MicrosoftQ我觉得Microsoft是值得我们学习的,如果说生zdq个时代有Microsoft存在是一场灾难,你就应该痛恨q个家伙Q但你首先要向这个家伙学习!我无意ؓMicrosoft歌功颂dQ我只是惌出十几年我对Microsoft技术的感受? Microsoft在研I式的开发中受益极大Q如果你有兴,你可以访问http://research.microsoft.com/Q虽焉分中国公怹有研IQ但与Microsoft相比Q真有“米_之珠,也放光华Q”的感觉?003q_我在北京的一个地方现Z验了Microsoft亚洲研究院的招聘会,我看C国的_英们进入Microsoft的望,事实上,在中国大陆,Microsoft亚洲研究院的人力资源已经延到各著名高校的相关专业的核心层,我感刎ͼMicrosoft几乎不需要“求贤”,因ؓQ只要Microsoft需要,_英们会“蜂拥而至”,每个人都有“可以理解”的理由而向往那个地方Q如果ؓ搞数学研I蜂拥到加州大学Q我觉得可以理解Q因为那里有数学土壤Q出了成果国Z会感到自豪,因ؓ“科学无国界”。技术是否有国界Q不知道是否有定论?Q想想DVD{技术专利给国内业界带来的灾难,不知道应不应该痛定思痛Q在Microsoft校园招聘现场的气氛中Q我g明白了ؓ什么国人“原创技术”少得可怜。我读过几本Microsoft亚洲研究院的高手写的书,明显可以看出QBill gate 是他们的_领袖以及他们对Microsoft的虔诚,国内的研I机构应当研I一下Microsoft的用Z道,Microsoft好像是三国里的h物,不知是刘备还是曹操,或者二者的混合物。我l常路过西格玛大厦,W一ơ西格玛大厦q入真有“朝圣”的感觉Q也与Microsoft中国的几个层ơ的人打q交道,各中滋味实在一a隑ְ? 在Office大战中,国软g的确在一些方面与Microsoftq行较量Q其实给人的感觉很勉强,界面上的似是而非Q或用户习惯斚w的接qƈ不能解决Ҏ的问题,一个好的Y件开发h员必L一个Y件用的高手Q很难想象一个Y件操作水q_拙劣的开发h员能开发出高水q的软gQ我最早用的软g之一是Microsoft WordQ当时的版本?.0Q大概是1992q的事情Q给我留下深d象的是集成于Word中的Word BasicQ后来,我接触到Excel 3.0Q不出所料,Excel中集成的是Excel BasicQ后来用的Access中自然内|Access Basic 1.0Q在q些软g集成捆绑成Office之前Q我感觉这些品的构思十分了不vQ很hMicrosoft的风|因ؓ你知道,即是一个DOSQMicrosoft都要提供一个内|的QBasic或GW Basic。虽然关于Microsoft的品评论很多,作ؓ一个技术h员,我认为Microsoft的品构思绝ҎW一的Q从1994q早期的Officepd?997qŞ成的Office 4.2Q我认ؓQ技术构思上均领先于我国2002q以后的Office产品Q你听说q如下说法吗Q“Dos 作ؓ操作pȝ的时代,Windows是应用YӞWindows是操作系l时QOffice成ؓDos时代的WindowsQ那么如果按此规律,Office会不会替代Windows而成为操作系l?”,现在在开发领域Visual Studio( .NET)正在成ؓ另一个OfficeQ你注意C吗?控制Visual Studio( .NET)集成开发环境的仍然是一个Basic语言引擎QVisual Basic .NETQ? 与许多公怸同的是,在技术体pMQMicrosoft几乎所有的产品是息息相关的QWindows、Office、Visual Studio .NET虽然各不相同Q但公共的核心即Ş成,我们已经看到Q核心组件方面,Office与Visual Studio .NET日渐于一_例如Microsoft正在Office 2003的核心组件VBA 6.X逐步用新的Visual Studio Tools for Office替代Q而我们依然在一些似是而非的现象上与Microsoft的品比较差距,国家采购或政府采购支持的公司Q不去钻研核心技术,只是急功q利的采用短期行为急于与Microsoft怺Q不知是否有蚍蜉撼树的感觉,个h的体验是Q先学习MicrosoftQ踏t实实的学,了解MicrosoftQ深入的了解Q然后再喊口受?
Z么用MFCQ? l过若干q的竞争QBorland 的OWL几乎消失了,q个OWL是个非常漂亮的C++cdQ在Borland C++ 3.1风光无限的年代,OWL真正的做C独领风骚。然而,Borland C++ 4.0错过了进?2位程序的最x机,BC 4.0推出后不久,q来了Win95QBorland仓促上阵Q以一个小的“Pack”得BC4可以~译ZWin4的程序,当时的Visual C++?.0版,支持Window16的版本ؓVisual C++1.51Q有意思的是Borland可以用同一个编译器同时支持Win16、Win32Q而Microsoft却不得不为Win16、Win32提供不同的编译器。然而,非正式版本的Visual C++ 2.1与Visual C++ 2.2却悄悄地支持了Win95的最新特征,即Win95新提供的一l公共控Ӟ在我的印象中QBorland对Win95新特征的支持不利使得MFC与OWL的距L大的~短了。稍后到来的Borland C++ 4.5没有改变q个状况Q尽Borland C++ 5.0同时支持OWL与MFCQ可是|象已l显ԌBorland C++非常遗憾的只走到?.5版。C++ Builder虽然形式上引入了Delphi的VCL库,可是许多C++E序员ƈ不买账,因ؓ许多以C++Z的h更喜Ƣ以~辑的模式进行编码。Visual C++ 4.0的出玎ͼ在C++q个战场上,Borland开始落败了? MFC发展C天,已经十多q了Q尽褒贬不一Q但可以肯定Q十几年的技术积累已l奠定了MFC的生存基Q即使Microsoft的长角发布,MFC也不能推出Windows的舞収ͼ事实上,长角QLonghornQ之后的Visual Studio .NET仍将MFC作ؓ一个重要的l成部分Q在今年的Visual Studio .NET 2005中,MFC在C++中的位置依然如故。MFC的未来,应该不必担心Q只要你深入考察.NETcdQ你会发玎ͼMFC的许多思想机制正悄然进?NETQ与此同ӞMicrosoft的第三方盟友十多q来已ؓMFC开发了大量的扩展库Q如果Microsoft是船Q第三方盟友是载舟之水。许多h认ؓMFC不发展了Q其实是一U错觉,Visual C++ 6的界面十分经典,特别是其中的Docking控制条机Ӟ其实Visual C++ 6的IDE完全是MFC写的Q可是MFCcd中控制条相关的类功能很弱Qؓ什么?你会看到许多与Microsoft友好的公司,他们很快的在MFC基础上实CVisual C++ 6 的Docking机制Q这是Microsoft的高明之处,Microsoft很会l盟友提供机会,其一贯的做法是在自q商品化品中预先提供一些有的特征Q得其他一些公司进行模仿以带动用户体。Borland不具备这L储备。MFCW三方市场的J荣Q得益于Microsoft的策略与明智。MFC可否跨^収ͼ理论上完全可以,Microsoft不做Q也是策略,但是有许多重要的产品Microsoft却默许MFCUL到其他^収ͼ事实上,Microsoft的合作伙伴之一Mainsoft公司QWindows源码是从这家公司流qQ,几年来就是负责移植MFCE序UL到UINIX、Linux、AIX{操作系l之上? 新版的Visual C++中MFC已经支持.NET开发了QMFC与ATL的协作更好了。根据我的经验,MFC、ATL?NET库三者完全可以融合在一L合应用到实际的开发工作中去,如果你是MFC行家Q我希望ATL?NET库能成ؓ你的忠实的左x。那么有没有同时支持MFC、ATL?NET库的E序Q当然有QVisual Studio .NET IDE是Q而且Visual Studio .NET IDEq支持用ATL?NET库扩展的Addin?
认识Application对象 如果你熟悉Microsoft OfficeQ你应该q一步的剖析q个大型软gQMicrosoft Office中几乎每个程序都是可二次开发的Q这一点得益于Microsoft Office内置的二ơ开发机Ӟ一个是ZCOM机制的VBA模型Q另一个是Z.NET框架的托模型:Visual Studio Tools for Office。作Z名程序员Q你应当在技术角度解析Office的技术结构。Microsoft的大多数软g的对象结构可以通过Visual Studio提供的工具OLE/COM Object Viewer考察其类型库得到Q通过引用cd库,你甚臛_以得到描q对象信息的C++头文件。这样做真是好处多多。一个典型的Office通常都有一个Application对象Q或其他一个与之相当的对象Q,q个对象相当于Y件枢U,在这里,我们不讨论OfficeQ借此话题说说Application对象。大多数支持扩展QAddin、PluginQ的软g都存在类似的构造。通常Q一个系l得Application对象或者是一个COM对象Q或者是一?NET对象Q如果你的系l存在这cd象,你的pȝ基本具备支持Addin、Plugin的机制了。一个理想的做法是在一个MFCpȝ中,内置一个ATL对象?NET对象Q稍后我们给出方案如何做到这一炏V设计Application对象的关键是如何规划q个对象的属性、方法、事件。如果你希望pȝ具备良好的扩展性,Application对象是十分关键的Q这也是构架艺术的体现。所谓Addin(Plugin)Q是pȝq行时根据需要加载的对象库,Addin(Plugin)之所以可以扩展系l,关键的因素就是系l加载Addin(Plugin)ӞApplication对象传递给Addin(Plugin)库,设想一下,如果Application恰到好处的触发了pȝ事gQ而Addin(Plugin)库如愿的解释了事Ӟ一个Addin(Plugin)库的d不就OK了吗Q因此Application对象是系l设计的关键? 如果你精通ATL对象Q在你的MFCpȝ中添加一个ATL对象Q这个Q务可以用VC Wizard完成。你已经接受了一个事实,是MFCE序中存在一个CXXXApp对象QCWinApp的派生类Q,现在你要做的是增加一个对应得ATL对象。这个对象可以在CXXXApp::InitInstance()中创建,如果ATL对象的类是CXXXAppObjectQ徏议你在CXXXApp对象对象中增加一个成员变量,例如QCComObject <CXXXAppObject >* m_pAppObjQ然后可以入下初始化m_pAppObjQ? m_pAppObj = new CComObject <CXXXAppObject >Q? 注意E序l束时在CXXXApp::ExitInstance()中释放m_pAppObjQ语句如下: delete m_pAppObjQ? 你可以将pȝ得关键属性设|成CXXXAppObject的属性,例如pȝ得标题、是否ؓ多文档等{。系l希望外部调用的功能可以实现为CXXXAppObject的方法,q一点取决于你的需要。系l需要外部扩展的功能Q表CؓCXXXAppObject的事Ӟ关键是在恰当的位|触发事件以及提供的事g参数。例如,你可以在CXXXApp::InitInstance()触发应用E序开始的事gOnStartUpQPlugin捕获事g后,可以q行特定的初始化Qn份确认、初始信息查询等{)Q? 你可以在CXXXApp::ExitInstance()触发应用E序l束事gQPlugin捕获事g后,处理用户需要的pȝ退出工作。所有的设计取决于具体设计? 如何加蝲PluginQ是一个有的问题Q如果Plugin实现Z个COM范畴QCategoryQ,可以q用COM技术枚举这个CategoryQ可以将Plugin安装C个特定目录,也可以通过注册表。Plugin的实现可以用COM技术、也可以?NET框架。适当的机会我会提供例子…?