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

LẬP TRÌNH WINDOWS - Thư viện đồ họa GDI(Graphics Device Interface) doc

55 2,4K 2

Đ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 55
Dung lượng 1,71 MB

Nội dung

™ Device context HDC ™ Pen HPEN: sử dụng để vẽ đường thẳng, đường cong, đường tròn, hcn, ellipse,... ™ Font HFONT: sử dụng cho chữ ™ Palette HPALETTE: xử dụng để quản lý bảng màu của thi

Trang 1

Đại Học Sư Phạm Tp Hồ Chí Minh

Thư viện đồ họa GDI

(Graphics Device Interface)

Lập trình đồ họa với thư viện GDI

Trang 3

Device Context - DC

™ DC là một đối tượng của Windows lưu trữ thông tin chi tiết về phần cứng.

™ GDI cho phép sử dụng tọa độ logic và hệ thống màu RGB.

™ Device context (HDC)

™ Pen (HPEN): sử dụng để vẽ đường thẳng, đường cong, đường tròn, hcn, ellipse,

™ Brush (HBRUSH): dùng để tô hình tròn, HCN, Ellipse, polygon,

™ Font (HFONT): sử dụng cho chữ

™ Palette (HPALETTE): xử dụng để quản lý bảng màu của thiết bị

™ Bitmap (HBITMAP): sử dụng để quản lý hình ảnh

™ Region ( HRGN): quản lý các vùng đối tượng không chính tắc

Trang 4

Quan hệ giữa GDI, handle và Class MFC

™ DC (HDC) : CDC, CClientDC, CWindowDC,…

™ Pen (HPEN): CPen

™ Brush (HBRUSH): CBrush

™ Font (HFONT): CFont

™ Palette (HPALETTE): CPalette

™ Bitmap (HBITMAP): Cbitmap

™ Region ( HRGN): CRegion

Trang 5

Optaining DC

™ Gọi hàm CWnd::GetDC()

™ Khai báo biến CClientDC dc(this), CClientDC được sử dụng để vẽ

các đối tượng trong vùng Client của cửa sổ

™ Khai báo biến CWindowDC dc(this), CWindowDC được sử dụng để

vẽ các đối tượng trên toàn cửa sổ (client và none-client)

™ Trong MFC, sử dụng CView::OnDraw() để vẽ các đối tượng,

OnDraw sẽ tự động call khi cửa sổ cần Update

™ Nếu chúng ta biết thông tin, chúng ta có thể tạo biến DC riêng

Trang 6

Sử dụng DC với các đối tượng GDI

™ Tạo DC để vẽ các đối tượng

™ Tạo đối tượng GDI tương ứng (Pen, Brush,…)

™ Gán đối tượng GDI cho DC

™ Vẽ đối tượng

™ Gán đối tượng DC cũ (trước khi chọn đối tượng trong DC)

™ Hủy các đối tượng GDI đã tạo trong bước 2

™ Các bước thực hiện

Trang 7

A XOR B XOR B = A XOR (B XOR B) = A XOR 0 = A

A là màu gốc, B là màu mới

Bảng mô tả mode trong vẽ

R2_xxxx:

R2_XORPEN: P ^ O

R2_NOTXORPEN: ~ (P ^ O)

R2_COPYPEN: ~ O, màu của Pen

R2_NOTCOPYPEN: ~ P ngược với màu của P

Trong đó P màu vẽ, O là màu gốc, B màu đen, W màu trắng

NOT : ~, AND &, OR |, XOR ^.

Trang 8

Pen - Bút vẽ

BOOL CPen::CreatePen(int nPenStyle, int nWidth, COLORREF color)

nPenStyle: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_

DASHDOTDOT, PS_NULL,…

nWidth: độ dày của nét, nếu style <> PS_SOLID thì độ dày không thể vượt quá 1

color: màu của nét vẽ, sử dụng Macro RGB()

Trang 9

- Click chuột trái lên vùng Client chọn điểm bắt đầu P1 Æ MouseDown

- Giữ chuột và di chuyển đến điểm cuối P2

- Bỏ click chuột Æ MouseUp

- Vẽ đường thẳng từ vị trí P1 đến P2

Trang 11

Xử lý sự kiện OnDraw

- Hàm Invalidate() được gọi

- Ứng dụng nhận được thông điệp WM_PAINT yêu cầu vẽ lại màn hình

- Khi gọi hàm Invalidate() hay ứng dụng nhận thông điệp WM_PAINT , toàn bộ nội

dung trong màn hình ứng dụng sẽ bị xóa Vì vậy cần phải vẽ lại toàn bộ các đối

tượng trên màn hình

- Trong hàm OnDraw : chúng ta sẽ thực hiện vẽ lại toàn bộ các đối tượng trên màn

hình

Trang 13

Brush - Chổi tô

BOOL CBrush::CreateSolidBrush(COLORREF color)

Tạo chổi tô “đặc” với màu là Color

BOOL CBrush::CreateHatchBrush(int style, COLORREF color)

Tạo chổi tô có kiểu “style” với màu là Color

BOOL CBrush::CreatePatternBrush(Cbitmap *bmp)

Tạo chổi tô có kiểu “bitmap”

Trang 14

- Click chuột trái lên vùng Client chọn điểm bắt đầu P1 Æ MouseDown

- Giữ chuột và di chuyển đến điểm cuối P2

- Bỏ click chuột Æ MouseUp

- Vẽ hình chữ nhật từ điểm P1 (left,top) đến P2 (right, bottom)

Trang 16

C ác đối tượng GDI khác

Trang 17

(r.right,r.bottom)

Trang 19

RoundRect (tt)

Trang 22

PIE (tt)

Trang 23

Polygon

Trang 26

Polygon (tt)

Trang 28

Polygon (tt)

Trang 29

pts[0] = CPoint(300,20); pts[1] = CPoint(400,100); pts[2] = CPoint(550,100);

pts[3] = CPoint(550,300); pts[4] = CPoint(50,300); pts[5] = CPoint(50,100);

Trang 30

Polygon (tt)

Trang 31

BOOL CDC::PolyBezier(LPPOINT lpPoints,int nCount);

Cần ít nhất 4 điểm để vẽ đường cong

Trang 32

pts[0] = CPoint(300,20); pts[1] = CPoint(400,100); pts[2] = CPoint(550,100);

pts[3] = CPoint(550,300); pts[4] = CPoint(50,300); pts[5] = CPoint(50,100);

Trang 33

Curve

Trang 35

Curve

Trang 38

FloodFill (tt)

Trang 39

Pattern Brush

BOOL CBrush.CreatePatternBrush(CBitmap *bitmap);

Trang 40

Pattern Brush

Trang 42

XỬ LÝ FONT

Trang 43

TẠO ĐỐI TƯỢNG FONT

™ Cú pháp

BOOL CFont::CreateFont

(

int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename

);

BOOL CFont::CreateFontIndirect(const LOGFONT *lpLogFont);

Trang 46

LẤY FONT HIỆN HÀNH TRONG DC

Trang 47

CHỌN FONT TỪ HỘP THOẠI CFontDialog

Trang 48

CHỌN FONT TỪ HỘP THOẠI CFontDialog

Trang 49

KHỞI TẠO HỘP THOẠI CFontDialog

}}

Trang 50

LẤY KẾT QUẢ TỪ HỘP THOẠI CFontDialog

szStr+="\nFace Name: ";

szStr+=dlg.GetFaceName();

if(dlg.IsItalic() == TRUE)szStr+="\nFont is italic";

if(dlg.IsUnderline() == TRUE)szStr+="\nFont is underlined";

if(dlg.IsStrikeOut() == TRUE)szStr+="\nFont is strike out";

if(dlg.IsBold())szStr+="\nFont is bolded";

AfxMessageBox(szStr);

}

}

Trang 51

SETFONT CHO EDIT TEXT TỪ KẾT QUẢ CFontDialog

delete pFont;return;

}CEdit *myEdit;

Trang 52

SET MÀU CHỮ - OnCtlColor

HBRUSH CSetFontTextBoxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

//m_clrColor = RGB(0,0,255);

if(nCtlColor == CTLCOLOR_EDIT)

{

if(pWnd->GetDlgCtrlID() == IDC_EDIT1){

pDC->SetBkColor(RGB(255,0,0));

pDC->SetTextColor(m_clrColor);

}}

// TODO: Return a different brush if the default is not desired

return hbr;

}

Trang 53

SET MÀU CHỮ - OnCtlColor

™CTLCOLOR_BTN Button control

™CTLCOLOR_DLG Dialog box

™CTLCOLOR_EDIT Edit control

™CTLCOLOR_LISTBOX List-box control

™CTLCOLOR_MSGBOX Message box

™CTLCOLOR_SCROLLBAR Scroll-bar control

™CTLCOLOR_STATIC Static control

Trang 54

HIỂN THỊ VĂN BẢN VỚI CFONT

void CGDIView::OnDraw(CDC* pDC)

{

CFont *ptrFt; CFont *ptrFtOld; CRect rect; LOGFONT logFont;

CGDIDoc* pDoc=GetDocument(); ASSERT_VALID(pDoc);

ptrFt=pDoc->GetCurrentFont();

ASSERT(ptrFt != NULL);

if(ptrFt->GetSafeHandle() != NULL){

pDC->TextOut(rect.Width()/4, rect.Height()/4, logFont.lfFaceName);

if(ptrFt->GetSafeHandle() != NULL)pDC->SelectObject(ptrFtOld);

}

Ngày đăng: 15/03/2014, 21:20

HÌNH ẢNH LIÊN QUAN

Bảng mô tả mode trong vẽ - LẬP TRÌNH WINDOWS - Thư viện đồ họa GDI(Graphics Device Interface) doc
Bảng m ô tả mode trong vẽ (Trang 7)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w