Hướng dn thc hành Lp trình C trên Windows
1
GII THIU V CLIPBOARD
LÀM VIC VI TEXT TRÊN CLIPBOARD
Trong ví d sau đây chúng ta s th nghim làm vic vi các chui text trên
Clipboard bng ví d sau đây :
Chương trình s hot động như sau :
Người dùng s gõ ni dung vào hp Copy sau đó nhn vào nút Copy. Toàn b
ni dung trong hp Copy s đưa vào trong Clipboard. (Chúng ta có th Paste vào bt
k ng dng có son tho nào để th nghim).
Người dùng s nhn vào nút Paste. Toàn b ni dung có trong Clipboard hin
hành s được hin th vào hp Paste. (Chúng ta có th Copy t bt k ng dng có
son tho nào để th nghim).
Thiết lp thuc tính
Thiết lp thuc tính cho hai hp Copy và Paste như sau :
Đặt tên biến
Ln lượt đặt tên biến cho hp Copy và hp Paste vi tên biến ln lượt như hình
dưới đây (s dng ClassWizard).
Hướng dn thc hành Lp trình C trên Windows
2
Cài đặt
Viết hàm x lý s kin cho nút nhn Copy :
UpdateData();
if (OpenClipboard())
{
HGLOBAL clipbuffer;
char *buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE,
m_strCut.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(m_strCut));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
Viết hàm x lý s kin cho vic nhn nút Paste.
char * buffer = NULL;
CString fromClipboard;
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData( CF_TEXT );
char * buffer = (char*)GlobalLock( hData );
fromClipboard = buffer;
Hướng dn thc hành Lp trình C trên Windows
3
GlobalUnlock( hData );
CloseClipboard();
}
m_strPaste = fromClipboard;
UpdateData(FALSE);
LÀM VIC VI BITMAP TRÊN CLIPBOARD
Copy
Đon code dưới đây cho phép chúng ta copy mt vùng màn hình trong chương
trình t v trí (0,0) và có kích thước (200,200).
Để thc hin vic copy, chúng ta phi cp phát mt vùng nh cho mt con tr
kiu CBitmap (gn lin vi mt Device Context o).
Sau đó chúng ta s copy vùng màn hình mong mun lên DC o. Trong ví d
dưới đây, vùng màn hình được sao chép là mt vùng hình ch nht có kích thước
(0,0,200,200).
Đưa vùng màn hình trên DC o (nh vào con tr Bitmap) thông qua hàm
SetClipboardData vi tham s CF_BITMAP.
Sau khi đã đưa vùng màn hình mong mun vào trong Clipboard ri, chúng ta có
th hu con tr CBitmap được cp phát lúc đầu.
void CBt10View::OnEditCopy()
{
// TODO: Add your command handler code here
if ( OpenClipboard() )
{
EmptyClipboard();
//To DC o cùng vi mt bitmap gn vi nó
CBitmap * junk = new CBitmap();
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(&cdc);
CRect client(0,0,200,200);
junk->CreateCompatibleBitmap
(&cdc,client.Width(),client.Height());
dc.SelectObject(junk);
//Chép vùng màn hình (0,0,200,200) lên DC o
dc.BitBlt(0,0,client.Width(), client.Height(),
&m_VDC1, 0,0,SRCCOPY);
SetClipboardData(CF_BITMAP,junk->m_hObject);
CloseClipboard();
delete junk;
}
}
Hướng dn thc hành Lp trình C trên Windows
4
Paste
Đon code dưới đây minh ho vic dán vùng clipboard cha hình nh (dng
bitmap) lên vùng client ca chương trình ti v trí (0,0).
S dng hàm GetClipboardData vi tham s CF_BITMAP để ly vùng nh
bitmap trong clipboard.
To ra mt DC o mà ni dung ca DC o này chính là phn hình nh va ly
được trên Clipboard.
V vùng DC o va có được lên device context ca vùng client thông qua hàm
BitBlt vi tham s SRCCOPY.
void CBt10View::OnEditPaste()
{
// TODO: Add your command handler code here
if ( OpenClipboard() )
{
//Get the clipboard data
HBITMAP handle =
(HBITMAP)GetClipboardData(CF_BITMAP);
CBitmap * bm = CBitmap::FromHandle(handle);
//To DC o
CClientDC cdc(this);
CDC dc;
dc.CreateCompatibleDC(&cdc);
dc.SelectObject(bm);
//Chuyn xung vùng Client mong mun
m_VDC.BitBlt(0,0,800,600,&dc,0,0,SRCCOPY);
m_VDC1.BitBlt(0,0,800,600,&dc,0,0,SRCCOPY);
CloseClipboard();
Invalidate(FALSE);
}
}
Mun tìm hiu thêm chi tiết v các hàm nêu trong bài hướng dn này, đọc thêm
trong MSDN.
TÀI LIU THAM KHO
1. MSDN Library
2. www.codeproject.com, bài “All you ever wanted about the Clipboard…” ca
Randy More.
Tháng 08/2004
Văn Chí Nam – Nguyn Đức Hoàng H
(vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn )