青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

萬(wàn)星星@豌豆莢 歡迎加入我們
一個(gè)吃軟飯的男人!!!!!我只想寫程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0

最近工作上比較忙,加之編碼任務(wù)較多,沒來(lái)得及繼續(xù)之前的講解。抽出時(shí)間把這最重要的一部分東西做個(gè)闡述。行文以基本的編程思維及個(gè)人思考過(guò)程為線索。

 

眾所周知,RichEdir強(qiáng)大在于其圖文混排(在這里不跟Word、HTML比),其中的圖替換為動(dòng)態(tài)圖的核心問(wèn)題就歸結(jié)于如何高效刷新。我們知道GDI操作是最消耗CPU的,所以刷新整個(gè)RichEdit窗口是不可取的,其副作用會(huì)導(dǎo)致更嚴(yán)重的閃爍問(wèn)題。解決問(wèn)題的思路很簡(jiǎn)單:類似于拖拽時(shí)候在屏幕繪制異或線,我們的動(dòng)畫重繪時(shí)不請(qǐng)求RichEdit,而直接在其窗口的DC上繪制當(dāng)前動(dòng)畫幀,此時(shí)缺少是如何確定該OLE的位置,這個(gè)是所有問(wèn)題的關(guān)鍵。先看下面這幅圖:

 

假定1-5全部都是GIF圖片,非GIF可以暫時(shí)無(wú)視,這個(gè)后面大家會(huì)非常清楚如何處理。在這個(gè)過(guò)程中,2不見了,而4是新出現(xiàn)的。對(duì)于4新出現(xiàn)時(shí),RichEdit自身肯定會(huì)觸發(fā)其:

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)

 

這個(gè)時(shí)候,我們知道新的GIF圖片進(jìn)入可視區(qū),可以把它添加到集合中。對(duì)于2的動(dòng)畫觸發(fā)時(shí)間到來(lái)時(shí),我們可以確定其位置且與可視區(qū)比對(duì),發(fā)現(xiàn)其不再可視區(qū),則從集合中移除。這樣就可以得到一個(gè)接近于(略大于)當(dāng)前視口中的動(dòng)畫控件集合,當(dāng)有新的動(dòng)畫觸發(fā)時(shí)間到來(lái)時(shí),我們可以先檢查其是否在可視區(qū),如果不在則不用GDI操作,僅僅更新其當(dāng)前幀。當(dāng)然這些工作你也可以不做,但是在動(dòng)畫控件數(shù)量大的時(shí)候效率可能略有下降,主要是查找的過(guò)程(索引、位置)比較耗時(shí)。

 

如何確定一個(gè)OLE的位置呢?由于我們插入OLE都使用了REO_BELOWBASELINE標(biāo)志,也就是跟當(dāng)前行的底部對(duì)齊,所以O(shè)LE左下角位置的精確度對(duì)我們來(lái)說(shuō)很重要。看下圖:

假設(shè)圖中黑框是一個(gè)OLE對(duì)象,其字符索引為CPN,假定第N+1行的第一個(gè)字符索引為CPN1,那么OLE左下角坐標(biāo)={PosFromChar(CPN).x, PosFromChar(CPN1).y },PosFromChar這個(gè)是RichEdit提供的。問(wèn)題的關(guān)鍵是最后一行怎么計(jì)算?此時(shí)沒有第N+1行。對(duì)于這種特殊情況,主要是Y坐標(biāo)的計(jì)算,可以這樣考慮:Y=RichEdit內(nèi)容高度-滾動(dòng)條位置。猜測(cè): 計(jì)算內(nèi)容高度可能比較耗時(shí),故QQ的聊天消息顯示部分強(qiáng)制在底部加了一行,以避免這種情況出現(xiàn)。

 

得到左下角位置以后,可能你會(huì)覺得就萬(wàn)事大吉了。錯(cuò)!還有一個(gè)關(guān)鍵點(diǎn)!我們可以通過(guò)OLE的接口GetExtent得到其大小,然而這個(gè)大小沒有考慮縮放比例,所以你需要根據(jù)當(dāng)前縮放比例進(jìn)行計(jì)算,而這個(gè)計(jì)算牽扯到浮點(diǎn)數(shù)運(yùn)算,過(guò)程中的來(lái)回不僅麻煩而且不精確,所以O(shè)LE的可視大小要想非常精確是不能通過(guò)計(jì)算來(lái)的。我們前面知道OLE繪制的時(shí)候會(huì)傳入可視范圍,假如我們保存下來(lái)是不是就可以解決問(wèn)題了呢?當(dāng)然,顯然,你可以試試!

