Thứ Bảy, 8 tháng 2, 2014

Lập trình C Windows 18_Clipboard

5
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 9
[2] Các kiểu định dạng sử dụng trong Clipboard

Giới thiệu

Định dạng chuẩn

Định dạng riêng
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 10
[2] Các kiểu định dạng … - Giới thiệu

Dữ liệu chuyển vào Clipboard cần phải có
một định dạng nhất định để các chương
trình sử dụng nó có thể truy xuất chính xác

Định dạng dữ liệu được xác định bởi tham
số uFormat trong hàm :

SetClipboardData(UINT uFormat, HANDLE hMem)

hMem là handle của khối bộ nhớ chứa dữ liệu có định dạng
tương ứng với uFormat
6
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11
[2] Các kiểu định dạng … - Giới thiệu

Clipboard API chuẩn cho phép sử dụng các
kiểu định dạng sau đây:

Các định dạng chuẩn

Các định dạng riêng
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 12
[2] Các kiểu định dạng … - Giới thiệu

Lưu ý :

Một ứng dụng có thể cùng lúc đặt nhiều đối
tượng dữ liệu vào Clipboard (bằng cách gọi liên
tiếp hàm SetClipboardData), các đối tượng
này thể hiện cùng một nội dung dữ liệu nhưng ở
các định dạng khác nhau (và do đó đôi khi có
hàm lượng thông tin khác nhau)
7
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 13
[2] Các kiểu định dạng … - Định dạng chuẩn

Các định dạng Clipboard chuẩn (Standard
Clipboard Formats) là các định dạng sử
dụng cho Clipboard được Windows hỗ trợ

Định danh của định dạng chuẩn được định
nghĩa trong Winuser.h
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 14
[2] Các kiểu định dạng … - Định dạng chuẩn

Các định dạng sử dụng với dữ liệu text:

CF_TEXT: dữ liệu là chuỗi ký tự ANSI , mỗi dòng
kết thúc với 2 ký tự carriage return và linefeed
(CR,LF). Ký tự NULL báo hiệu kết thúc dữ liệu

CF_UNICODETEXT: dữ liệu là chuỗi ký tự
Unicode, mỗi dòng chấm dứt bằng CR,LF. Ký tự
NULL (2 byte 0) báo hiệu kết thúc dữ liệu. Chỉ
được hỗ trợ trong môi trường Windows
NT/2000/XP

CF_OEMTEXT: tương tự như CF_TEXT nhưng
sử dụng cho tập ký tự OEM
8
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 15
[2] Các kiểu định dạng … - Định dạng chuẩn

Định dạng sử dụng với các bitmap:

CF_BITMAP : handle của một bitmap (HBITMAP)

CF_DIB: khối bộ nhớ định nghĩa một Device
Independent Bitmap (DIB), bắt đầu bằng cấu
trúc BITMAPINFO, theo sau là các bit của
bitmap

CF_DIBV5: khối bộ nhớ chứa cấu trúc
BITMAPV5HEADER, theo sau là thông tin về
bảng màu và các bit của bitmap
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 16
[2] Các kiểu định dạng … - Định dạng chuẩn

Định dạng sử dụng cho dữ liệu Metafile:

CF_METAFILEPICT: một Metafile Picture đuợc
định nghĩa bởi cấu trúc METAFILEPICT, dựa
trên hỗ trợ metafile cũ của Windows

CF_ENHMETAFILE: handle của một metafile mở
rộng (HENHMETAFILE)
9
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17
[2] Các kiểu định dạng … - Định dạng chuẩn

Một số định dạng khác:

CF_HDROP: Một danh sách các tập tin sử dụng
với các dịch vụ cắt/dán file, kéo/thả file

CF_PALETE: handle của một bảng màu, thường
được sử dụng kết hợp khi dữ liệu được đặt vào
Clipboard phụ thuộc vào một bảng màu

Ngoài ra, còn một số định dạng: CF_WAVE,
CF_SYLK, CF_DIF, CF_TIFF,
CF_PENDATA, CF_RIFF, CF_LOCALE và các
định dạng kết hợp với định dạng dữ liệu riêng
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 18
[2] Các kiểu định dạng … - Định dạng chuẩn

Hệ thống tự thực hiện việc chuyển đổi định
dạng dữ liệu giữa các định dạng sau:

CF_TEXT, CF_OEMTEXT, CF_UNICODETEXT

CF_BITMAP, CF_DIB, CF_DIBV5

Từ CF_DIB và CF_DIBV5 sang CF_PALETE

CF_METAFILEPICT, CF_ENHMETAFILE
10
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19
[2] Các kiểu định dạng … - Định dạng riêng

