1. Trang chủ
  2. » Giáo án - Bài giảng

Chương 4 Xử lí đồ họa và văn bản

13 425 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 242,5 KB

Nội dung

1 Chương 4. Xử lý đồ họa & văn bản  Cơ chế đồ họa trên Windows – Device Context  Lớp CDC một số lệnh đơn giản  Các đối tượng khác: CPen, CBrush, CRgn,…  Thông điệp WM_PAINT cửa sổ ảo  Xửvăn bản  Ánh xạ khung nhìn 2 4.1. Giới thiệu ngữ cảnh thiết bị  Ngữ cảnh thiết bị (Device Context - DC) là một cấu trúc GDI lưu thông tin cho việc hiển thị văn bản hình ảnh trên thiết bị ra tương thích. Nó chứa đựng các đối tượng đồ họa như nét vẽ, mẫu tô, chế độ đồ họa,  Mỗi đối tượng DC có một số hiệu định danh gọi là HDC (Handle Device Context). Windows sử dụng số hiệu này để xử lý đồ họa.  HDC là một kiểu dữ liệu lưu số hiệu ngữ cảnh thiết bị.  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 xử lý khác nhau. DC VẽKết quả 3 4.2. Lớp CDC, CClientDC  Thư viện MFC cung cấp một lớp để xử lý đồ họa là CDC (Class Device Context). Lớp này bao gói đối tượng HDC các hàm API phục vụ đồ họa  Xác định DC của một cửa sổ (dùng bên trong lớp cửa sổ) CDC * CWnd :: GetDC(); hoặc CDC * CWnd :: GetWindowDC(); CClientDC object ( this );  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  Một số lệnh cơ bản trên CDC MoveTo( x,y ); LineTo( x,y ); Ellipse( x1,y1, x2,y2 ); Rectangle( x1,y1, x2,y2 ); SetROP2( R2_NOT / R2_MASKPEN/ ); AngleArc( x,y, r, start, sweep ); Polyline( LPPOINT , count ); FloodFill( x,y, color ); GDI DC Lớp CDC Chứa các lệnh vẽ Chứa các tham số đồ họa 4 4.3. Một số đối tượng lớp đồ họa  Thư viện MFC cung cấp một số lớp hỗ trợ đồ họa gồm CPen : cung cấp màu vẽ, gồm các thành viên cơ bản sau: CPen( kiểu, độ-dày, màu ); kiểu{PS_SOLID, PS_DOT, PS_DASH, } CBrush : cung cấp chế độ tô nền, gồm các thành viên cơ bản sau: CBrush ( màu ); CBrush ( kiểu, màu ); CRgn : cung cấp vùng giới hạn vẽ, gồm các thành viên cơ bản sau: CreateRectRgn( x1,y1, x2,y2 ); CreateElipticRgn( x1,y1, x2,y2 );  Hộp thoại chọn màu: CColorDialog trong thư viện <afxdlgs.h> gồm các hàm sau: CColorDialog( COLORREF màu); int CColorDialog :: DoModal(); { IDOK, IDCANCEL } COLORREF CColorDialog :: GetColor();  Các đối tượng trên được đặt vào DC bởi lệnh CWnd :: SelectObject(). 5 4.3. Một số đối tượng lớp đồ họa DC cửa sổ SelectObject( ) Vẽ màu xanh Tô màu đỏ Giới hạn nhìn thấy 6 4.4. Thông điệp WM_PAINT  Mọi dữ liệu hiện trên cửa sổ sẽ bị mất nếu có sự thay đổi trên cửa sổ đó.  Thông điệp WM_PAINT được phát sinh khi có yêu cầu cập nhật lại nội dung trên cửa sổ, do:  Tác động của người dùng như thay đổi kích thước, kích hoạt,  Gọi hàm CWnd :: Invalidate() hoặc CWnd :: UpdateWindow().  Để dữ liệu luôn tồn tại trên cửa sổ cần phải thực hiện mọi lệnh hiện vẽ chỉ trong hàm xử lý thông điệp này. void OnPaint() { } WM_PAINT Tác động của USER Phát sinh thông điệp Hiển thị nội dung Lớp cửa sổ - CS 7 4.4. Thông điệp WM_PAINT  Trong hàm xử lý thông điệp WM_PAINT phải sử dụng đối tượng lớp CPaintDC thay cho lớp CDC thông thường để thực hiện vẽ.  Mẫu hàm xử lý thông điệp WM_PAINT như sau: afx_msg void OnPaint() { CPaintDC dc( this ); viết các lệnh xử lý đồ họa }  Lớp CPaintDC được kế thừa từ lớp CDC. Lớp CS có ? Hàm OnMouseMove( ) Hàm OnPaint( ) Hàm OnLButtonDown( ) Hàm OnLButtonUp( ) Mảng chứa tọa độ các điểm đã vẽ 8 4.5. Cửa sổ ảo (virtual window)  Hiện nội dung trên cửa sổ phải thực hiện trong hàm OnPaint() của thông điệp WM_PAINT, dù chỉ một thay đổi rất nhỏ cũng phải hiện lại toàn bộ nội dung, chiếm khá nhiều thời gian trên máy.  Windows cung cấp một cơ chế cửa sổ ảo cho phép lưu toàn bộ nội dung cửa sổ thật thành một bức ảnh, sau đó chép lên màn hình khi cần thiết.  Minh họa như sau: Bộ nhớ RAM Lưu ảnh Hiện lại nội dung Vẽ lên cửa sổ thật lưu vào cửa sổ ảo 9 4.5. Cửa sổ ảo (virtual window)  Các bước tạo cửa sổ ảo: B1) Khai báo các biến cho cửa sổ ảo CDC memDC; CBitmap memBM; CBrush memBR; B2) Tạo DC cửa sổ ảo lưu ảnh bitmap cho cửa sổ thật memDC . CreateCompatibleDC( DC-cửa-sổ-thật ); memBM . CreateCompatibleBitmap( DC-thật, width, height ); memDC . SelectObject( &memBM ); B3) Tạo nền cửa sổ ảo memBR . CreateSolidBrush( màu-nền-cửa-sổ-ảo ); memDC . SelectObject( &memBR ); memDC . PatBlt( 0,0, width, height, PATCOPY ); B4) Mọi quá trình vẽ đều thực hiện trên cửa sổ ảo qua memDC, sau đó sẽ chép ảnh từ cửa sổ ảo lên cửa sổ thật màn hình (thường trong hàm OnPaint) bằng lệnh sau: DC-thật . BitBlt( x,y, width,height, memDC, Xsrc, Ysrc, chế-độ ); 10 4.6. Xửvăn bản  Lớp CDC cung cấp một số lệnh xửvăn bản gồm: SetTextColor( COLORREF màu-chữ); GetTextColor(); SetBkColor(màu); GetBkColor(); SetBkMode( TRANSPARENT/OPAQUE); TextOut( x,y, vb, len ); DrawText( LPCTSTR vb, int len, LPRECT rect, UINT format ); format={DT_LEFT/ , DT_VCENTER, DT_SINGLELINE, DT_CALCRECT, } CSize GetTextExtent( xâu, độ-dài );  Cấu trúc mô tả TEXTMETRIC, kiểu LOGFONT:  lfHeight(cao); lfWidth(rộng);  lfOrientation; lfWeight; lfItalic; lfUnderline; lfStrikeOut; lfEscapement; lfCharSet; lfOutPrecision; lfClipPrecision; lfQuality; lfPitchAndFamily; (set 0 to all)  lfFaceName(tên phông chữ); [...]... CFontDialog :: GetCurrentFont( LPLOGFONT lf );  Con trỏ văn bản (caret) được xử lý bởi các lệnh sau: CWnd :: ShowCaret(); CWnd :: HideCaret(); CWnd :: SetCaretPos( POINT p ); CPoint CWnd :: GetCaretPos(); CWnd :: CreateCaret( CBitmap *bmp );  Đối tượng ảnh bitmap được nạp từ tài nguyên qua lớp CBitmap sau CBitmap :: LoadBitmap( ID_bitmap ); 11 4. 7 Chế độ ánh xạ & khung nhìn  Đơn vị vẽ trên cửa.. .4. 6 Xửvăn bản  Để xử lý với phông chữ chúng ta sử dụng lớp CFont, chứa cấu trúc chữ, kiểu chữ để hiển thị trên cửa sổ, gồm các hàm sau: CFont :: CreateFont( ) CFont :: CreateFontIndirect( LOGFONT *lf );  Hộp... tăng từ dưới lên) +Y MoveTo(0,0) +X Độ dài 50 mili LineTo (40 00,-3000) -Y 12 4. 7 Chế độ ánh xạ & khung nhìn  Chế độ ánh xạ MM_ISOTROPIC cho phép quy định lại khung nhìn, gốc tọa độ trên cửa sổ: CDC :: SetViewportExt( cx, cy ); CDC :: SetViewportOrg( x,y ); (tọa độ, kích thước là đơn vị vật lý - device point)  Hàm chuyển đổi giữa đơn vị lôgíc vật lý: CDC :: DPtoLP( LPPOINT , count ); CDC :: LPtoDP( . vào DC bởi lệnh CWnd :: SelectObject(). 5 4. 3. Một số đối tượng lớp đồ họa DC cửa sổ SelectObject( ) Vẽ màu xanh Tô màu đỏ Giới hạn nhìn thấy 6 4. 4. Thông điệp WM_PAINT  Mọi dữ liệu hiện. , count ); FloodFill( x,y, color ); GDI DC Lớp CDC Chứa các lệnh vẽ Chứa các tham số đồ họa 4 4.3. Một số đối tượng lớp đồ họa  Thư viện MFC cung cấp một số lớp hỗ trợ đồ họa gồm CPen : cung. OnPaint() { } WM_PAINT Tác động của USER Phát sinh thông điệp Hiển thị nội dung Lớp cửa sổ - CS 7 4. 4. Thông điệp WM_PAINT  Trong hàm xử lý thông điệp WM_PAINT phải sử dụng đối tượng lớp CPaintDC

Ngày đăng: 13/05/2014, 11:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w