剪貼簿延遲提交的實現

2021-04-02 14:46:33 字數 893 閱讀 2124

剪帖板延遲提交即程式要與其它程式交換資料使用剪帖板時,在成為剪帖板所有者時並不將資料拷貝到剪帖板中,而是將剪帖板清空,在有程式需要剪帖板資料時,window會給當前的剪帖板所有者傳送訊息,要求提供剪帖板資料。這種情況一般用在多種剪帖板格式提供時。

1。首先清空剪帖板

if(!openclipboard())

if(!emptyclipboard() )

setclipboarddata( cf_text, null) ;

closeclipboard();

2。在有程式需要剪帖板資料時,會給當前程式傳送乙個訊息wm_renderformat,訊息引數中指定了需要的資料的剪帖板格式。當前程式應該響應這個訊息並將資料放到剪帖板上。

dword dwlength = 4; // 要複製的字串長度

handle hglobalmemory = globalalloc(ghnd, dwlength + 1); // 分配記憶體塊

lpbyte lpglobalmemory = (lpbyte)globallock(hglobalmemory); // 鎖定記憶體塊

char *p="複製";

for (int i = 0; i < dwlength; i++) // 將"*"複製到全域性記憶體塊

*lpglobalmemory++ = *p++;

globalunlock(hglobalmemory); // 鎖定記憶體塊解鎖

::setclipboarddata(cf_text, hglobalmemory); // 將記憶體中的資料放置到剪貼簿

messagebox("onrenderformat");

3。在程式退出時,window會給當前程式傳送乙個wm_renderallformats,要求提供所有格式的剪帖板資料,避免造成資料丟失。

VC 傳統剪貼簿的延遲提交技術

傳統剪貼簿存在的侷限 傳統剪貼簿有乙個侷限性 剪貼簿上的所有資料都要儲存在記憶體上。對於文字字串和其它簡單資料型別,可以快速有效地傳遞。但是,對於比較大的資料,清空剪貼簿之前,資料都要占用較大的記憶體。而如果沒有人貼上這個位圖,給它分配的記憶體就毫無用處。延遲提交技術 為了避免這種浪費,window...

操作剪貼簿

剪貼簿 一 將資料送到剪貼簿 1 記憶體配置 hglobal hglobal hglobal globalalloc ghnd gmem share,lstrlen ptext 1 sizeof tchar 為什麼不用malloc 在windows中執行的應用程式之間必須要共享剪貼簿所儲存的記憶體塊...

剪貼簿相關

public const int wm user 0x400 public const int wm cap edit copy wm user 30 dllimport user32.dll static extern bool sendmessage intptr hwnd,int wmsg,s...