Nhu cầu:

Nhiều ứng dụng làm việc với định dạng riêng.
Nếu chuyển dữ liệu vào hoặc ra Clipboard bằng
các định dạng chuẩn có thể sẽ không bảo toàn
được thông tin
Muốn chuyển dữ liệu
bảng tính qua lại giữa
các ứng dụng Excel thì
phải sử dụng định dạng
riêng
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 20
[2] Các kiểu định dạng … - Định dạng riêng

Phương pháp: Windows cho phép một
chương trình có thể sử dụng định dạng dữ
liệu riêng cho mình theo một trong 2 cách
sau:

Cách 1: Đăng ký định dạng mới (Registered
Clipboard Formats) với hàm…

… UINT RegisterClipboardFormat
(LPCTSTR lpszFormat)

lpszFormat: tên của định dạng mới
11
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 21
[2] Các kiểu định dạng … - Định dạng riêng

Cách 1: Đăng ký định dạng mới…

Hàm trả về giá trị usigned int là định danh
của định dạng mới. Định danh này sẽ được sử
dụng như tham số trong các hàm chuyển/nhận
dữ liệu vào/từ Clipboard: SetClipboardData
và GetClipboardData

Nếu 2 hay nhiều ứng dụng đăng kí định dạng
với cùng một tên thì định dạng chỉ được đăng kí
một lần, và giá trị trả về trong các lời gọi hàm
RegisterClipboardFormat là như nhau.
Điều này cho phép các ứng dụng chia xẻ dữ liệu
với cùng một định dạng riêng
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 22
[2] Các kiểu định dạng … - Định dạng riêng

Cách 2: Sử dụng định dạng riêng do
Windows cung cấp

Không cần đăng ký

mà sử dụng một giá trị từ CF_PRIVATEFIRST
(0x200) đến CF_PRIVATELAST (0x2FF)
như là định danh của định dạng riêng
12
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 23
[2] Các kiểu định dạng … - Định dạng riêng

Vấn đề:
Dữ liệu Text theo
định dạng riêng trong
MS Word …
…Các ứng dụng
thông thường không
hiểu được
- Clipboard Viewer
-MS Paint
- MS Notepad
-……
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 24
[2] Các kiểu định dạng … - Định dạng riêng

Giải pháp:

Một chương trình sử dụng định dạng riêng có
thể chuyển cùng nội dung dữ liệu vào Clipboard
nhưng ở một số định dạng chuẩn như:

CF_DSPTEXT, CF_DSPBITMAP,
CF_DSPMETAFILEPICT, CF_DSPENHMETAFILE:
các định dạng này cho phép Clipboard Viewer hiển
thị dữ liệu dưới dạng Text, Bitmap, Metafile Picture
hoặc Enhanced Metafile

CF_OWNERDISPLAY: Chủ Clipboard (ứng dụng cuối
cùng chuyển dữ liệu vào Clipboard) có trách nhiệm
hiển thị và cập nhật cho cửa sổ Clipboard Viewer
bằng cách đáp ứng các thông điệp do cửa sổ này gửi
đến
13
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 25
[2] Các kiểu định dạng … - Định dạng riêng

Giải pháp…: (tt)

Các định dạng chuẩn khác như CF_TEXT,
CF_BITMAP, để các ứng dụng thông dụng như
Notepad, Paint … có thể hiển thị được nội dung dữ
liệu trong Clipboard
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 26
[3] Các kỹ thuật cơ bản sử dụng Clipboard

Vấn đề định vị bộ nhớ trong Windows

Chuyển dữ liệu vào Clipboard

Nhận dữ liệu từ Clipboard

Truy vấn trên nhiều định dạng

Kỹ thuật viết một Clipboard Viewer đơn giản
14
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 27
[3] Các kỹ thuật … - Định vị bộ nhớ trong Windows

Sơ lược vấn đề định vị bộ nhớ trong
Windows

Một số hàm quản lý vùng nhớ toàn cục

Ví dụ
13/06/2003C4W - Clipboard - Nguyen Tri Tuan - DH.KHTN Tp.HCM 28
[3] … - Định vị bộ nhớ trong Windows – Sơ lược

Windows 32 bits quản lý bộ nhớ ảo (virtual
memory) và sử dụng kỹ thuật phân trang

Vùng nhớ toàn cục là vùng nhớ dùng chung
cho tất cả các tiến trình. Khái niệm này chỉ
có trên hệ điều hành Windows 16 bits nhưng
vẫn được hỗ trợ trên Win32

Không có nhận xét nào:

Đăng nhận xét