有乙個同事想出乙個方法,使用剪下板來代替pasterhtml這樣的操作,因為貼上乙個html有格式的內容是可以撤銷的,這樣就又會涉及到乙個問題,如果借用了剪下板的內容就需要備份之前的內容,並在使用完之後恢復,不管原來是、純文字、還是word、**、帶格式的複雜的內容。
首先在msdn上找到這篇文章:
因為我需要加入的是乙個html**所以找來了它所需要的格式,並使用setclipboarddata進行設定。
官方格式示例:
構造header**:
1其中selection是可選的,過載了運算子<int clipboardhtmlheader::size() const214
15 std::ostream& operator
<
1630
31bool
cricheditor::copyhtmltoclipboard(lpcwstr lpszwide)
3273
74return
false
;75 }
接下來需要在insert table的之前深拷貝剪下板的內容到記憶體中,在時候恢復記憶體的資料到剪下板中,這其中對使用者都是不可知的並且速度也是相當快的。
剛開始我們以為globallock剪下板所獲得的記憶體塊是安全的,所以寫了**在push的時候lock,然後在pop的時候unlock,誰知道呼叫emptyclipboard後就照樣清空了,只能老老實實的拷貝全部的記憶體資料了,我們採用了map來暫存剪下板中各種型別的資料,針對不同的format的clipboard分別存到不同的map中。
1 std::map_clipdata;切記第10、11行必須這樣寫,必須在closeclipboard之後來globalfree,否則就沒辦法恢復到備份clipboard之前的狀態了。2void
cricheditor::popclipboarddata()315
16void
cricheditor::pushclipboarddata()
1736}37
38::emptyclipboard();
39::closeclipboard();
40 }
差不多到這裡就是今天一天的奇遇的全部內容了。。。
相信很多人碰到這個問題的時候最開始都受到
所誤導,根本就不能用,問題是**寫的亂七八糟,怕是只有自己能看得懂。例如105這個數值是怎麼來的?length+4又為什麼?
希望祖國的花朵們不要再受到外國人的毒**摧殘了。。.今天就寫到這裡,希望black早點回家~
windows程式設計之剪下板
程序通訊的方式很多,可以通過套接字,管道,記憶體共享,wm copydata訊息,當然剪下板也是一種方式,並且在以後的環節還可能用得比較多。使用剪下板的步驟主要是 開啟剪下板,傳送端 大概如下 hwnd hedit getdlgitem hwnd,idc edit input tchar szedi...
剪下板操作 複製,剪下
copyfile.h pragma once include include include include include include using namespace std class ccopyfilesoper copyfile.cpp include stdafx.h include ...
CEGUI剪下板功能
剪下板功能實現,具體方法很簡單 分2部分 測試 在editbox裡實現剪下板 第一,字元的轉換,在editbox裡加入了2個函式,是cegui string 和 std string之間的轉換 第二,在void editbox onkeydown keyeventargs e 函式裡 通過 gets...