Hướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về Clipboard

Chương trình sẽhoạt động nhưsau :

Người dùng sẽgõ nội dung vào hộp Copysau đó nhấn vào nút Copy. Toàn bộ

nội dung trong hộp Copy sẽ đưa vào trong Clipboard. (Chúng ta có thểPaste vào bất

kỳ ứng dụng có soạn thảo nào đểthửnghiệm).

Người dùng sẽnhấn vào nút Paste. Toàn bộnội dung có trong Clipboard hiện

hành sẽ được hiển thịvào hộp Paste. (Chúng ta có thểCopy từbất kỳ ứng dụng có

soạn thảo nào đểthửnghiệm)

pdf4 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 1605 | Lượt tải: 3download
Tóm tắt nội dung Hướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về Clipboard, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Hướng dẫn thực hành Lập trình C trên Windows 
 1 
GIỚI THIỆU VỀ CLIPBOARD 
LÀM VIỆC VỚI TEXT TRÊN CLIPBOARD 
Trong ví dụ sau đây chúng ta sẽ thử nghiệm làm việc với các chuỗi text trên 
Clipboard bằng ví dụ sau đây : 
Chương trình sẽ hoạt động như sau : 
Người dùng sẽ gõ nội dung vào hộp Copy sau đó nhấn vào nút Copy. Toàn bộ 
nội dung trong hộp Copy sẽ đưa vào trong Clipboard. (Chúng ta có thể Paste vào bất 
kỳ ứng dụng có soạn thảo nào để thử nghiệm). 
Người dùng sẽ nhấn vào nút Paste. Toàn bộ nội dung có trong Clipboard hiện 
hành sẽ được hiển thị vào hộp Paste. (Chúng ta có thể Copy từ bất kỳ ứng dụng có 
soạn thảo nào để thử nghiệm). 
Thiết lập thuộc tính 
Thiết lập thuộc tính cho hai hộp Copy và Paste như sau : 
Đặt tên biến 
Lần lượt đặt tên biến cho hộp Copy và hộp Paste với tên biến lần lượt như hình 
dưới đây (sử dụng ClassWizard). 
Hướng dẫn thực hành Lập trình C trên Windows 
 2 
Cài đặt 
Viết hàm xử lý sự kiện cho nút nhấn 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ự kiện cho việc nhấn nút Paste. 
 char * buffer = NULL; 
 CString fromClipboard; 
 if ( OpenClipboard() ) 
 { 
 HANDLE hData = GetClipboardData( CF_TEXT ); 
 char * buffer = (char*)GlobalLock( hData ); 
 fromClipboard = buffer; 
Hướng dẫn thực hành Lập trình C trên Windows 
 3 
 GlobalUnlock( hData ); 
 CloseClipboard(); 
 } 
 m_strPaste = fromClipboard; 
 UpdateData(FALSE); 
LÀM VIỆC VỚI BITMAP TRÊN CLIPBOARD 
Copy 
Đoạn code dưới đây cho phép chúng ta copy một vùng màn hình trong chương 
trình từ vị trí (0,0) và có kích thước (200,200). 
Để thực hiện việc copy, chúng ta phải cấp phát một vùng nhớ cho một con trỏ 
kiểu CBitmap (gắn liền với một Device Context ảo). 
Sau đó chúng ta sẽ copy vùng màn hình mong muốn lên DC ảo. Trong ví dụ 
dưới đây, vùng màn hình được sao chép là một vùng hình chữ nhật 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 với tham số CF_BITMAP. 
Sau khi đã đưa vùng màn hình mong muốn vào trong Clipboard rồi, chúng ta có 
thể huỷ con trỏ CBitmap được cấp phát lúc đầu. 
void CBt10View::OnEditCopy() 
{ 
 // TODO: Add your command handler code here 
 if ( OpenClipboard() ) 
 { 
 EmptyClipboard(); 
 //Tạo DC ảo cùng với một bitmap gắn với 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 dẫn thực hành Lập trình C trên Windows 
 4 
Paste 
Đoạn code dưới đây minh hoạ việc dán vùng clipboard chứa hình ảnh (dạng 
bitmap) lên vùng client của chương trình tại vị trí (0,0). 
Sử dụng hàm GetClipboardData với tham số CF_BITMAP để lấy vùng nhớ 
bitmap trong clipboard. 
Tạo ra một DC ảo mà nội dung của DC ảo này chính là phần hình ảnh vừa lấy 
được trên Clipboard. 
Vẽ vùng DC ảo vừa có được lên device context của vùng client thông qua hàm 
BitBlt với 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); 
 //Tạo DC ảo 
 CClientDC cdc(this); 
 CDC dc; 
 dc.CreateCompatibleDC(&cdc); 
 dc.SelectObject(bm); 
 //Chuyển xuống vùng Client mong muốn 
 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); 
 } 
} 
Muốn tìm hiểu thêm chi tiết về các hàm nêu trong bài hướng dẫn này, đọc thêm 
trong MSDN. 
TÀI LIỆU THAM KHẢO 
1. MSDN Library 
2. www.codeproject.com, bài “All you ever wanted about the Clipboard…” của 
Randy More. 
Tháng 08/2004 
Văn Chí Nam – Nguyễn Đức Hoàng Hạ 
(vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn ) 

File đính kèm:

  • pdfHướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về Clipboard.pdf