這些問(wèn)題主要原因是RichEdit的很多接口方法沒有暴露,而Win8的SDK會(huì)做重大升級(jí),很多之前的問(wèn)題都會(huì)變成不是問(wèn)題,或許還會(huì)引起更多的新特性,但是動(dòng)畫本身的邏輯還是需要自己實(shí)現(xiàn),或者會(huì)簡(jiǎn)單許多,至于多少我還尚不清楚,但是目前來(lái)看這種方案效率足夠! 

 

到了這里,核心技術(shù)應(yīng)該大白天下,整個(gè)過(guò)程,我追求了位置的精準(zhǔn)度,并據(jù)此獲得最小可視集合進(jìn)行刷新優(yōu)化。

 

最新SDK&Demo,參見:http://code.google.com/p/im-solution/。希望你會(huì)喜歡!

posted on 2012-09-08 18:10 萬(wàn)連文 閱讀(4849) 評(píng)論(16)  編輯 收藏 引用 所屬分類: 小作品richedit

FeedBack:
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-08 19:09 | iunkown
問(wèn)一下,GIF對(duì)應(yīng)的IOleInPlaceSite::GetWindowContext 取到的位置是否準(zhǔn)確?為什么要用GetExtent呢?

我的一個(gè)實(shí)驗(yàn)DEMO的SOURCE CODE如下,
http://m.shnenglu.com/Files/mcs51a/GifDisplayCtrl.rar

DEMO中代碼比較偷懶,可能有不準(zhǔn)確的地方  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-08 19:39 | 萬(wàn)連文
@iunkown
這個(gè)我沒有測(cè)試過(guò),也沒有考慮過(guò),不過(guò)確實(shí)是一種思路,你可以自己確認(rèn)。但是我的方法未嘗不是好方法,不是么?


后來(lái)我看了你的東西,覺得就是前面說(shuō)的毫無(wú)章法,無(wú)頭蒼蠅。你的那個(gè)鏈接我看了,連運(yùn)行一下的心情都木有。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-08 20:04 | 路障
呵呵,萬(wàn)大俠,我之前以為你用了OLE接口的其它方法刷新的,原來(lái)也是直接在DC上面繪制的。

我還想問(wèn)個(gè)問(wèn)題,當(dāng)你在DC上面繪制GIF幀的時(shí)候,你如何獲取RichEdit的背景顏色或者背景圖片?因?yàn)樽约褐苯釉贒C上面繪制時(shí),是不會(huì)像在OLE接口的Draw()函數(shù)里面那樣,已經(jīng)由系統(tǒng)先繪制了背景的。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-08 20:06 | 萬(wàn)連文
@路障
看我的Demo,看我的接口,你就會(huì)發(fā)現(xiàn)我是怎么做的!!給我點(diǎn)面子唄。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-09 11:30 | Loaf
一直RSS,博主非常高產(chǎn)啊……  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-09 12:32 | 萬(wàn)連文
@Loaf
其實(shí)我非常少做項(xiàng)目,很多工作時(shí)間用來(lái)搞這些興趣。

我個(gè)人表示對(duì)RSS不太了解,有點(diǎn)土鱉。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-09 15:50 | 路障
@萬(wàn)連文

萬(wàn)大俠,之前的評(píng)論絕對(duì)沒有取笑的意思。還是多虧了萬(wàn)大俠,提供了這么多篇網(wǎng)上幾乎沒有詳細(xì)講的教程,使我們受益良多。否則還要走更多的彎路呢。繼續(xù)膜拜萬(wàn)大俠。
  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-12 14:07 | M77
@Loaf

google Reader的RSS鏈接出現(xiàn)錯(cuò)誤了
  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-12 14:09 | M77
