??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久精品午夜免费不卡,99久久国产宗和精品1上映,久久福利资源国产精品999http://www.shnenglu.com/wlwlxj/<div>一个吃软饭的男?!!!!我只惛_E序####<br>微博Q?lt;a >http://weibo.com/wanlianwen</a></div>zh-cnTue, 06 May 2025 20:41:35 GMTTue, 06 May 2025 20:41:35 GMT60帮朋友寻找一个后台开?/title><link>http://www.shnenglu.com/wlwlxj/archive/2013/03/31/198979.html</link><dc:creator>万连?/dc:creator><author>万连?/author><pubDate>Sun, 31 Mar 2013 01:45:00 GMT</pubDate><guid>http://www.shnenglu.com/wlwlxj/archive/2013/03/31/198979.html</guid><wfw:comment>http://www.shnenglu.com/wlwlxj/comments/198979.html</wfw:comment><comments>http://www.shnenglu.com/wlwlxj/archive/2013/03/31/198979.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/wlwlxj/comments/commentRss/198979.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wlwlxj/services/trackbacks/198979.html</trackback:ping><description><![CDATA[<dt style="margin: 10px 0px 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; background-color: #ffffff;">工作职责Q?/dt><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">负责后台server开发工作,|络传输及分布式部vQ接入方案等Q?/dd><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">负责一定的后台server软g架构和框架设计;</dd><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">负责提出量服务的解x案,L高ƈ发高负蝲服务应对{略?/dd><dt style="margin: 10px 0px 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; background-color: #ffffff;">工作要求Q?/dt><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">计本U及以上学历,计算机相关专?</dd><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">4q以上Linux实际开发经?有一定架构设计能?</dd><dd style="margin: 0px; padding: 0px; color: #665f52; font-family: Arial, Helvetica, 'Times New Roman', 微Y雅黑, 宋体, simsun; border: none; text-indent: 2em; background-color: #ffffff;">C/C++基础扎实,有丰富的 TCP/IP、高性能大ƈ发、Node.js{编E经验,有音视频媒体后台开发经验优?<br /><br />工作地点在北京,产品最q上U,验证模式中。有兴趣的话Q欢q与我联pR?/dd><img src ="http://www.shnenglu.com/wlwlxj/aggbug/198979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wlwlxj/" target="_blank">万连?/a> 2013-03-31 09:45 <a href="http://www.shnenglu.com/wlwlxj/archive/2013/03/31/198979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我对h的chromium和android发展的看?/title><link>http://www.shnenglu.com/wlwlxj/archive/2013/03/25/198795.html</link><dc:creator>万连?/dc:creator><author>万连?/author><pubDate>Mon, 25 Mar 2013 00:10:00 GMT</pubDate><guid>http://www.shnenglu.com/wlwlxj/archive/2013/03/25/198795.html</guid><wfw:comment>http://www.shnenglu.com/wlwlxj/comments/198795.html</wfw:comment><comments>http://www.shnenglu.com/wlwlxj/archive/2013/03/25/198795.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/wlwlxj/comments/commentRss/198795.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wlwlxj/services/trackbacks/198795.html</trackback:ping><description><![CDATA[<div>最q,Chromebook来了QAndroid头子鲁宾调走了,接管的h正是Chrome览器主。Chromebook沉寂了有2?q_上一ơ推出的ChromeOS是以Webkit为ShellQ事实证明疗效不好。而这2?q中Q听到的更多的声xChromeOS会被攑ּ掉,更应该扶正Android一l所有。从我对chromium源码了解Q谷歌的开发支持有增无减,其中最吸引我的是新的桌面UI技术,代号为Aura。经q这些时间的开发,新的桌面shell搭蝲到Chromebook推出Q是否成功拭目以待。有的是惠普的WebOS很尴,但FireFox又吵늝要干WebOS?span style="font-family: verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">至于</span><span style="font-family: verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">LinusTorvalds说自己很喜欢Aura多少有点虚情假意Q他或许更希望谷歌在PC端能大放异彩Q顺带他的Linux内核蓬荜生辉?br /><br /><br /></span></div><div></div><div>h是一家了不得的公司,在智能机兴v的当头收购了Android。我不知道当时的Android是什么样子,也不知道那个遵从Java语言规范的Dalvik是谁出的馊主意。谷歌通过免费开N便定刉便玩的策略快速的占领了自q市场Q网l了大批的应用开发者。话说回来,即便收购的是bndroidQcndroidQ只要不出大意外Q都会获得同L成功。按照吴军博士的观点Q这是一波不可抵挡的潮?br /><br /></div><div></div><div>Android发展的风生水P但ƈ不是没有隐患。首先虚拟机技术得整体性能偏低Q其ơJava的代码容易反~译Q在强大的压力下h开攄NDKQ不q一直强调即便用NDK性能也不会有太大的提升。我自己没有q方面的开发经验,所以不知道是否属实Q但按照惯常逻辑Native的应该会快,q其中不知是真是假有何隐情或苦情{等。还有一个隐患就?009的时候Oracle收购了SunQ有了Java的专利。这Oracle也正在走下坡路,随时都可能去找谷歌提ƾ,而且不是块八毛的?br /></div><div></div><div>我大概是?0q底开始研Ichromium的代码。曾几何Ӟ我潜意识中把二者化上了{号Q而原因竟是那一坨代码实在是太巨大了Q俨然有操作pȝ的范ѝ进E间的IPC通信、线E间的消息框架、对象间的通知服务、通过Job创徏q程q做权限限制实现Sandbox、页面资源的理、GPU加速等{,q些东西围绕h不比Android的^台层太多。实现系l过E中Ҏ术的抽象Q只需把接口选择性的暴露l应用开发者便是所谓的Platform SDK。而这个过E经历的相当长的一D|_或者说没有U淀很难做好所谓的操作pȝ。从chromium的源码中可以看到很多Android的媄子,其是view框架Q控件的命名都差不多?br /></div><div></div><div>说了q么多,ȝ有点自己的态度。我认ؓAndroid出现的早Q当时的机遇容不得错q,因此Android在恰当的旉完成了自qd。而Win、Mac都是以C++q种Native方式霸占着各自的领圎ͼ技术发展到彼此差不多的时候,性能的细节问题会暴露Q加之Java专利的扰局Q谷歌不得不留一手。而AndroidZ自保Q对chrome是排斥的Q这一点貌g|上看到的八卦,但也合情合理。ChromeOS技术上的逐渐成熟Q又是原属自q开发,其角色和C逐渐增强是可能的。揣谷歌收购的摩托|拉除了专利权之外,会不会搭载Native的OS走高端手机系l这条\Q摩托罗拉恰好有一N端手Z叫AuraQ不q也许是巧合?br /></div><div></div><div>最后,我不是什么黑Q也不是什么蜜?br /></div><div></div><div></div><div>附加一些其它观点:</div><div>我不认ؓHTML5技术中的那些新语义会有多吸引hQ相反浏览器为HTML提供的那些外挂才是HTML5的核心,包括讑֤的SDK、地理信息服务、本地存储、多U程支持?D/3Dl图、音视频相关{等Q尽如此还有很多伪标准何时变ؓ标准、那些不是标准的何时变ؓ伪标准都不得而知。程序员很奇特,一斚w喜欢百花齐放Q而另一边又qh自己手中的锤子?/div><img src ="http://www.shnenglu.com/wlwlxj/aggbug/198795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wlwlxj/" target="_blank">万连?/a> 2013-03-25 08:10 <a href="http://www.shnenglu.com/wlwlxj/archive/2013/03/25/198795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>richedit研究06 ?高效动画hhttp://www.shnenglu.com/wlwlxj/archive/2012/09/08/189951.html万连?/dc:creator>万连?/author>Sat, 08 Sep 2012 10:10:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/09/08/189951.htmlhttp://www.shnenglu.com/wlwlxj/comments/189951.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/09/08/189951.html#Feedback16http://www.shnenglu.com/wlwlxj/comments/commentRss/189951.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/189951.html最q工作上比较忙,加之~码d较多Q没来得及l之前的讲解。抽出时间把q最重要的一部分东西做个阐述。行文以基本的编E思维及个人思考过EؓU烦?/p>

 

众所周知QRichEdir强大在于其图文؜排(在这里不跟Word、HTML比)Q其中的图替换ؓ动态图的核心问题就归结于如何高效刷新。我们知道GDI操作是最消耗CPU的,所以刷新整个RichEditH口是不可取的,其副作用会导致更严重的闪烁问题。解决问题的思\很简单:cM于拖拽时候在屏幕l制异或U,我们的动画重l时不请求RichEditQ而直接在其窗口的DC上绘制当前动dQ此时缺是如何定该OLE的位|,q个是所有问题的关键。先看下面这q图Q?/p>

 

假定1-5全部都是GIF囄Q非GIF可以暂时无视Q这个后面大家会非常清楚如何处理。在q个q程中,2不见了,?是新出现的。对?新出现时QRichEdit自n肯定会触发其Q?/p>

Draw(
    DWORD dwDrawAspect, LONG lindex, void* pvAspect,
    DVTARGETDEVICE* ptd, HDC hicTargetDev, HDC hdcDraw,
    LPCRECTL prcBounds, LPCRECTL prcWBounds,
    BOOL (__stdcall *pfnContinue)(DWORD_PTR dwContinue),
    DWORD_PTR dwContinue)

 

q个时候,我们知道新的GIF囄q入可视区,可以把它d到集合中。对?的动画触发时间到来时Q我们可以确定其位置且与可视区比对,发现其不再可视区Q则从集合中U除。这样就可以得到一个接q于Q略大于Q当前视口中的动L仉合,当有新的动画触发旉到来Ӟ我们可以先检查其是否在可视区Q如果不在则不用GDI操作Q仅仅更新其当前帧。当然这些工作你也可以不做,但是在动L件数量大的时候效率可能略有下降,主要是查扄q程Q烦引、位|)比较耗时?/p>

 

如何定一个OLE的位|呢Q由于我们插入OLE都用了REO_BELOWBASELINE标志Q也是跟当前行的底部对齐,所以OLE左下角位|的_度对我们来说很重要。看下图Q?/p>

假设图中黑框是一个OLE对象Q其字符索引为CPNQ假定第N+1行的W一个字W烦引ؓCPN1Q那么OLE左下角坐?{PosFromChar(CPN).x, PosFromChar(CPN1).y }QPosFromCharq个是RichEdit提供的。问题的关键是最后一行怎么计算Q此时没有第N+1行。对于这U特D情况,主要是Y坐标的计,可以q样考虑QY=RichEdit内容高度-滚动条位|。猜? 计算内容高度可能比较耗时Q故QQ的聊天消息显C部分强制在底部加了一行,以避免这U情况出现?/p>

 

得到左下角位|以后,可能你会觉得׃事大吉了。错Q还有一个关键点Q我们可以通过OLE的接口GetExtent得到其大,然而这个大没有考虑~放比例Q所以你需要根据当前羃放比例进行计,而这个计牵扯到点数运,q程中的来回不仅ȝ而且不精,所以OLE的可视大要想非常精是不能通过计算来的。我们前面知道OLEl制的时候会传入可视范围Q假如我们保存下来是不是可以解决问题了呢?当然Q显Ӟ你可以试试!

q些问题主要原因是RichEdit的很多接口方法没有暴Ԍ而Win8的SDK会做重大升Q很多之前的问题都会变成不是问题Q或许还会引h多的新特性,但是动画本n的逻辑q是需要自己实玎ͼ或者会单许多,至于多少我还不清楚Q但是目前来看这U方案效率够! 

 

Cq里Q核心技术应该大白天下,整个q程Q我q求了位|的_և度,q据此获得最可视集合进行刷C化?/p>

 

最新SDK&DemoQ参见:http://code.google.com/p/im-solution/。希望你会喜Ƣ!



]]>
richedit研究 ?正式?.0.0发布http://www.shnenglu.com/wlwlxj/archive/2012/09/06/189750.html万连?/dc:creator>万连?/author>Thu, 06 Sep 2012 14:25:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/09/06/189750.htmlhttp://www.shnenglu.com/wlwlxj/comments/189750.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/09/06/189750.html#Feedback14http://www.shnenglu.com/wlwlxj/comments/commentRss/189750.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/189750.html
先谈下richedit我做的工作,主要是参照QQ的功能进行设计,分ؓ2个部分:texthost和richoleQ前者实现无H口的richeditQ后者实现动L件。这些东西可以说|上可见的鲜有正的Ҏ论,很多都是饮鸩止之手D,我确信自q手法是非常科学的?br />
目前的实玎ͼ
1.动画控g
2.拯_脓Q支持QQ互? 支持HTML格式(|页 word{?互? Shell拖放互? dE序的互?br /> 3.H口、无H口控gl一操作接口
4.增强的扩展能?br />
现有的不_完善Q?br /> 1._脓|页中图像的下蝲q程是堵塞式下蝲
2.炫彩字体完善
3.新闻摘要Q仿QQQOLE实现

效果图:


SDK&Demo下蝲


无论如何Q对现在的设计(架构&E_性)到达了一个满意效果,最的依赖和最通用的编码,觉得可以拿出来show一下。如果您有Q何徏议都可以在下面提出或者给我emailQ烦要源码除外,技术讲解我会尽快展开Q按照之前的大纲Q。M一切都是围lQQ效果实现Qؓ实现IMc聊天展C提供解x案,武装到牙ѝ?img src ="http://www.shnenglu.com/wlwlxj/aggbug/189750.html" width = "1" height = "1" />

]]>
richedit研究 ?拯&_脓初步实现效果http://www.shnenglu.com/wlwlxj/archive/2012/08/26/188342.html万连?/dc:creator>万连?/author>Sun, 26 Aug 2012 09:15:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/08/26/188342.htmlhttp://www.shnenglu.com/wlwlxj/comments/188342.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/08/26/188342.html#Feedback6http://www.shnenglu.com/wlwlxj/comments/commentRss/188342.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/188342.html׃四天旉Q再ơ对QQ的剪切板格式做了深入研究Q对im_richedit做了一ơ重构得richframe作ؓ抽象的支持动d能占位块Q派生出richpicture。从基本功能上来Ԍ可以实现qq消息框的功能?/span>

我支持的剪脓板格式如下:
enum FETCINDEX {
  kFETCINDEXUnicode,     // Unicode 文本
  kFETCINDEXAnsi,        // ANSI 文本
  kFETCINDEXDIB,         // DIB
  kFETCINDEXHDROP,       // HDROP
  kFETCINDEXHTML,        // HTML
  kFETCINDEXIMRichEdit,  // 自定义格?/span>
};

未来打算扩展的OLEcd如下Q?/span>
enum IMRichElementType {
  kIMRichElementText,           // 字符?/span>
  kIMRichElementCustomPicture,  // 自定义图?/span>
  kIMRichElementSystemPicture,  // pȝ囄
  kIMRichElementFancyCharacter  // 炫彩字符
};

旉紧张Q很多细节处理不完善Q上周还初步实现了chromium的windowless版的embedҎQ新的一周要努力完善?/span>

效果囑֦下(支持HTML拯咯!Q!Q:



执行文g下蝲

技术讲解会在现在特性细节完成后l箋。扯点别的,lchrome os的shell攑ּweb实现后,fb也們֐native app而暂~html5Q似乎给html5g一点h。新技术的E_需要一个过E,而商业公司往往看重的是当前的运营、盈利。当然html5本n仅仅是加入了一些语义、植入了一些sdkQ而作为Windows开发者擅长的也是对sdk装而非语言层面的封装,相比之下Qweb斚w我比较热Lhtml5新特?canvas)来实现UIQ而对于原生的html元素拼凑界面有点怸着门道?/span>

]]>
richedit研究05 ?动画控ghttp://www.shnenglu.com/wlwlxj/archive/2012/08/05/186352.html万连?/dc:creator>万连?/author>Sun, 05 Aug 2012 11:18:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/08/05/186352.htmlhttp://www.shnenglu.com/wlwlxj/comments/186352.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/08/05/186352.html#Feedback0http://www.shnenglu.com/wlwlxj/comments/commentRss/186352.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/186352.html

很近没有更新了,闲话说Q直奔主题?/span>

 

微Y做Q何技术的思\Q在实现一个标准的时候,往往预留Z个通用的扩展机制。呃Q貌似很多大公司都是如此Q通过扩展把开发者跟自己捆绑。D例:微Y?/span>ie可以嵌入ActiveX控g、可以用BHO扩展Q?/span>richedit中支?/span>OLE扩展。这U扩展机制主要是Z?/span>OLE框架Q这也是微Y操作pȝ框架的基矟뀂开发层面目前的势是,淡化OLE.NETQ有一U无奈叫骑虎难下Q有一U错误叫q众Q在开发^台、技术百花齐放,开发资源极大丰富的今天Q开发者对微Y的依赖已l不那么强烈Q以至于现在?/span>Windows开发者有点小苦|其?/span>C++开发者有一U被抛弃的感觉,扯远了?/span>

 

谈谈OLE/COM/ACTIVEX的关pR很模糊Q有一些说不清Q有历史原因Q也有普及程度关pR侯捯玩模板有三境界:会用标准库,L标准库源码,会用模板做设计。我觉得COM相关的也是如此,使用COMlg往往是容易。我的理解:OLE是技术规范,COM是语a规范Q?/span>ACTIVEX则是用这2东东来实做的可服用组件的U谓。对?/span>OLE的支撑主要在MFC库中Q?/span>ATL库则是更Ua?/span>OLE/COM框架?/span>MFC?/span>OFFICE有一带水的关系Q?/span>OFFICE的应用框架促使着MFC的发展(早期如此Q但UI斚w早已分道扬镳Q,OFFICE的应用模型也是MFC的应用开发模型?/span>

 

之所以提?/span>MFC?/span>OFFICEQ只是想说通用的扩展机制没有那么多条条框框Q即便是ACTIVEX框架q种东西。对?/span>OLE实践Q也是微Y最热衷Q其?/span>Windows操作pȝ?/span>OFFICEpd软g要最典型Q其它则很牵强?/span>OLE技术标准接口只有极数是必d玎ͼ而大部分则是可选实现或者部分实玎ͼ其中richedit更是如此?/span>OLEҎ务器和客L都做了行范,如果一方(一般是服务器)自行军_如何实施Q则另一方也只需对应实现?/span>

 

呃,我说了这么多Q只是ؓ了阐q我的险恶用心,或许没h明白?/span>ATL框架定义了四个标准导出函数用于规范注册、反注册、加载、卸载,q些跟实际的OLE功能无关Q尤其是?/span>richedit扩展中。或怽在网上诸多示例中看到?/span>ATL模板创徏一个控件然后如何简单的插入位图׃为掌握了核心U技Q那么我p泼冷水了Q这些东西无兛_局。既?/span>Windows能用OLE搭徏框架Q既?/span>MFC可以实践OLEQ那么我们也可以用纯正的C++代码?/span>OLEQ我的意思无非就是没必要遵@ATLQ也没必要一定去注册一个东西,问题的核心不是这些东西,目前我们仅仅是ؓ了插入一个动甅R?/span>

 

Richedit是一个不完全?/span>OLE实践Q前面提到能完全实践OLE的框架不多。因?/span>richedit实现了图文؜排,所以在IM领域很受Ƣ迎Q尤其是早期Q现在基?/span>chromium的扩展或许可以改变现Ӟ?/span>Richedit是一个容器,可以容纳OLE控gq入Q典型的扩展是动画控g。基?/span>ATL框架开发,你可以实C个标准的控gQ但当你面对一个非标准的容器时Q那些条条框框显得不是那么重要,q也是ؓ什么能做好动画控g不容易的原因?/span>

 

Ҏ我的调查Q呃Q通过实践Q通过QueryInterface观察Q,我发现实C?/span>richedit中的动画控g只需要实C个接口:IOleObject?/span>IViewObject2Q前者ؓ了融入到richedit环境中,后者ؓ了渲染显C。由?/span>richedit默认只喜好无H口模式Q所以针?/span>IOleInPlaceSiteWindowless之类的,你去实现意义也不大,因ؓ人家容器不认你,当然q有IPersistpd接口Q对于标准的环境有用Q比?/span>IDEQ,但这里ƈ不是很需要,所以认清核心问题能减少很多困惑。更昄的是我的控g没有?/span>ATL框架Q因为此控gq?/span>richedit环境生存的意义也不大Q更有甚者我没必要让使其成ؓ标准Q也没可能)Q仅仅是Z在一个系l中?/span>richedit中更好地展示。实现的接口少Q引入的ȝ少Q这h能ɾ_֊集中在主要问题上?/span>

 

lg所qͼ我的控g是一?/span>C++c,只实C两个接口Q?/span>

 

X_BEGIN_INTERFACE_MAP(IMRichPicture, ObjectRootBase)
  X_INTERFACE_PART(IMRichPicture, IID_IOleObject, OleObject)
  X_INTERFACE_PART(IMRichPicture, IID_IViewObject, ViewObject)
  X_INTERFACE_PART(IMRichPicture, IID_IViewObject2, ViewObject)
X_END_INTERFACE_MAP()

 

 

