我要提醒一下大家,看了我的博文學到的知識,千萬不要用於實際開發,不然你會被你的上司罵: “媽的,這些東西哪來的,從來沒有人這樣做過。”不信你試試,腦細胞被凍結的經理或者技術總監們 肯定會這樣說的。
如果是一些有X年工作經驗(X永遠不可能大於100)的程式員肯定會說:“你 怎麼這麼不成熟?”你如果被別人這麼說之後,不知道你會不會很傷心,或者很生氣?
我呢, 曾經被N個人這樣教育過,不過你猜猜我當時的心情,我非常高興,喜悅。為什麼呢?
你不妨想 想,當一個人說你不成熟的時候,你說他其實在說什麼,他其實是在說他自己很成熟,就因為他自己熟 得快腐爛了,滿身惡臭,才會顯得你不成熟,仔細想想,是不是這個事兒?
那麼,成熟到底好 不好呢?我相信小學生都有這樣的常識,當一個果子熟透了的時候,會怎麼樣?它會從樹枝上高空墜落 ,然後狠巴巴地摔到地上,粉身碎骨。呵呵,所以,你現在明白了吧,當別人說我不成熟的時候,我會 非常高興,我心裡想:“快了快了,你快完蛋了。”
好,牛皮吹完,樂一樂。下面開始幹正事 ,今天咱們來認識一下怎麼操作粘貼板,即複製和粘貼資料。我不知道大家看不看恐怖片,反正我現在 不得不嚇你一回。這個粘貼板的操作,其實挺痛苦的,所以,如果在實際開發中,我肯定用CLR的類來 弄,是的,這是我的做事原則,哪種方法最簡單就用哪種,這叫什嗎?效率最大化,只有閑著沒事乾的 人才會簡單問題複雜化。
不過呢,畢竟這裡咱們要瞭解一下在Win32下操作粘貼板的,所以呢, 我還是用API來解決,至於CLR方法,相信你比我更會用,你不信算了,反正我信了,我不是菜鳥,但我 是菜鶴。
讀寫粘貼板就像我們上廁所一樣,首先開啟廁所門(調用OpenClipboard函數),然後 大動作(SetClipboardData或GetClipboardData),幹完了出來,關上廁所門(調用CloseClipboard) 。
我說它有點痛苦是因為操作的時睺,與我們平常讀寫一些資料不同,資料寫入到剪貼簿後就 由作業系統接管了,期間你不能任意讀寫,就像公用廁所是提供給你用的,你不能在裡面給人家裝修, 拆掉人家的東西。
一、複製資料
我這裡就不弄太複雜了,就複製一串文本吧,這也常 用。先看看代碼。
//複製內容 //開啟剪貼簿 OpenClipboard(hdlg); //清空剪貼簿 EmptyClipboard(); //向剪貼簿中放東西 HWND hedt = GetDlgItem(hdlg, IDC_EDTCPY); WCHAR ntext[100]; SendMessage(hedt, WM_GETTEXT, (WPARAM)100, (LPARAM)ntext); //分配記憶體 HGLOBAL hgl = GlobalAlloc(GMEM_MOVEABLE, 100 * sizeof(WCHAR)); LPWSTR lpstrcpy = (LPWSTR)GlobalLock(hgl); memcpy(lpstrcpy, ntext, 100 * sizeof(WCHAR)); GlobalUnlock(hgl); SetClipboardData(CF_TEXT, lpstrcpy); //關閉剪貼簿 CloseClipboard();