1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình Windows - Chương 4: Xử lý đồ họa và văn bản (2016)

13 6 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

Bài giảng "Lập trình Windows - Chương 4: Xử lý đồ họa và văn bản" cung cấp cho người học các kiến thức: Cơ chế đồ họa trên Windows – Device Context, lớp CDC và một số lệnh đơn giản; thông điệp WM_PAINT và cửa sổ ảo, xử lý văn bản, ánh xạ khung nhìn. Mời các bạn cùng tham khảo nội dung chi tiết.

Chương Xử lý đồ họa & văn  Cơ chế đồ họa Windows – Device Context  Lớp CDC 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ử lý văn  Ánh xạ khung nhìn 4.1 Giới thiệu ngữ cảnh thiết bị  Ngữ cảnh thiết bị (Device Context - DC) cấu trúc GDI lưu thông tin cho việc hiển thị văn hình ảnh thiết bị tương thích Nó chứa đựng đối tượng đồ họa nét vẽ, mẫu tô, chế độ đồ họa, Kết Vẽ DC Mỗi đối tượng DC có số hiệu định danh gọi HDC (Handle Device Context) Windows sử dụng số hiệu để xử lý đồ họa  HDC kiểu liệu lưu số hiệu ngữ cảnh thiết bị  Mỗi cửa sổ có nhiều đối tượng DC khác thời điểm xử lý khác  4.2 Lớp CDC, CClientDC  Thư viện MFC cung cấp lớp để xử lý đồ họa CDC (Class Device Context) Lớp bao gói đối tượng HDC hàm API phục vụ đồ họa Chứa lệnh vẽ Lớp CDC GDI    Chứa tham số đồ họa DC Xác định DC cửa sổ (dùng bên lớp cửa sổ) CDC * CWnd :: GetDC(); 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ừ xuống Một số lệnh 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 ); 4.3 Một số đối tượng lớp đồ họa  Thư viện MFC cung cấp số lớp hỗ trợ đồ họa gồm CPen : cung cấp màu vẽ, gồm thành viê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 thành viên sau: CBrush ( màu ); CBrush ( kiểu, màu ); CRgn : cung cấp vùng giới hạn vẽ, gồm thành viên sau: CreateRectRgn( x1,y1, x2,y2 ); CreateElipticRgn( x1,y1, x2,y2 );  Hộp thoại chọn màu: CColorDialog thư viện gồm hàm sau: CColorDialog( COLORREF màu); int CColorDialog :: DoModal(); { IDOK, IDCANCEL } COLORREF CColorDialog :: GetColor();  Các đối tượng đặt vào DC lệnh CWnd :: SelectObject() 4.3 Một số đối tượng lớp đồ họa SelectObject( ) Tô màu đỏ DC cửa sổ Vẽ màu xanh Giới hạn nhìn thấy 4.4 Thơng điệp WM_PAINT Mọi liệu cửa sổ bị có thay đổi cửa sổ  Thơng điệp WM_PAINT phát sinh có yêu cầu cập nhật lại nội dung cửa sổ, do:     Tác động người dùng thay đổi kích thước, kích hoạt, Gọi hàm CWnd :: Invalidate() CWnd :: UpdateWindow() Để liệu tồn cửa sổ cần phải thực lệnh vẽ hàm xử lý thông điệp Tác động USER Phát sinh thông điệp Lớp cửa sổ - CS WM_PAINT void OnPaint() { } Hiển thị nội dung 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 vẽ  Mẫu hàm xử lý thông điệp WM_PAINT sau:  afx_msg void OnPaint() { CPaintDC dc( this ); viết lệnh xử lý đồ họa }  Lớp CPaintDC kế thừa từ lớp CDC Hàm OnMouseMove( ) Lớp CS có ? Hàm OnLButtonDown( ) Hàm OnLButtonUp( ) Mảng chứa tọa độ điểm vẽ Hàm OnPaint( ) 4.5 Cửa sổ ảo (virtual window) Hiện nội dung cửa sổ phải thực hàm OnPaint() thông điệp WM_PAINT, dù thay đổi nhỏ phải lại toàn nội dung, chiếm nhiều thời gian máy  Windows cung cấp chế cửa sổ ảo cho phép lưu toàn nội dung cửa sổ thật thành ảnh, sau chép lên hình cần thiết  Minh họa sau:  Vẽ lên cửa sổ thật lưu vào cửa sổ ảo Bộ nhớ RAM Lưu ảnh Hiện lại nội dung 4.5 Cửa sổ ảo (virtual window)  Các bước tạo cửa sổ ảo: B1) Khai báo 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 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 trình vẽ thực cửa sổ ảo qua memDC, sau chép ảnh từ cửa sổ ảo lên cửa sổ thật hình (thường hàm OnPaint) lệnh sau: DC-thật BitBlt( x,y, width,height, memDC, Xsrc, Ysrc, chế-độ ); 4.6 Xử lý văn Lớp CDC cung cấp số lệnh xử lý vă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 to all)  lfFaceName(tên phông chữ);  10 4.6 Xử lý văn  Để xử lý với phông chữ sử dụng lớp CFont, chứa cấu trúc chữ, kiểu chữ để hiển thị cửa sổ, gồm hàm sau: CFont :: CreateFont( ) CFont :: CreateFontIndirect( LOGFONT *lf );  Hộp thoại phơng chữ bao gói lớp CFontDialog gồm: CFontDialog :: CFontDialog( LPLOGFONT lf=NULL ); int CFontDialog :: DoModal(); { IDOK, IDCANCEL } CFontDialog :: GetCurrentFont( LPLOGFONT lf );  Con trỏ văn (caret) xử lý lệnh sau: CWnd :: ShowCaret(); CWnd :: HideCaret(); CWnd :: SetCaretPos( POINT p ); CPoint CWnd :: GetCaretPos(); CWnd :: CreateCaret( CBitmap *bmp );  Đối tượng ảnh bitmap 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ẽ cửa sổ đơn vị lơgíc, thiết bị tính theo đơn vị vật lý (point), thiết lập ánh xạ hai đơn vị lệnh sau: int CDC :: SetMapMode( mode ); chế độ ánh xạ mode gồm MM_TEXT – chế độ ánh xạ 1lơgíc=1point, MM_HIENGLISH – 1lơgíc=0.001point, MM_HIMETRIC – 1lơgíc=0.01mili, MM_LOENGLISH – 1lơgíc=0.01inc, MM_LOMETRIC – 1lơgíc=0.1mili,  Với chế độ ánh xạ người dùng (khơng MM_TEXT) tọa độ vẽ giống tọa độ đề các, gốc góc trái (chiều Y tăng từ lên) +Y MoveTo(0,0) +X Độ dài 50 mili LineTo(4000,-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 độ cửa sổ: CDC :: SetViewportExt( cx, cy ); CDC :: SetViewportOrg( x,y ); (tọa độ, kích thước đơn vị vật lý - device point)  Hàm chuyển đổi đơn vị lơgíc vật lý: CDC :: DPtoLP( LPPOINT , count ); CDC :: LPtoDP( LPPOINT , count ); Điểm vẽ lơgíc Độ cao vật lý theo chế độ ánh xạ Gốc tọa độ 13 ... Thư viện MFC cung cấp lớp để xử lý đồ họa CDC (Class Device Context) Lớp bao gói đối tượng HDC hàm API phục vụ đồ họa Chứa lệnh vẽ Lớp CDC GDI    Chứa tham số đồ họa DC Xác định DC cửa sổ (dùng... CreateCompatibleDC( DC-cửa-sổ-thật ); memBM CreateCompatibleBitmap( DC-thật, width, height ); memDC SelectObject( &memBM ); B3) Tạo cửa sổ ảo memBR CreateSolidBrush( màu-nền-cửa-s? ?-? ??o ); memDC SelectObject(... HDC (Handle Device Context) Windows sử dụng số hiệu để xử lý đồ họa  HDC kiểu liệu lưu số hiệu ngữ cảnh thiết bị  Mỗi cửa sổ có nhiều đối tượng DC khác thời điểm xử lý khác  4.2 Lớp CDC, CClientDC

Ngày đăng: 08/05/2021, 14:05

Xem thêm: