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

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

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

 

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

 

假定1-5全部都是GIF圖片,非GIF可以暫時無視,這個后面大家會非常清楚如何處理。在這個過程中,2不見了,而4是新出現(xiàn)的。對于4新出現(xiàn)時,RichEdit自身肯定會觸發(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)

 

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

 

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

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

 

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

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

 

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

 

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

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

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

我的一個實驗DEMO的SOURCE CODE如下,
http://m.shnenglu.com/Files/mcs51a/GifDisplayCtrl.rar

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


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

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

我個人表示對RSS不太了解,有點土鱉。  回復(fù)  更多評論
  
# re: richedit研究06 – 高效動畫刷新
2012-09-09 15:50 | 路障
@萬連文

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

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

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

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

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

<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(66)

隨筆分類

隨筆檔案

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合狠狠综合久久综合88 | 亚洲视频一二三| 欧美成人日本| 免费欧美视频| 亚洲高清123| 亚洲黄色影院| 99www免费人成精品| 亚洲视频国产视频| 久久爱www久久做| 蜜桃精品久久久久久久免费影院| 美女啪啪无遮挡免费久久网站| 欧美福利一区二区三区| 欧美午夜理伦三级在线观看| 一本色道久久综合狠狠躁篇的优点 | 国产免费亚洲高清| 国产精品夜夜夜| 好吊日精品视频| 亚洲欧洲日本国产| 亚洲免费视频在线观看| 久久久久久9999| 亚洲电影免费观看高清完整版| 亚洲激情在线激情| 亚洲少妇在线| 久久中文在线| 欧美成人激情视频| 一区二区三区波多野结衣在线观看| 午夜精品在线观看| 欧美国产日韩在线| 国产亚洲欧美一区| 国产精品99久久久久久久久久久久 | 欧美成年人视频网站| 国产精品wwwwww| 亚洲高清不卡av| 欧美一区二区免费观在线| 免费观看不卡av| 亚洲一区二区三区高清| 欧美大片在线看| 国内久久婷婷综合| 亚洲深夜av| 欧美xart系列高清| 亚洲欧美久久久| 欧美日韩国产一区精品一区 | 国产精品天美传媒入口| 亚洲欧洲精品一区| 久久久亚洲高清| 亚洲在线播放| 国产精品久久久久久av下载红粉| 亚洲精品乱码| 欧美成人亚洲成人| 久久久久青草大香线综合精品| 国产精品久久久久婷婷| 一本久道综合久久精品| 亚洲第一久久影院| 久久综合色一综合色88| 激情小说另类小说亚洲欧美 | 99精品免费| 欧美区在线观看| 亚洲精品偷拍| 亚洲精品久久久久久下一站| 国产小视频国产精品| 欧美精品国产一区| 黑人中文字幕一区二区三区| 亚洲视频每日更新| 亚洲免费久久| 国产精品福利在线观看网址| 亚洲视频axxx| 一区二区国产在线观看| 国产精品日本精品| 欧美一区二区三区男人的天堂| 亚洲伊人观看| 精品1区2区| 亚洲国产成人久久| 欧美麻豆久久久久久中文| 在线视频精品一| 亚洲午夜精品一区二区三区他趣| 国产精品美女久久久久久免费| 亚洲欧美视频| 欧美在线免费播放| 91久久精品一区二区三区| 亚洲精品视频在线播放| 国产精品久久久久久久一区探花 | 亚洲乱码精品一二三四区日韩在线 | 久久国产免费| 久久久久久久网| 亚洲日本aⅴ片在线观看香蕉| 亚洲高清123| 欧美午夜无遮挡| 久久久久久久欧美精品| 免播放器亚洲一区| 亚洲欧美日韩一区| 久久精品女人| 99精品国产高清一区二区| 亚洲一区二区三区免费观看| 红桃视频国产精品| 日韩天天综合| 在线观看一区欧美| 一二三四社区欧美黄| 狠狠色狠狠色综合日日91app| 欧美激情日韩| 国产午夜精品久久| 亚洲毛片播放| 在线精品国精品国产尤物884a| 亚洲美女网站| 亚洲国产精品999| 先锋资源久久| 亚洲一区二区免费在线| 久久久999精品| 亚洲欧美影音先锋| 欧美精品午夜视频| 免费高清在线视频一区·| 国产精品区免费视频| 亚洲啪啪91| 亚洲国产欧美一区| 久久av二区| 久久网站免费| 欧美日韩福利视频| 久久视频在线免费观看| 欧美视频一二三区| 欧美电影免费观看高清完整版| 国产精品国产福利国产秒拍| 另类激情亚洲| 国产亚洲成av人在线观看导航| 亚洲精品一区在线| 亚洲国产综合视频在线观看| 午夜伦理片一区| 亚洲欧美区自拍先锋| 欧美精品免费在线观看| 欧美xxx成人| 在线观看日韩精品| 久久久国产91| 美女日韩欧美| 尤物九九久久国产精品的分类| 亚洲欧美国产制服动漫| 亚洲欧美国产不卡| 国产精品乱人伦一区二区| 一本大道久久a久久精二百| 日韩视频永久免费观看| 浪潮色综合久久天堂| 欧美好骚综合网| 最近中文字幕mv在线一区二区三区四区| 欧美在线一二三区| 久久影视精品| 亚洲国产高清自拍| 欧美黄色一区二区| 亚洲精品乱码久久久久| 亚洲美女av在线播放| 欧美美女bb生活片| 99精品国产在热久久| 亚洲欧美日韩区| 国产一区二区三区四区五区美女| 欧美亚洲视频一区二区| 久久久九九九九| 亚洲国产精品一区二区www在线| 美女视频黄 久久| 亚洲欧洲一区二区三区| 亚洲一区观看| 国内精品久久久久久久果冻传媒| 久久精品中文| 亚洲国产日韩欧美在线99| 一区二区三区**美女毛片| 国产精品美女久久久久久免费| 西西人体一区二区| 亚洲高清毛片| 午夜激情综合网| 在线观看91精品国产麻豆| 欧美精品aa| 翔田千里一区二区| 亚洲国产精品久久久久| 亚洲一区二区三区高清| 国产一区免费视频| 欧美日韩国产成人精品| 午夜欧美不卡精品aaaaa| 欧美激情小视频| 欧美一区二区在线观看| 亚洲七七久久综合桃花剧情介绍| 国产精品久久久久天堂| 狼人天天伊人久久| 中文亚洲欧美| 欧美国产激情| 久久久久久久成人| 夜夜夜久久久| 亚洲第一综合天堂另类专| 国产精品久久久久国产a级| 免费视频一区| 欧美一级网站| 久久久久国产一区二区| 亚洲亚洲精品在线观看| 免费精品99久久国产综合精品| 日韩一二三区视频| 国产亚洲欧洲997久久综合| 欧美猛交免费看| 久久免费黄色| 午夜精品区一区二区三| 亚洲伦理精品| 亚洲成人在线视频播放 | 欧美一区二区高清| 99精品视频免费全部在线| 欧美成人精品在线| 久久久久久久久久久一区| 午夜激情亚洲|