@萬(wàn)連文
樓主這SDK頭文件寫得很有Google的范  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2012-09-12 14:28 | 萬(wàn)連文
@M77
過(guò)獎(jiǎng),回頭一看又發(fā)現(xiàn)幾個(gè)不標(biāo)準(zhǔn)的地方,努力遵守Google規(guī)范。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-01-05 03:28 | 程旭
慨嘆天下文章一大抄,天下程序也是一大抄,就看你怎么抄,抄的有沒有思想,呵呵。老萬(wàn)研究很透徹,盡管描述不適合初學(xué)者,但是非常不錯(cuò)了。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-01-05 20:36 | 程旭
全部重建感覺放棄ATL太浪費(fèi),盡管Ctrl鍵按的次數(shù)不多,呵呵。重建了Create其他可以沿用ATL也可以,這方面效率沒影響。繪制方法對(duì)效率可差萬(wàn)倍。所以重點(diǎn)還是對(duì)richedit的擴(kuò)展,STL使用必不可少,不嫌費(fèi)事當(dāng)然可以自己寫鏈表之類的。不知 萬(wàn)老師 現(xiàn)在又開始研究什么新東西了?  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-01-05 22:54 | 萬(wàn)連文
@程旭
最近這幾個(gè)月從研究webkit,轉(zhuǎn)向虛擬機(jī)字節(jié)碼,然后有轉(zhuǎn)向IDA OD學(xué)習(xí),比較閑散自由無(wú)目的,但是沒有偷懶就好。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-01-07 01:16 | 程旭
@萬(wàn)連文
IDA對(duì)沒加密的很好用,OD對(duì)付加密的絕佳。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-01-11 07:14 | 程旭
600動(dòng)態(tài)表情同時(shí)顯示,CPU占用1%也許0%。  回復(fù)  更多評(píng)論
  
# re: richedit研究06 – 高效動(dòng)畫刷新
2013-05-21 16:25 | 楊瀟
我來(lái)這里是為了感謝博主@萬(wàn)連文 的。博主提供了從動(dòng)畫OLE類要實(shí)現(xiàn)的接口,到如何精確地找出需重繪的動(dòng)畫這一整套信息,在思路上的參考價(jià)值再怎么高估也不過(guò)分。

同時(shí),通過(guò)對(duì)微軟WindowlessRE項(xiàng)目的參考,我終于成功地將無(wú)窗口模式的RichEdit、RichEdit動(dòng)畫控件集成到了我們內(nèi)部自己實(shí)現(xiàn)的DirectUI界面之中。

萬(wàn)大俠提供的思路讓我節(jié)省了大量時(shí)間,少走了N多彎路。

再次謝謝萬(wàn)大俠的分享!
  回復(fù)  更多評(píng)論
  
簡(jiǎn)歷下載
聯(lián)系我

<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(66)

隨筆分類

隨筆檔案

相冊(cè)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99综合在线| 国产精品久久久久久超碰| 亚洲经典在线看| 在线一区视频| 亚洲午夜一二三区视频| 亚洲欧美视频在线观看| 欧美专区在线| 六月天综合网| 欧美第一黄网免费网站| 欧美福利一区二区三区| 亚洲欧洲日本专区| 99精品欧美一区二区三区| 亚洲精品午夜精品| 亚洲伊人伊色伊影伊综合网| 欧美一区二区三区视频在线观看| 亚洲视频在线一区| 亚洲国产美国国产综合一区二区| 久久精品中文字幕一区二区三区| 久久久免费精品| 亚洲国产精品嫩草影院| 亚洲美女毛片| 欧美亚洲三区| 欧美高清视频在线播放| 国产精品萝li| 亚洲激情第一页| 欧美一级视频一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲黄色尤物视频| 欧美一区二区三区四区高清| 欧美激情亚洲视频| 国产一区二区三区四区五区美女| 亚洲精品日日夜夜| 久久国产毛片| 夜夜嗨av一区二区三区| 久久久夜精品| 国产精品视频一二三| 亚洲国产成人久久综合| 欧美亚洲免费电影| 亚洲精品欧美专区| 久久久久免费| 国产精品私房写真福利视频| 亚洲电影免费观看高清完整版在线 | 亚洲一区二区三区视频播放| 久久黄色网页| 亚洲伦理一区| 欧美成人激情在线| 黑人巨大精品欧美黑白配亚洲 | 久久亚洲综合色一区二区三区| 欧美日韩一区二区三区在线看| 在线观看欧美日本| 猫咪成人在线观看| 久久久久久久久久久一区| 国产亚洲观看| 久久久久中文| 欧美在线观看视频一区二区| 国产麻豆精品theporn| 亚洲欧美日韩第一区 | 久久久亚洲一区| 国产一区二区三区高清在线观看| 午夜影视日本亚洲欧洲精品| 亚洲伊人久久综合| 国产精品一区二区男女羞羞无遮挡 | 性做久久久久久| 一本大道久久精品懂色aⅴ| 久久婷婷成人综合色| 国产农村妇女毛片精品久久麻豆 | 亚洲免费在线视频一区 二区| 麻豆精品在线观看| 销魂美女一区二区三区视频在线| 欧美久久综合| 亚洲人午夜精品| 亚洲精品亚洲人成人网| 久久这里只有| 悠悠资源网久久精品| 香蕉免费一区二区三区在线观看| 亚洲国产精品成人| 免费成人黄色片| 一区在线免费观看| 老司机免费视频久久| 欧美一区二区三区成人| 国产精品久久久久久久久久直播| 国产综合香蕉五月婷在线| 在线视频欧美日韩精品| 最新成人在线| 欧美日韩在线高清| 正在播放欧美视频| 亚洲精品一区中文| 欧美日韩国产精品专区| 99这里只有久久精品视频| 亚洲人www| 欧美视频精品一区| 欧美一区二区三区在线观看视频| 亚洲深夜av| 欧美理论电影在线观看| 久久成人综合网| 久久av一区二区三区亚洲| 国产原创一区二区| 欧美99在线视频观看| 快she精品国产999| 99精品欧美| 亚洲一区二区三区中文字幕在线| 国产女精品视频网站免费| 久久久久.com| 国产精品欧美精品| 久久人人看视频| 欧美成人四级电影| 亚洲视频在线观看网站| 翔田千里一区二区| 亚洲激情视频在线| 亚洲视频图片小说| 一区二区在线观看视频| 久久精品91| 国产精品久久久久久久久久直播| 欧美一级久久| 亚洲欧美日韩在线| 亚洲美女在线视频| 国产乱理伦片在线观看夜一区| 久久天天躁夜夜躁狠狠躁2022| 欧美阿v一级看视频| 一区二区三区四区五区视频| 亚洲男人的天堂在线| 在线精品视频免费观看| 一区二区三区.www| 在线电影一区| 一本色道久久综合| 在线电影院国产精品| 99视频热这里只有精品免费| 黑人中文字幕一区二区三区| 亚洲精品久久7777| 黄色成人片子| 亚洲无线一线二线三线区别av| 韩国成人精品a∨在线观看| 亚洲三级免费| 在线观看日韩欧美| 午夜精品久久一牛影视| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲免费在线看| 在线亚洲欧美| 男人天堂欧美日韩| 美女成人午夜| 韩日精品视频| 欧美一级淫片播放口| 亚洲欧美日本国产有色| 久久国产精品毛片| 欧美1区免费| 国内精品美女在线观看| 亚洲已满18点击进入久久| 一区二区三区精品视频在线观看| 久久久综合精品| 久久久噜噜噜久久中文字幕色伊伊| 国产精品sm| 亚洲一区二区久久| 亚洲在线视频观看| 欧美日韩一区二| 日韩视频免费| 亚洲一区精品视频| 欧美日韩视频在线一区二区| 亚洲大片免费看| 亚洲黄色尤物视频| 麻豆av一区二区三区| 欧美大片在线影院| 亚洲欧洲美洲综合色网| 老鸭窝亚洲一区二区三区| 久久一区二区三区国产精品| 亚洲免费播放| 欧美欧美天天天天操| 亚洲精品男同| 亚洲色图在线视频| 国产精品久久久久久久第一福利 | 欧美激情影院| 国产亚洲精品v| 亚洲精品在线免费观看视频| 国内精品久久久久久久97牛牛| 亚洲黄色在线看| 乱码第一页成人| 亚洲国产另类精品专区| 欧美激情亚洲另类| 亚洲一区二区三区精品动漫| 欧美精品日韩综合在线| 亚洲精品黄色| 香蕉久久夜色精品国产| 国产欧美在线播放| 久久久人成影片一区二区三区| 毛片基地黄久久久久久天堂| 在线观看欧美日韩| 亚洲一区免费看| 性色av一区二区三区| 在线观看视频一区| 欧美精品三级在线观看| 亚洲视频在线观看| 久久视频一区| 欧美性大战久久久久久久| 亚洲在线视频免费观看| 亚洲宅男天堂在线观看无病毒| 欧美视频在线观看视频极品| 亚洲性感美女99在线| 蜜臀av性久久久久蜜臀aⅴ| av成人免费在线| 国产午夜精品全部视频在线播放 | 中文网丁香综合网|