Dinsmore

New Member

Download miễn phí Bài giảng Lập trình windows - Lập trình đồ họa với thư viện GDI





Sử dụng bút vẽ để vẽ hình chữ nhật
Yêu cầu:
- 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ểmP1 (left,top) đến P2 (right, bottom)



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Đại Học Sư Phạm Tp. Hồ Chí Minh
Khoa Toán – Tin Học LẬP TRÌNH WINDOWS
Thư viện đồ họa GDI
(Graphics Device Interface)
Trần Ngọc Bảo
Email: [email protected]
Lập trình đồ họa với thư viện GDI
Tran Ngoc Bao 2 Dai hoc Su Pham TP.HCM
NỘI DUNG
™ Xử lý sự kiện OnDraw
™ Draw Mode
™ Giới thiệu
™ Device Context
™ Các đối tượngGDI
™ Quan hệ giữa các đối tượng GDI, handle và Class MFC
™ Optaining DC
™ Sử dụng DC với các đối tượng GDI
Tran Ngoc Bao 3 Dai hoc Su Pham TP.HCM
Device Context - DC
™Device context
™Các đối tượng GDI
™ 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
Tran Ngoc Bao 4 Dai hoc Su Pham TP.HCM
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
Tran Ngoc Bao 5 Dai hoc Su Pham TP.HCM
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
Tran Ngoc Bao 6 Dai hoc Su Pham TP.HCM
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
Tran Ngoc Bao 7 Dai hoc Su Pham TP.HCM
Draw Mode
™Cú pháp:
int CDC::SetR2(nDrawStyle)
Toán tử : XOR, AND, OR, NOT
Phép toán XOR
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 ^.
Tran Ngoc Bao 8 Dai hoc Su Pham TP.HCM
Pen - Bút vẽ
™ Tạo 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()
Tran Ngoc Bao 9 Dai hoc Su Pham TP.HCM
Sử dụng bút vẽ để vẽ đường thẳng
™ Xử lý sự kiện MouseDown
void CGUISampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptStart = point;
CView::OnLButtonDown(nFlags, point);
}
™ Yêu cầu:
- 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
Tran Ngoc Bao 10 Dai hoc Su Pham TP.HCM
Sử dụng bút vẽ để vẽ đường thẳng
™ Xử lý sự kiện MouseUp
void CGUISampleView::OnMouseUpINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen pen, *ptrPenOld;
int nMode;
pen.CreatePen(PS_DOT,1,RGB(0,0,0));
ptrPenOld = dc.SelectObject(&pen);
nMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_ptStart);
dc.LineTo(m_ptEnd);
dc.SetROP2(nMode);
dc.SelectObject(ptrPenOld);
}
Tran Ngoc Bao 11 Dai hoc Su Pham TP.HCM
Xử lý sự kiện OnDraw
™ Sự kiện OnDraw xảy ra khi:
- 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
™ Xử lý sự kiện OnDraw
- 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 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
Tran Ngoc Bao 12 Dai hoc Su Pham TP.HCM
Xử lý sự kiện OnDraw (tt)
void CGUISampleView::OnDraw(CDC* pDC)
{
CGUISampleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPen pen, *ptrPenOld;
int nMode;
//Tạo bút vẽ
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
ptrPenOld = pDC->SelectObject(&pen);
//Set Mode vẽ
nMode = pDC->SetROP2(R2_COPYPEN);
//Vẽ đường thẳng
pDC->MoveTo(m_ptStart);
pDC->dc.LineTo(m_ptEnd);
//Giải phóng bút vẽ
pDC->SetROP2(nMode);//Set lại mode cũ
pDC->SelectObject(ptrPenOld);
}
Tran Ngoc Bao 13 Dai hoc Su Pham TP.HCM
Brush - Chổi tô
™ Tạo Brush
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”
Tran Ngoc Bao 14 Dai hoc Su Pham TP.HCM
Sử dụng bút vẽ để vẽ hình chữ nhật
™ Xử lý sự kiện MouseDown
void CGUISampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptStart = point;
CView::OnLButtonDown(nFlags, point);
}
™ Yêu cầu:
- 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)
Tran Ngoc Bao 15 Dai hoc Su Pham TP.HCM
Sử dụng bút vẽ để vẽ hình chữ nhật
™ Xử lý sự kiện MouseUp
void CGUISampleView::OnMouseUpINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen pen, *ptrPenOld;
int nMode;
pen.CreatePen(PS_DOT,1,RGB(0,0,0));
ptrPenOld = dc.SelectObject(&pen);
nMode = dc.SetROP2(R2_XORPEN);
CBrush brush;
CBrush *ptrBrushOld;
brush.CreateSolidBrush(RGB(0,255,0));
ptrBrushOld = pDC->SelectObject(&brush);
CRect r(m_ptStart.x,m_ptStart.y, m_ptEnd.x,m_ptEnd.y);
pDC->Rectangle(r);
dc.SetROP2(nMode);//Set lai mode
dc.SelectObject(ptrPenOld);
pDC->SelectObject(ptrBrushOld);
brush.Detach();
}
Tran Ngoc Bao 16 Dai hoc Su Pham TP.HCM
Các đối tượng GDI khác
™Chọn và di chuyển đối tượng
™ Bitmap
™Các đối tượng khác
™ RoundRect
™ Pie
™ Polygon
™ Curve
™ FloodFill
™ Pattern Brush
™ Font
Tran Ngoc Bao 17 Dai hoc Su Pham TP.HCM
RoundRect
™Cú pháp
BOOL CDC::RoundRect(CRect r,CPoint p);
p.y
p.x
(r.left,r.top)
(r.right,r.bottom)
Tran Ngoc Bao 18 Dai hoc Su Pham TP.HCM
RoundRect (tt)
void CDrawingView::DrawFocusRect(CDC *pDC)
{
CPen pen, *ptrPenOld;
int nMode;
pen.CreatePen(PS_SOLID,1,RGB(255,0,255));
ptrPenOld = pDC->SelectObject(&pen);
CBrush brush;
CBrush *ptrBrushOld;
brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,255,0));
ptrBrushOld = pDC->SelectObject(&brush);
nMode = pDC->SetROP2(R2_COPYPEN);
CRect rect = CRect(5,385,300,535);
pDC->RoundRect(&rect,CPoint(40,10));
pDC->SetROP2(nMode);//Set lai mode
pDC->SelectObject(ptrPenOld);
pDC->SelectObject(ptrBrushOld);
brush.Detach();
}
Tran Ngoc Bao 19 Dai hoc Su Pham TP.HCM
RoundRect (tt)
Tran Ngoc Bao 20 Dai hoc Su Pham TP.HCM
PIE
™Cú pháp
BOOL CDC::pie(LPCRECT lpRect,CPoint ptStart,CPoint ptEnd);
ptStart
lpRect
ptEnd
Tran Ngoc Bao 21 Dai hoc Su Pham TP.HCM
PIE (tt)
void CTNBDrawingView::OnPie()
{
CClientDC dc(this);
CPen pen, *ptrPenOld;
int nMode;
pen.CreatePen(PS_SOLID,3,RGB(255,0,255));
ptrPenOld = dc.SelectObject(&pen);
CBrush brush;
CBrush *ptrBrushOld;
brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,255,0));
ptrBrushOld = dc.SelectObject(&brush);
nMode = dc.SetROP2(R2_COPYPEN);
dc.Pie(CRect(100,50,500,300),CPoint(10,50),CPoint(200,50));
dc.SetROP2(nMode);//Set lai...
 

Các chủ đề có liên quan khác

Top