Chương 4. Xử lý đồ họa & văn bản<br />
<br />
<br />
<br />
Cơ chế đồ họa trên Windows – Device Context<br />
<br />
<br />
<br />
Lớp CDC và một số lệnh đơn giản<br />
<br />
<br />
<br />
Các đối tượng khác: CPen, CBrush, CRgn,…<br />
<br />
<br />
<br />
Thông điệp WM_PAINT và cửa sổ ảo<br />
<br />
<br />
<br />
Xử lý văn bản<br />
<br />
<br />
<br />
Ánh xạ khung nhìn<br />
<br />
1<br />
<br />
4.1. Giới thiệu ngữ cảnh thiết bị<br />
<br />
<br />
Ngữ cảnh thiết bị (Device Context - DC) là một cấu trúc GDI lưu thông tin<br />
cho việc hiển thị văn bản và hình ảnh trên thiết bị ra tương thích. Nó chứa<br />
đựng các đối tượng đồ họa như nét vẽ, mẫu tô, chế độ đồ họa,...<br />
Kết quả<br />
<br />
Vẽ<br />
<br />
DC<br />
<br />
Mỗi đối tượng DC có một số hiệu định danh gọi là HDC (Handle Device<br />
Context). Windows sử dụng số hiệu này để xử lý đồ họa.<br />
HDC là một kiểu dữ liệu lưu số hiệu ngữ cảnh thiết bị.<br />
Mỗi cửa sổ có thể có nhiều đối tượng DC khác nhau tại những thời điểm<br />
xử lý khác nhau.<br />
<br />
<br />
2<br />
<br />
4.2. Lớp CDC, CClientDC<br />
<br />
<br />
Thư viện MFC cung cấp một lớp để xử lý đồ họa là CDC (Class Device Context).<br />
Lớp này bao gói đối tượng HDC và các hàm API phục vụ đồ họa<br />
<br />
Chứa các<br />
lệnh vẽ<br />
<br />
Lớp CDC<br />
GDI<br />
<br />
<br />
<br />
<br />
<br />
<br />
Chứa các tham<br />
số đồ họa<br />
<br />
DC<br />
<br />
Xác định DC của một cửa sổ (dùng bên trong lớp cửa sổ)<br />
CDC * CWnd :: GetDC(); hoặc CDC * CWnd :: GetWindowDC();<br />
CClientDC object ( this );<br />
Hệ tọa độ gốc ở góc trái trên, trục X từ trái sang phải, Y từ trên xuống<br />
Một số lệnh cơ bản trên CDC<br />
MoveTo( x,y ); LineTo( x,y ); Ellipse( x1,y1, x2,y2 ); Rectangle( x1,y1, x2,y2 );<br />
SetROP2( R2_NOT / R2_MASKPEN/... ); AngleArc( x,y, r, start, sweep );<br />
Polyline( LPPOINT , count ); FloodFill( x,y, color );<br />
<br />
3<br />
<br />
4.3. Một số đối tượng lớp đồ họa<br />
<br />
<br />
Thư viện MFC cung cấp một số lớp hỗ trợ đồ họa gồm<br />
CPen : cung cấp màu vẽ, gồm các thành viên cơ bản sau:<br />
CPen( kiểu, độ-dày, màu ); kiểu{PS_SOLID, PS_DOT, PS_DASH,...}<br />
CBrush : cung cấp chế độ tô nền, gồm các thành viên cơ bản sau:<br />
CBrush ( màu );<br />
CBrush ( kiểu, màu );<br />
CRgn : cung cấp vùng giới hạn vẽ, gồm các thành viên cơ bản sau:<br />
CreateRectRgn( x1,y1, x2,y2 );<br />
CreateElipticRgn( x1,y1, x2,y2 );<br />
<br />
<br />
<br />
Hộp thoại chọn màu: CColorDialog trong thư viện gồm các<br />
hàm sau:<br />
CColorDialog( COLORREF màu);<br />
int CColorDialog :: DoModal(); { IDOK, IDCANCEL }<br />
COLORREF CColorDialog :: GetColor();<br />
<br />
<br />
<br />
Các đối tượng trên được đặt vào DC bởi lệnh CWnd :: SelectObject().<br />
<br />
4<br />
<br />
4.3. Một số đối tượng lớp đồ họa...<br />
<br />
SelectObject(...)<br />
<br />
Tô màu<br />
đỏ<br />
DC cửa sổ<br />
Vẽ màu xanh<br />
<br />
Giới hạn<br />
nhìn thấy<br />
<br />
5<br />
<br />