其中大部分接口都可以无视Q因为我们只需要这个控件在richedit中能够占位(长宽Q,能够展示Q效率关键)Q至于其他的可编E、在位激zR对象识别都不重要。我观察?/span>QQ的动LӞ呃,比现在网上流行的要改变很多(|上内容没有与时pQ。现在的`QQ的动L件很单(后面会讲q如何找到这个控ӞQ看h只是作ؓ一个占位工P如何触发动画则是?/span>host控制。观其接口:

interface IRichFrameObj : IDispatch {
    };
interface IRichPicObj : IDispatch {
        [id(0x00000001), propput, helpstring("property src")]
        HRESULT src([in] BSTR rhs);
        [id(0x00000002), propput, helpstring("property static")]
        HRESULT na([inlong rhs);
        [id(0x00000003), propput, helpstring("property autoHeight")]
        HRESULT autoHeight([inlong rhs);
        [id(0x00000004), propput, helpstring("property autoWidth")]
        HRESULT autoWidth([inlong rhs);
        [id(0x00000005), propput, helpstring("property maxAutoWidth")]
        HRESULT maxAutoWidth([inint rhs);
        [id(0x00000006), propput, helpstring("property onerror")]
        HRESULT onerror([in] BSTR rhs);
        [id(0x00000007), propput, helpstring("property objid")]
        HRESULT objid([in] BSTR rhs);
    };

 

IrichFrameObj的作用我不是很理?/span>Q?/span>居然一个接口都没有Q?/span>而后者模p的能够理解一?/span>Q?/span>src大概是动画囄路径Q?/span>autopd是ؓ了动态羃放。现在的QQ只允怸个自定义动画Q依据老衲猜测Q因定义动画往往是截图,比较大,在一行容易引LL视图跌。再有其他的属性是Z识别所用,无法推测具体行ؓ?/span>

 

呃,事情看v来没有那么复杂,的确Q我只实C2个接口,而其中大部分也都是返?/span>E_NOTIMPLQ因?/span>richedit实没有那么标准Q你实现的再标准也无于事。当?/span>richeit也在更新Q?/span>win8?/span>sdk对其改动最大,?/span>win7?/span>sdk也暴露了一些更早的功能Q这或许是目前实现的最大亮点(技术含量,高风险高回报Q一般h难以|信Q?/span>

 

对于动画控g阐述到此为止Q或许很多h会很失望Q但也仅仅如此,因ؓ它本w什么都没有Q尤其是在你真正明白之后Q所以这里或怽会很失望Q但是真正的内容p么多Q我也不知怎么La加醋?/span>

 

最后一个徏议,希望重所有的玩技术的Q?/span>

1、中国官本位思想很严重,技术搞得不错(或许是运气)立马转管?/span>

2、文人相?/span>

3、资本运作,体制q作Q技术作用不明显

4、吃p皮,难以l系理想

 

大道无ŞQ大韛_壎ͼ牛叉的技术很多都是y工,而真正的产业才是大无畏的研发Q我们只不过在投机取巧?/span>



]]>
扯Ehttp://www.shnenglu.com/wlwlxj/archive/2012/07/31/185795.html万连?/dc:creator>万连?/author>Tue, 31 Jul 2012 14:54:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/07/31/185795.htmlhttp://www.shnenglu.com/wlwlxj/comments/185795.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/07/31/185795.html#Feedback10http://www.shnenglu.com/wlwlxj/comments/commentRss/185795.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/185795.html男hQ每个月L那么几天心情不爽。在此期间遇C心的事情,往往表现会更加强烈。随着q龄的增长,逐渐减少了码字的习惯。今天不同,喝了半斤牛二Q决定堆Ҏ字?br />
三十而立Q作为没有成功事业而有自命不凡的屌丝(今天朋友l我新解释觉得很合理Q屌==JIBAQ丝==毛)而言Q常怼被h一句话噎死Q这是最悲剧的事情?br />
之前公司负责Z天跟我沟通,希望我能回归Q很感激q是好事Q只是很多事情种U情况,双方表达也有歧义Q最l不Ƣ而散Q结果不重要Q过E中提及最重要的是性格以及成长。顺着q个问题喝酒后发散一下,瞎扯点神马?/div>

做h、做事?
大公司做人,公司做事?一切事情道理相通,M地方都是做hW一做事W二。前者保证你能呆在那里,后者保证你能有更好发展。当然也有颠倒黑白的地方Q我们不提。会做h不等同于媚上ZQ善于沟通,对事不对人,对内保证利益的^衡,对外争取团队利益最大化Q不滥用职权q样是一个好的做人方式。我们往往遭遇的现状是有能力者不在其位,在其位者却不谋其政Q这是一U无奈。无论如何,坚守职业操守Q凭良心做事是底Uѝ?/div>

大公司、小公司?
q是一个没有答案的问题。我在未毕业的时候就M一家创业公司,当时的待遇很好,一q?0W。由于毕业时候自q偏执Q根本没有找工作Q后来遇到发展瓶颈,在接下来的时间里待遇没有增长Q技能提高完全依赖自学,可贵的是坚持下来自己的自学能力提高不。那个创业公司有一个老外Q在他离开后不久我也离开了,原因在我看来是因板q背了上面的原则Q很多事情就是这P我在哪呆?q。后来去了百度,完美。我在百度跨q了一个发展瓶?-资历&技能,我的同事Ҏ的帮助很大。当Ӟ在那Ҏ得意的一帮h要数捣鼓开源技术的Q更早期的资历辈抛开Q,现在xQ这也是一U投机,即现在也是如此Q因为对于企业这是一U投资小见效快的途径。在2011q_我决心出去走走再闯闯地方,分别M很多地方Q有坑我的,有对我说对不LQ有挽留我的Q或许是一U不习惯我还是回了大公司。这期间我体验了驱动技术、应用开发、底层架构,见过土山寨管理,也见识了C化管理,得失从缘 心无增减?br />
==========================================================分割U?br />今天照例半斤Q补齐文字。前面的牢骚仅仅是牢骚Q不代表我生zM好或者我心情不好Q相反我很^静,我ؓ我追逐的技术而痴qP很开心。如今不喝酒Q很N骚文字了?/div>

技术、管?
中国有句话说三十岁不转管理云云。今q我三十Q苦比技术中?nbsp;曄在博客园见到一哥们Q职位是头目,q薪三十万,写了很多指导性的文字Q我很嫉妒,此外我也为我自己感到庆幸Q我׃马仔。我所遇到的好的管理,是不懂技术但是敢于授权,此外很少见到U职的,或许是我太自以ؓ是。有人爱理Q有人爱技术,官本位的现状前者追求的人多Q不q的是我是后者。我爱技术,不爱产品Q所以被人看做不专注。曾l得C些小有成׃h的指点,坚持做一件事情,可能成功,但是大的成功都有q气成分?做技术不可耻,做管理也无需骄横Q李忽悠说随心,随心吧?strong>

APP、Web?
 Windows/Linux、服务器/客户端、算?界面、Web/NativeQApp/WebQ选择Q我们L在不断的做选择。我们会从自q立场d断,往往很少有h中立的去看待Q存在的都是合理的,不合理的d也不p己意志{UR我的朋友说我在变,实Q我不在喜欢爱憎分明的去对外表达Q但是我内心没有变,只是不爱M论。有人犯错误Q我可以忍受Q我可以提出意见Q不被采U的时候,我选择的是忽视&攑ּ。很多h从自q立场出发Q认为App早晚会死或者Web无法一l天下,q让我想P_癑֧苦;亡,癑֧苦?br />
云?/strong> ?/strong>Q?br />云提出有几年了,当然跟风的框也相当,只是q几q雷声大雨点。这让我惌v来自己当q毕业的时候鼓吹v来的生物U技&U米技术,q股夸风吹到大U大二就熄火Q期间纳c服,U米牙膏、纳c_气娃娃等{都让h憧憬好。我当初癑ֺ的时候,座位L××很近Q回头就能看见其办公室的蜜Q这也是我多q吹牛的桥段Q运气啊。百度的框很虚,比云q飘渺,以至于这几年没撒动响了。云只是一U资源的l筹理Q而其中核心的虚拟技术只是一U资源分配的基本单位Q可以认为是操作pȝ和进E的关系Q再多的应该没那么神奇,多是云里雾里忽悠h而已。很多hp{微博上的东西Q却很少有原创,我在惻IN别h真的不会在微博上获取Q你真的很小聪明Q?br />

工作、生z?
工作是ؓ了更好地生活Q如果有屌丝毕业没出路问我干撒,我说IT啊;如果有好孩子毕业没出路问我干撒,我说公务员。n边很多年Mh会炫耀自己现在熬夜无压力,像嗑了药,大多时候我会告诉他?7?w体会走下坡Q到?0熬夜׃是那么现实。需要努力工作,但是生活要匹配,最悲剧的事情就是:出师未捷w先死,长英雄泪满襟!

本来想的q有不少Q偷懒不惌录了。感谢我的朋友,我很快乐Q只是习惯性发骚一下,我追求技术的心没有变?img src ="http://www.shnenglu.com/wlwlxj/aggbug/185795.html" width = "1" height = "1" />

]]>richedit研究 ?阶段性成果展C?/title><link>http://www.shnenglu.com/wlwlxj/archive/2012/07/01/180982.html</link><dc:creator>万连?/dc:creator><author>万连?/author><pubDate>Sun, 01 Jul 2012 02:25:00 GMT</pubDate><guid>http://www.shnenglu.com/wlwlxj/archive/2012/07/01/180982.html</guid><wfw:comment>http://www.shnenglu.com/wlwlxj/comments/180982.html</wfw:comment><comments>http://www.shnenglu.com/wlwlxj/archive/2012/07/01/180982.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.shnenglu.com/wlwlxj/comments/commentRss/180982.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wlwlxj/services/trackbacks/180982.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt; ">实际的richedit研究q程中,遇到了各U疑难杂症,真是不容易。比如:</span><br /> // RichEdit使用注意:<br /> <div>//   1.讄CFE_LINK后立卌用AutoURLDetect会导致RichEdit解析当前Word是否为链?</div> <div>//     如果想避免这U情? 必须在这CFE_LINK后插入空g便把Word区分出来.</div> <div>//   2.惌对ITextServices发送EM_SCROLLCARET消息, 必须讄ES_NOHIDESEL风格, 或?/div> <div>//     发送EM_HIDESELECTION消息改变讄(自动滚动到底部功?.<br /> <br /> <span style="font-size: 14pt; ">同样在实现Windowless的richedit的时候,仅仅实现ITextHost接口看上d丽Q实际上却不能完,需要用到新的接口:ITextHost2。还有QQ聊天框里面的新闻摘要信息展示OLEQ我猜应该是用到了新的REOҎ:REO_OWNERDRAWSELECT。这些都是从VS2010的Platform SDK中翻出,richedit的功能在兼容性升U,而开发库却迟q不更新Q?或许我不知道Q,可想腾讯有如此有心h不断的尝试新Ҏ。昨天无意发CMSDN博客Q此责richedit相关的工作以及Math~辑Q想要对q方面开发了解的可以刎ͼ</span><a style="color: #6fbc4c; font-family: verdana, Arial, helvetica, sans-seriff; font-size: 12px; line-height: 19px; "><span style="font-size: 14pt; ">http://blogs.msdn.com/b/murrays/</span></a><span style="font-size: 14pt; ">?/span><br /> <br /> <span style="font-size: 14pt; ">q一不涉及到具体的技术,有兴?/span><a href="http://www.shnenglu.com/files/wlwlxj/im.rar"><span style="font-size: 14pt; ">下蝲</span></a><span style="font-size: 14pt; ">看看Q包括窗口和无窗口的实现Q截图一张,满屏Gif性能q是非常强劲的:</span><br /> <br /> <img src="http://www.shnenglu.com/images/cppblog_com/wlwlxj/8028/o_im_richedit_effect.png" alt="" width="900" height="355" /></div><img src ="http://www.shnenglu.com/wlwlxj/aggbug/180982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wlwlxj/" target="_blank">万连?/a> 2012-07-01 10:25 <a href="http://www.shnenglu.com/wlwlxj/archive/2012/07/01/180982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>richedit研究04 ?高效旉http://www.shnenglu.com/wlwlxj/archive/2012/06/24/180034.html万连?/dc:creator>万连?/author>Sun, 24 Jun 2012 07:51:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/06/24/180034.htmlhttp://www.shnenglu.com/wlwlxj/comments/180034.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/06/24/180034.html#Feedback6http://www.shnenglu.com/wlwlxj/comments/commentRss/180034.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/180034.html上一ơ,我们可以获取到图片动d之间的时间间隔,如果惌动画转v来,必L旉。插入的囄动画数量可能会比较多Q因此要想不影响性能Q时钟必d轻量U而且要很高效?/span>

 

Windowsq_上实现时钟的方式五花八门Q你可以使用H口相关?/span>SetTimer来设|一个时钟,也可以自己开辟线E来做等待触发模拟时钟,?/span>Chromium装的要更加C++对象化一些:依托WindowsH口消息Q抽象出延迟d的概c这U手法几q前我也曄考虑q,只是对其中下ơ最短触发时间计以及更新的法和设计都有力不从心,最l得出的是误差很大的_版:选择固定的最时间片为最触发单位,对很的旉间隔误差很明显?/span>

 

Windows?/span>Timer Queues用来实现高效的异步时钟,比较奇怪的是这l?/span>API用的貌似q不多。我们知道每个进E都有一个默认的U程池,可以在其中执行一?/span>Work ItemsQ时钟队列和{待操作也都会用到这个线E池?/span>timer-queue中的timers创徏和销毁都很轻量高效,因此我选择了它?/span>

 

每个OLE囄对象在设|图片之后,如果发现是多帧的Q就需要启动动画,创徏旉Q?/span>

 

ATLVERIFY(CreateTimerQueueTimer(&timer_, NULL,
                              WaitOrTimerCallback,
                              callback_parameter_.get(),
                              image_->GetFrameDelay(current_frame_),
                              0, WT_EXECUTEDEFAULT));

 

q里timer_是返回|q回新徏的时钟对象,可以?/span>OLE对象销毁或者回调函Cq行删除Q而删除操作会{待回调执行完毕才返回。传?/span>TimerQueue?/span>NULL表示使用pȝ的队列?/span>Period?/span>0表示只触发一ơ,触发旉?/span>image_->GetFrameDelay(current_frame_)。由于回调函?/span>WaitOrTimerCallback是在U程池的U程中执行,所以更新操作需要同步到动画囄的创建线E中?/span>callback_parameter_包含有上一节提及的ThreadState对象以及动画OLE对象指针Q?/span>ThreadState创徏的时候会同时创徏一个隐藏窗口用于工作者线E向UIU程同步操作Q?/span>

 

VOID CALLBACK IMRichPicture::WaitOrTimerCallback(PVOID lpParameter,
                                            BOOLEAN TimerOrWaitFired) {
  ATLASSERT(TimerOrWaitFired == TRUE);
 
  IMRichPicture::CallbackParameter* parameter =
      reinterpret_cast<IMRichPicture::CallbackParameter*>(lpParameter);
  ATLASSERT(parameter);
  parameter->thread_state->UpdatePictureFrame(parameter->picture);
}

 

下面?/span>UpdatePictureFrame的实玎ͼ

 

void IMThreadState::UpdatePictureFrame(IMRichPicture* picture) const {
  PostMessage(message_window_, kMessageUpdatePictureFrame,
              reinterpret_cast<WPARAM>(picture->richedit()),
              reinterpret_cast<LPARAM>(picture));
}

 

q样l一大圈子,是ؓ了利?/span>Timer Queues的同时保证图片的更新操作是在UIU程中执行,因ؓ囄被插入也是发生在UIU程Q即动画控g创徏?/span>UIU程Qؓ了避免加锁带来的ȝ以及死锁的可能性,不应该轻易去加锁Q尽量利用操作系l提供的基础设施来实现。这里需要注意的是隐藏窗口接收到kMessageUpdatePictureFrame消息ӞricheditH口可能已不存在或者动L件已l销毁,因此使用指针前,需要判断对象是否还存在Q?/span>

 

case kMessageUpdatePictureFrame: {
      IMRichEditImpl* richedit = reinterpret_cast<IMRichEditImpl*>(wparam);
      IMRichPicture* picture = reinterpret_cast<IMRichPicture*>(lparam);
      if (IMThreadState::current()->HasRichEdit(richedit))
        richedit->OnUpdatePictureFrame(picture);
      return 0;
}

 



]]>
richedit研究03 ?高效囄理http://www.shnenglu.com/wlwlxj/archive/2012/06/17/179142.html万连?/dc:creator>万连?/author>Sun, 17 Jun 2012 01:48:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/06/17/179142.htmlhttp://www.shnenglu.com/wlwlxj/comments/179142.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/06/17/179142.html#Feedback2http://www.shnenglu.com/wlwlxj/comments/commentRss/179142.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/179142.htmlq里提及高效E许有些夸张Q仅为应景,因ؓ本n没有太多高U技Q权且作ZU有效的实现?/span>

 

首先是图片解码器的选择。一般来讲有几种选择Q?/span>1、组装各U开源库Q如libpng, libjpg, giflib{,支持什么格式就得添加对应的解码器;2、开源解码包Q如freeimageQ没用过但听说也很不错;3?/span>GDI+Q支持图片格式广泛,接口单,性能一般。当然还有其它方式,大抵差不多。我选择的是GDI+Q图便好用,且目前微软支持的OS上都是自带的Q无需发布Q?。对QQ的程序集DLLq行分析Q发现其中诏I了各种解码技术,有直接采用开源库的,也有依赖GDI+的,不知道是历史遗留问题Q还是各个部门之间技术偏好,抑或是另有玄机。扯到技术偏好,让我头疼的就是程序员在项目中随意的引入库Q解军_一个问题,往往看到不同的h用不同的技术,甚至同一个h在不同的目中造不同的轮子Q有时候没法说服别人,只能|了?/span>

 

GDI+的初始化需要注意一件事情:不要?/span>DLL入口处加载或卸蝲GDI+Q否则会发生锁死现象Q具体可查阅msdn?/span>

 

考虑到高性能的界面中可能会采用多U程UIQ因此我建立?/span>ThreadState?/span>TLS对象Q所有的数据都存储在q个对象中,同步U程消息是通过惯用手法之隐藏窗口来保证。时至今日,或者早1?/span>2q_我才深刻理解mfc库设计时的那?/span>state理l构体的用处?/span>GDI+的初始化?/span>ThreadState构造函C调用Q正好避免了加蝲冲突q个问题?/span>TLS对象的销毁技巧来自谷歌的chromium源码中的base库里?/span>tls实现Q原始出处来?/span>CodeProjectQ?/span>http://www.codeproject.com/threads/tls.asp。嗯Q其实牛逼的E序员也是纵览乾坤,吸取_֍。提?/span>CodeProjectQ顺带提一下我的学习历E,早期疯狂的q个|站Q几?/span>VC斚w的东襉K把玩q,形成了自q点状知识U篏Q类似的?/span>CodeGuru?/span>vckbaseQ现在已l成为广告站了)Q之后是 sourceforge?/span>codegoogle?/span>codeplex 找一些小的项目研IӞ形成自己的线状知识结构;再后来就是大型的源码阅读Q偶会去谷歌讨论组、微软新ȝ看一些疑难杂症问题,构成了自q面状知识体系。每个h都有自己的学习方法论Q这里仅仅是分n我自q。很多东襉K已经看上L些过Ӟ现在的年ȝ序员可能接触的是stackoverflow?/span>github{?/span>

 

GDI+中的Image是抽象接口,Z方便使用Q增加了一层简易封?/span>IMImageQ主要接口如下:

 

static IMImage* FromFile(const std::wstring& uri);

long AddRef();
long Release();

const std::wstring& uri() const { return uri_; }
UINT frame_count() const { return frame_count_; }
bool IsAnimate() const { return frame_count_ > 1; }
long GetFrameDelay(UINT frame) const;
long GetWidth() const;
long GetHeight() const;
Gdiplus::Image* GetImage(UINT frame);

 

通过uri加蝲囄Q?/span>GDI+Ҏ地图片的加蝲非常单,Image::FromFile可以直接q回Q对于网l图片,需要先通过WinINet下蝲到本圎ͼ然后再加载?/span>

 

׃使用?/span>tls技术,q里的引用计数实现很单,是++?/span>-- 操作。曾l有人告诉我引用技术是Z解决多线E中对象的生命周期问题,我欲与否认。引用计数只是ؓ了解军_象的生命周期问题Q而这U情况往往在多U程中出玎ͼ因此多线E中或多或少会用到引用计数?/span>

 

IMImagecd以简单的q回一?/span>GDI+?/span>Image对象提供的图片信息,?/span>GetImage需要多做一些事情。对于包含多帧图片的文gQ在l制的时候需要通过GDI+?/span>Image::SelectActiveFrameҎ选择当前帧,该操作非常耗时Q因此在加蝲囄的时候,发现如果是多帧的Q我们需要额外的decode_image_来解码存放每一帧图像,q样除第一ơ渲染比较耗时外,后面的获取都是非常快的?/span>

 

GetFrameDelay函数是获取某一帧之间的旉间隔Q通过GDI+?/span>PropertyItem可以很容易的获取。需要指出的?/span>PropertyItemcM用v来却不是cȝ方式Q需要手?/span>newZ块内存,所以这里用一个结构体我看更合适,而且q是C风格的?br />

再增加一?/span>IMImageServiceQ管理整个系l中用到?/span>IMImage对象Q接口很单:

 

IMImage* GetImage(const std::wstring& uri);
void ReleaseImage(IMImage* image);

 

需要图像就扑֮要,用完之后记得释放卛_?/span>

 

q样完成了囄的管理,目前来说_用,也非常简单,不是么?



]]>
richedit研究02 ?大纲http://www.shnenglu.com/wlwlxj/archive/2012/06/14/178859.html万连?/dc:creator>万连?/author>Thu, 14 Jun 2012 14:49:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/06/14/178859.htmlhttp://www.shnenglu.com/wlwlxj/comments/178859.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/06/14/178859.html#Feedback10http://www.shnenglu.com/wlwlxj/comments/commentRss/178859.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/178859.html自第一发布后Q收C不少性的意见Q这里尤其感谢网?/span>weolar、\人甲Q他们在l我重要提示的同时让我意识到自己的武断。上我曄说过richedit是非常底层的实现Q其实我起初也不q么认ؓQ只是在Win2K泄漏代码中能扑ֈ几乎所有想要的内容同时却无法发?/span>richedit半点t迹故Ş成这U判定。事实正如网?/span>weolar、\人甲提及Q?/span>richedit属于应用层的实现Q看q代码之后感受到一U亲切感Q因为大多数概念在我ULie代码的时候都曾见到过Q只是当初ƈ未深入图文编排细节,仅着g渲染引擎。再ơ感谢这两位|友Q不是他们的帮助Q我无法在短旉内完成一个初步的具备完美特征?/span>IM RichEdit实现?/span>WinNT中的richedit应该?/span>1.0Q现在普遍的?/span>2.0Q最q研I发?/span>Win8中更多的暴露?/span>TOM接口Q如果采用那些接口,实现h会更加简单,q个后面我会提及。给我的感觉是在实C样东西的时候,谁都意识不到它会那么l用Q到后来发现扩展性不够的时候,升h却ƈ不是那么q脆了,֏兼容性,只能在大版本更新的时候动大手术?/span>

 

在我实作的同Ӟ大量使用了搜索引擎和h技术论坛。我没有扑ֈ直接{案Q然而各U扑朔迷ȝU烦L恍恍惚惚带着我走向最l的胜利Q让我再ơ体会到成功贵在坚持不懈。在自认为差不多满意的时候,通过跟同事的探讨Q我横下心l追求完,怿自己做的不会?/span>QQ的实现差?/span>

 

目前完成了大U中的高效动d现部分,q部分耗时1周,另外加上?/span>2周的工作之外旉的技术调用。接口基?/span>IRichEditOleQ也是说只要符?/span>RichEdit实现规范的都支持Q包括窗口的和无H口的。那什么是W合RichEdit实现规范呢,是W合RichEditH口实现的方式,Ҏ无窗口的RichEdit实现。你可能说我不知道如何实现无H口?/span>RichEditQ这个不要紧Q我以后会做。后面的文章我会陆箋把第一部分实现q行详细讲解Q同时实现第二部分?/span>

 

效果图:

 

CZ工程下蝲



大纲如下Q?/span>

高效动画实现

高效囄理

高效旉

动画控g

高效动画h

拖拽剪切_脓支持

Process Monitor

QQ动画lg分析

ClipSpy

QQ的剪切板格式分析

IDataObject

Xml序列化反序列?/span>

拖拽

_脓

OLE扩展

?/span>QQ新闻摘要
...



]]>
richedit研究开?1http://www.shnenglu.com/wlwlxj/archive/2012/05/20/175489.html万连?/dc:creator>万连?/author>Sun, 20 May 2012 12:01:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/05/20/175489.htmlhttp://www.shnenglu.com/wlwlxj/comments/175489.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/05/20/175489.html#Feedback15http://www.shnenglu.com/wlwlxj/comments/commentRss/175489.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/175489.html

研究背景

自职业生涯v到现在,我参与过三个imcM品,其中我主要负责的是界面库开发。众所周知Q?/span>im软g中有一个非帔R要的控g用于消息展示Q实现方式无外乎ZricheditQ目前这一cMؓ主要方式Q代表:QQQ、基?/span>webbrowserQ代表:GTalkQ,可能会有ZWebKit的,我没有刻意去搜集。很多时候对于相对简单的情况Q比如在游戏中,完全可以自己l制?/span>

 

我曾l模仿过GTalk的实现方式,׃当时自己l验Ơ缺以及与公司写面的h沟通上的问题,效果不是那么满意Q仅仅够用,后来自己d也没再l做q方面研I。机制上q种方式是可行的Q?/span>native端事情不多?/span>

 

后来的工作中Q主要是Zrichedit在做Q都是安排其他h负责。在开发过E中Q遇到种U问题,用过各种不优雅的“伎俩”Q由于欠~?/span>OLE知识Q做的h很痛苦,找不C。微软官Ҏ一个例子,然而只披露了用技巧的冰山一角;codeproject也有的可怜的几个例子Q经不住商业化应用;互联|搜索的一些文章大多都是简单的插入囄{,聊胜于无?/span>

 

《基?/span>Chrome开源提取的界面开发框架》系列文章获得了不少支持Q在提取q程中我自己也成长很多。抽取出来的引擎要想用于商业化开发,我个得欠~的主要是富文本渲染q一块,q我开始研I?/span>richedit。断断箋l,期间各种事情Q几l放弃。后来一个网友在q个问题上又扑ֈ我,临时的帮助他解决问题之后Q不感叹,Z么互联网上找不到一个优雅的解决Ҏ甚至是深入的介绍Q?/span>

 

|友megax的文?/span>http://www.shnenglu.com/megax/archive/2012/03/22/168601.html中关于制作编辑器斚w知识提及?/span>http://www.catch22.net/tuts/neatpad让我着实佩服,老外对待研究的态度真的很严谨,分n的开发性和持箋性方面远q胜于我们。系列文章中的绝大多数概늟识我都接触过Q然而很多没有深IӞl验q远不如文章Mh?/span>

 

Richedit的研I的大部分知识都?/span>OLE斚w。现在计机的发展,技术的百花齐放Q?/span>Windowsq_不再那么大行光Q?/span>Windows技术也不再那么不可一世,Mfc来被抛弃Q?/span>WindowsE序员诚惶诚恐,新生代早早把自己定位在更炫更hȀ情的技术^台。在Windows Native开发没有彻底失宠前Q我打算把自己死啃得来的OLE知识发挥“余热”Q对richeditq个东西应用?/span>im领域的问题解决一下,希望对其他h有帮助,也希望没有重复造轮子?/span>



研究目标

Richedit?/span>Windows底层的组Ӟ甚至?/span>2004q泄漏的Win2K代码中都没有Q它是独立于editlg的,?/span>edit位于ntuser中,亦相当底层,虽在泄漏代码中出玎ͼ然而抽取出来的可能性不大。从某种角度来讲Q?/span>Reactos 是抄袭的这份代码,明眼人可以从其死灰复燃的更新列表中发觉。很奇怪的?/span>Reactos 的代码中?/span>richeditQ我也移植过Q只是后来发现功能实在太弱,无可用性,遂放弃,至于Wine 是不是抄袭这份代码,我无从得知,也没_֊再去跟踪?/span>

 

Richedit 的接口相当稳定,我在Win8中试验过完全兼容Q我惛_应该会持l很久,所以值得d好研I一把?/span>

 

《基?/span>Chrome开源提取的界面开发框架》的view框架Q如果能有一?/span>rtf格式的渲染利器,配以ole的展C,我想以成ؓ互联|商业开发的UI解决Ҏ?/span>

 

Richedit 机制上来讲?/span>WebKit一P或者应该反q来说?/span>RicheditH口本n是对ITextServices的封装,实现ITextHost接口?/span>ITextServices交互提供q_支持?/span>ITextServices的支持分两大c:Z文本?/span>ITextDocument和基?/span>ole?/span>IRichEditOle。作?/span>ole容器Q提供的功能主要通过实现几个接口完成的,包括Q?/span>IOleClientSite?/span>IAdviseSink?/span>IOleInPlaceSiteQ缺省的Richedit 貌似不支持定位激z,惌辑ֈȀzL果必L持最后一个接口。与剪脓板和拖拽数据打交道需要支持统一数据传输接口IDataObject?/span>

 

研究主要参考对象ؓQQQ目标ؓQ支持粘贴格式、动?/span>ole控g、定?/span>ole菜单、拖拽、文本操Uc窗?/span>/无窗口的l一支持{,我会在下一列l的大纲?/span>



已做工作

OLE标准提供了大量工业化标准接口以及J杂的交互规范,事实上除了微软(?/span>officepd产品为典范)Q鲜有Y件全盘实施。可以说MFC的大部分工作都是用在实现OLEQ所以其臃肿大抵源于此,不得不臃肿,早些q我接触wtl后得出,MFC - WTL == OLEQ或许还有一些打印等斚w设施Q但我不觉得q些是主要特性。以我现在眼光来看待Q把MFC拆分开Q其集合cR打印框架?/span>COM支持?/span>OLE支持、文?/span>/视图/框架模板Q尽现在用的极,大多在行业Y仉域)、进E?/span>/U程/模块状态管理等Q都q不错,?/span>…Q貌似我快把它说全了Q不好意思,我的老毛病又犯了Q其实在心底Q我q有那么一点不舍,即便我很多年没有用它开发商业Y件了。我?/span>MFC学到的东西太多太多,以至于我不肯说它的坏话?/span>

 

再一ơ,我选择了从MFC中抽取代码。我试q直接?/span>MFCQ静态链接以便偷L不告诉别人,以免“破坏形象”。但我不觉得我能做到Q原因就是整?/span>MFC耦合的比较紧密,我不x者无法用整个框架来对外提供服务Q所以我不得不制造小轮子。我也试q直接实玎ͼ但是工作量还真不,我怕自q不及Q故再次出看家本领Q顺藤摸瓜,牵出一个支?/span>OLE的最内核,l过1-2周我能腾出的旉Q终于做CQ于是我写下了开,后面我需要把整个思\ȝ出来。下面是一个示例,插入览器,支持定位Ȁz:


 

q个例子不具备Q何说明性,只是用来试最的OLE内核框架是否可以工作?/span>

 

试的接口如下:


 

q一到此ؓ止!依然是闲话多Q干货少。我会努力的Q?/span>



]]>
CEGUI0.7 实践http://www.shnenglu.com/wlwlxj/archive/2012/05/16/175094.html万连?/dc:creator>万连?/author>Wed, 16 May 2012 09:09:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2012/05/16/175094.htmlhttp://www.shnenglu.com/wlwlxj/comments/175094.htmlhttp://www.shnenglu.com/wlwlxj/archive/2012/05/16/175094.html#Feedback1http://www.shnenglu.com/wlwlxj/comments/commentRss/175094.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/175094.html阅读全文

]]>
ZChrome开源提取的界面开发框??.3)http://www.shnenglu.com/wlwlxj/archive/2011/09/14/155792.html万连?/dc:creator>万连?/author>Wed, 14 Sep 2011 15:45:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/09/14/155792.htmlhttp://www.shnenglu.com/wlwlxj/comments/155792.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/09/14/155792.html#Feedback31http://www.shnenglu.com/wlwlxj/comments/commentRss/155792.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/155792.html
新的代码已经上传Q请?https://x-framework.googlecode.com/svn/trunk 更新

q一ơ的更新有些仓促Q主要是有一些网友希望能早些看到chrome的tab|果的具体实现Q目前来讲还有一些没实现的地方,会导致一些bugQ下载代码调试的时候,请忽视异常,勇敢的按下f5Q不能正帔Rl止调试或者杀掉进E,M崩溃不能退出的地方都有可能Q仅故学习参考?/div>
一些截图:






我认为chrome的架构在三个斚w做的非常好:通知pȝQ线E模?观察者模式)、preferencepȝ和extension扩展pȝQ非常具有互联网客户端特征,大部分功能都可以重用。适合搭徏互联|客Lq_Q然而在中国能驾驭如此全面架构的互联|企业应该也不多Q小步跑多P代需要依赖可靠的q_。其多进E的架构模型Q好处自然不用多_然而需要的架构水^之高恐怕很隑֜实际开发中真正全部跑v来?/div>

下面是所在团队用chrome遇到问题时候,我做的一些研I分析,在分析前我对chrome内部的线E对象关pM很模p,希望对他人有用?br />
chrome在线E和对象之间q作的一些基技巧,M来讲使用了三U设施,而不是一刀切,一个不规范的报告如下:

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
同一U程同一对象的方法异步调?    ScopedRunnableMethodFactory能保证对象自w异步方法调用的安全?/div>
同一U程不同对象之间的通知       调用者派生NotificationObserverQ通过NotificationRegistrar把自己注册到通知pȝQ通知源触发NotificationService          订阅模式Q线E内同步调用Q不存在对象生命周期的问?/div>
MessageLoopProxy是线E安全的引用计数对象Q内部封装了U程消息循环QMessageLoop销毁的时候会|空其MessageLoopProxy中的消息循环Q支持线E安全的异步调用Q适合在不同线E之间回调,回调q程是异步的Q所以牵扯到的参数必考虑对象生命周期以及对象Ҏ调用的线E问题。我的想法就是回调的对象最好是生命周期跟application的一致的大对象,充当managerQ这也正是一个管理者该做的事情Q,q样pl持回调对象的合法性?/div>
chrome推荐多用非U程安全对象Q也是对象Ҏ的执行都在对象创建的U程

Application<----------------------------------------------------------
   |--------|...                                                                        |
   V         V                                                                          |
UIU程    文gdU程     数据库读写线E?            |络U程 ...     |
UIMgr     FileIOMgr        DatabaseIOMgr           NetIOMgr       |
Obj...     Obj...                ...                             ...                |
Obj...     Obj...                ...                             ...                ---
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在chrome中运用最多的是第二种技法,因ؓ本n没有那么多对象需要跨U程Q其ơ是W三U,因ؓ互联|客L实存在不少的多U程数据理Q最后是W一U技法,q种情况较ؓ见?/div>
至于全面详尽的剖析,我没有精力或者暂时没有勇气去整理。后面代码的更新可能也会减缓Q自׃考虑在如何用这套框架做一些东ѝ?/div>


]]>ZChrome开源提取的界面开发框??.2.5)http://www.shnenglu.com/wlwlxj/archive/2011/09/02/154975.html万连?/dc:creator>万连?/author>Fri, 02 Sep 2011 14:32:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/09/02/154975.htmlhttp://www.shnenglu.com/wlwlxj/comments/154975.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/09/02/154975.html#Feedback18http://www.shnenglu.com/wlwlxj/comments/commentRss/154975.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/154975.html
随着对chrome的基库的熟悉以及qx的维护,M上来讲view框架以下的部分基本上E_。目前变动的主要是硬件加速部分,两个分支Qdirect2d和openglQ还有就是对touch的支持,最q又引入了aura的一套界面,应该是谷歌收买摩托之后的一些计划,但是具体是什么还不清楚?br />
作ؓ基础库学习的最后一个作业,我想实现一个windowq_下的chrome界面Q可能不是全部特性,但希望能做到量d。所有的实现会在?.3)的时候完成,预计期望带上一个webbrowser能勉强浏览网c其实在最初抽取这套东西的时候,几乎所有h都期望的是chrome的那个能随意拖拉的tabQ这ơ我也希望能实做一个出来?br />
本nbrowser的代码极其大Q我也无心恋战,一猛砍之后,居然奇般的能跑h一个空壻I真的是很ƣ慰Q算是一个中间阶D吧Q下面的工作是整理代码Q慢慢恢复一个最的外壳。目前状况见下图Q?br />

之后的下一步打是弄一套metroui风格的控Ӟ因ؓchrome的view框架本n对windows控g的封装也不多Q实C不多Q但是引擎确实极好,正好适合q一目的。可能会装出接口api甚至是集成脚本引擎,因ؓq些上层的东西对于大多数人来讲是喜欢的,他们懒得知道那么多细节,当然可能限制׃多一些?br />
======================================================================================
l箋Q?br />

前进一步:


W一个TabQ?br />        



开始支持拖?br />

开始支持拖拽TAB分离


当前release的exe大小?.98MQ静态链接crtQ不包含资源dll

]]>
ZChrome开源提取的界面开发框??.2)http://www.shnenglu.com/wlwlxj/archive/2011/08/24/154239.html万连?/dc:creator>万连?/author>Wed, 24 Aug 2011 11:49:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/08/24/154239.htmlhttp://www.shnenglu.com/wlwlxj/comments/154239.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/08/24/154239.html#Feedback19http://www.shnenglu.com/wlwlxj/comments/commentRss/154239.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/154239.html

svn: https://x-framework.googlecode.com/svn/trunk    重新下蝲代码

很久没有在svn上更新这套库里,但自己有旉的时候都在开发增加功能。这ơ的更新主要是在对activex的支持,一个界面库若想成ؓ框架Q必d备这U包Ҏ,臛_flash /webbrowser{主的控gq是会经常用到的。这一ơ主要是实现了无H口的flash、mediaplay和sl插gQ实Cmshtml和webbrowser的容UI参考有vc的sdk和国外对无窗口activex的研IӞ目前操纵接口仅仅供runQ没有深度的wrapper?/div>

q有一件事情就是纠正了之前的错误思想Q对chrome的基库私自做了大量修改导致维护更新很ȝQ目前基本上保持了对应,臛_我自pt代码的变更q是比较方便。这个过E中自己学到了很多非技术的东西Q技术上也看Cgoogle工程师对设计的精益求_。Chrome寚w层窗口的攚w部分,我一直有一些说不出的感觉,代码中说了一堆理由阐qCؓ何在下面预留1px的nc区,但是我在之前没有预留的时候反而更好?/div>

整个工程的结构如下:
x-framework
|
--binQ可执行E序Q?/div>
|
--examplesQ示例源码)
  |
  --demosQ基控g展示Q?/div>
  |
  --desktopQchrome桌面Q不知道有何意图Q?/div>
  |
  --iganttQ一个计划的囑Ş产品Q?/div>
  |
  --net_base_testQ暂时无用)
  |
  --status_trayQ应用层托盘库,很小Q?/div>
  |
  --wanui_resQ库依赖的资源)
|
--libQ框架库Q?/div>
|
--libraryQ库源码Q?/div>
  |
  --baseQ基库,标准法、字W串、内存工兗统计工兗多U程~程工具、窗口API装、消息܇{)
  |
  --net_baseQ暂时无用)
  |
  --skiaQskia在windowsq_使用的基本封装,主要是设备和位图的{换,支持32位位图)
  |
  --third_partyQ第三方库)
  |
  --ui_baseQ作为view库的基础Q对windows的消息事件等做了一层封装和扩展Q?/div>
  |
  --ui_gfxQؓview库提供更好地囑Ş装Q点UK路径囑փ支持、坐标{换支持)
  |
  --viewQ基于windows的顶层窗口对H口世界的chrome化,兼容无窗口和有窗口的界面引擎Q我增加了一些扩展)

一些demo截图Q?/div>









q些CZ管一眼看上去q不是那么震|局限因素不是技术,目前的问题就是控件数量不够丰富,chrome里面无窗口的控gl制采用了native主题Q当然这或许不是我目前非常看重的Q它能给开发者提供的便利性才是我q求的。早期版本我也在正式的项目中采用Q用的q程中,掌握了很多技巧,也走了弯路。对于一个强大的库,如果使用的不好可能反而觉得别扭?/div>


]]>ZChrome开源提取的界面开发框??.1.5)http://www.shnenglu.com/wlwlxj/archive/2011/06/04/148046.html万连?/dc:creator>万连?/author>Sat, 04 Jun 2011 05:47:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/06/04/148046.htmlhttp://www.shnenglu.com/wlwlxj/comments/148046.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/06/04/148046.html#Feedback25http://www.shnenglu.com/wlwlxj/comments/commentRss/148046.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/148046.html 无窗口richedit的机制基本实玎ͼ剩下的是接口调用装和事件的设计?br />
一周的旉d了无H口richviewQ机制上没有采取Mhack方式Q完全靠实现ITextHost接口以及作用ITextService接口Q?br /> 1、支持输入法~辑
2、支持滚?暂时没有滚动条,待添?)
3、支持拖?br />
主要参考的CZ为微软的例子windowlessreQ由于chrome的view自n装的限制导致实现的时候有许多框架Q封装)引入的障,Z可能少的改动引擎自w,我只做了很少的^C赖调_很多旉都消耗在框架机制上?br /> 至于一些颜艌Ӏ字体、文本操作、ole囄的接口、事件和mvc的抽象在接下来会实现Q应该没有太大难度了Q确保控件的_控制和完解x案。代码已l上传svn: http://code.google.com/p/x-framework/?br />
截图Q?br />


实现无窗口的activex控g支持(flash mediaplayer) .net控g  wpf控g







׃怹才把activexq块处理完整Q实C无窗口的flash mediaplayerQ支持容Uwebbrowser以及html文Q至于sl插g的支持也会考虑Q下一步会转向无窗口的richedit重构和功能完善:






sl插g支持Q?br />

]]>
UL?000泄漏代码中的ie部分代码http://www.shnenglu.com/wlwlxj/archive/2011/06/01/147904.html万连?/dc:creator>万连?/author>Wed, 01 Jun 2011 15:58:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/06/01/147904.htmlhttp://www.shnenglu.com/wlwlxj/comments/147904.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/06/01/147904.html#Feedback11http://www.shnenglu.com/wlwlxj/comments/commentRss/147904.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/147904.htmlq䆾代码在我的硬盘里面静静呆了一q_最起初的研I是惛_习改造利用,C后来发现代码l构q不是很优雅Q自q掌控能力有限Q且是商业泄漏代码,所以放弃了l箋攚w,但是整个UL的过E让我直C日都受益匪浅?br />
q䆾代码可以q行跑v来,但不是ieQ当时是5.xQ的全部。后来有一些h出去好奇想看Q我没有l出。微软的代码设计模式用的q不淋漓致Q但是d以直击要実뀂我看到w边的hZ设计模式而用设计模式的时候,写了很多代码控制力ƈ不是很强或者ƈ不是真正的解耦合Q我x必要把这个东西拿出去Q希望他们能思考或者反思一些问题。当Ӟ希望你只是出于学习目的,毕竟是泄露的商业代码Q我也无暇也不敢d具体分析Q希望不会引出祸端?br />
分卷一
分卷?/a>


]]>ZChrome开源提取的界面开发框??.1)http://www.shnenglu.com/wlwlxj/archive/2011/05/27/147373.html万连?/dc:creator>万连?/author>Fri, 27 May 2011 08:17:00 GMThttp://www.shnenglu.com/wlwlxj/archive/2011/05/27/147373.htmlhttp://www.shnenglu.com/wlwlxj/comments/147373.htmlhttp://www.shnenglu.com/wlwlxj/archive/2011/05/27/147373.html#Feedback8http://www.shnenglu.com/wlwlxj/comments/commentRss/147373.htmlhttp://www.shnenglu.com/wlwlxj/services/trackbacks/147373.html

q期开发计?
1.无窗口的richedit支持,包括ole囄以及D落支持,q些是IMcd需的组?已经开?   --预计6月初完成
2.览器类lg支持,预计包括webbrowser和webkit,后者近来的需求越来越?管有挑战也要试一?到时候参考qt   --预计6月底完成
3.flashH口的支?q个可能有些地方会用?比较Ҏ   --预计7月初完成
希望大家有好的这斚w源码参考或者徏议的能给我留a.

问题Q?/p>

1.Chrome中的光标讄依赖于mousemove消息Q快速移动鼠标的时候会D光标状态闪烁,试修复为wm_setcursor

2.Chrome中的NativeTextfieldView输入框非常复杂且处理的不完整Q考虑U除用richedit相关接口替换

随记Q?/p>

widget是一个窗体的抽象   widget_win是winH体的实?/p>

window引入了非客户区的概念Q允许最化最大化模态等H体概念  window_win则是其winq_的实?带有标题栏的)


2011.5.29:实现了无H口richedit的拖?br />

2011.5.30:实现了无H口richedit的输入编?br />



]]>ZChrome开源提取的界面开发框??/title><link>http://www.shnenglu.com/wlwlxj/archive/2011/05/17/146563.html</link><dc:creator>万连?/dc:creator><author>万连?/author><pubDate>Tue, 17 May 2011 07:05:00 GMT</pubDate><guid>http://www.shnenglu.com/wlwlxj/archive/2011/05/17/146563.html</guid><wfw:comment>http://www.shnenglu.com/wlwlxj/comments/146563.html</wfw:comment><comments>http://www.shnenglu.com/wlwlxj/archive/2011/05/17/146563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wlwlxj/comments/commentRss/146563.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wlwlxj/services/trackbacks/146563.html</trackback:ping><description><![CDATA[<br />    q里用三Q主要是考虑公布开源地址Q意味着一个新的开始?br /><br />    源码开源地址Q?a >http://code.google.com/p/x-framework/</a><br /><br />    代码更新?Chrome的r80414版本(大致一月前)Q最q一直在学习Browser部分加之自己工作上的一些事情,有点慢。稍微稳定点会加快速度QBrowser部分已经看的差不多,一有时间就会动手。有些关注的人给我email问我Q这里做一个解释,原本惛_的更好再公布开源地址的?img src ="http://www.shnenglu.com/wlwlxj/aggbug/146563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wlwlxj/" target="_blank">万连?/a> 2011-05-17 15:05 <a href="http://www.shnenglu.com/wlwlxj/archive/2011/05/17/146563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.disidai.cn" target="_blank">Ʒþþ</a>| <a href="http://www.aion66.cn" target="_blank">þĻ</a>| <a href="http://www.xjfish.cn" target="_blank">ŷ˾þۺһ</a>| <a href="http://www.yxwelding.com.cn" target="_blank">þþƷݲݲ</a>| <a href="http://www.matory.cn" target="_blank">þþƷ99þ޶ </a>| <a href="http://www.bttzc.cn" target="_blank">ŷѹۿþ</a>| <a href="http://www.lafei02.cn" target="_blank">Ʒѿþþ</a>| <a href="http://www.dyhao.com.cn" target="_blank">Ʒþþþþ </a>| <a href="http://www.newlifefitness.cn" target="_blank">ĻƷѾþþ</a>| <a href="http://www.yb121.com.cn" target="_blank">þþƷҹһ</a>| <a href="http://www.yghzby.cn" target="_blank">þþþó˾ƷĻ </a>| <a href="http://www.hf169.cn" target="_blank">ƷۺϾþþþþ97</a>| <a href="http://www.xwgqzp.cn" target="_blank">޾Ʒһþþ</a>| <a href="http://www.515176x.cn" target="_blank">þþþþþƷѿSSS</a>| <a href="http://www.110xi.cn" target="_blank">ݺɫþþһ</a>| <a href="http://www.jjygw.cn" target="_blank">51þҹɫƷ</a>| <a href="http://www.w9839.cn" target="_blank">ƷžžþþƷŮͬŷպۺ </a>| <a href="http://www.xibeiguangdian.cn" target="_blank">99þѹƷ</a>| <a href="http://www.bolson.cn" target="_blank">91þþƷ91ɫҲ</a>| <a href="http://www.xkart.cn" target="_blank">þۺ97ɫֱ</a>| <a href="http://www.ehzc.cn" target="_blank">ŷ޹Ʒþ</a>| <a href="http://www.shantiee.cn" target="_blank">þٸ۲AVר</a>| <a href="http://www.jlxrc.cn" target="_blank">91ƷɫۺϾþ</a>| <a href="http://www.lingxiu98.com.cn" target="_blank">ۺϾþþþþ </a>| <a href="http://www.sfwan.cn" target="_blank">þþƷһWWW</a>| <a href="http://www.t8s.com.cn" target="_blank">޹ŮƷþþþá</a>| <a href="http://www.by6463.cn" target="_blank">ƷŮþþþ</a>| <a href="http://www.1985328.cn" target="_blank">þþþ뾫Ʒ</a>| <a href="http://www.7708.com.cn" target="_blank">ŷAŷaþ </a>| <a href="http://www.uywz.cn" target="_blank">ҹþþþþþþõӰ</a>| <a href="http://www.hbqw.net.cn" target="_blank">þùɫAVѹۿ</a>| <a href="http://www.nxjinniu.com.cn" target="_blank">AëƬþþþƷëƬ</a>| <a href="http://www.dgcry.cn" target="_blank">ձWVһһþ㽶</a>| <a href="http://www.sh-yd.com.cn" target="_blank">ƷþþþþþþĻ</a>| <a href="http://www.mayingbao.cn" target="_blank">ξþ99Ʒþþþþ</a>| <a href="http://www.nthaixin.com.cn" target="_blank">޾ƷƬþ</a>| <a href="http://www.gbagba.cn" target="_blank">Ʒ˾þþþӰԺ</a>| <a href="http://www.goomba.cn" target="_blank">ݺɫݺɫۺϾþ</a>| <a href="http://www.hskx.org.cn" target="_blank">ƷþƷ </a>| <a href="http://www.zambak.cn" target="_blank">þҹҹ³³ƬӰ </a>| <a href="http://www.xinanyue.cn" target="_blank">þþƷ99Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>