Lập trình đồ họa với thư viện GDI
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
Draw Mode
Xử lý sự kiện OnDraw
55 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2018 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình Windows - Bài 05, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đạ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: tnbao.dhsp@gmail.com
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 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
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 mode
dc.SelectObject(ptrPenOld);
dc.SelectObject(ptrBrushOld);
brush.Detach();
}
Tran Ngoc Bao 22 Dai hoc Su Pham TP.HCM
PIE (tt)
Tran Ngoc Bao 23 Dai hoc Su Pham TP.HCM
Polygon
Tran Ngoc Bao 24 Dai hoc Su Pham TP.HCM
Polygon
Cú pháp
BOOL CDC::Polygon(LPPOINT lpPoints,int nCount);
P[0]
P[1]
P[2]
P[3]
P[4]
P[5]
P[6]
Tran Ngoc Bao 25 Dai hoc Su Pham TP.HCM
Polygon
Cú pháp
BOOL CDC::Polygon(LPPOINT lpPoints,int nCount);
P[0]
P[1]
P[2]
P[3]
P[4]
P[5]
P[6]
pDC->Polygon(P,7);
Tran Ngoc Bao 26 Dai hoc Su Pham TP.HCM
Polygon (tt)
Tran Ngoc Bao 27 Dai hoc Su Pham TP.HCM
Polygon
Cú pháp
BOOL CDC::Polygon(LPPOINT lpPoints,int nCount);
P[0]
P[1]
P[2]
P[3]
P[4]
P[5]
P[6]
pDC->Polygon(P,6);
Tran Ngoc Bao 28 Dai hoc Su Pham TP.HCM
Polygon (tt)
Tran Ngoc Bao 29 Dai hoc Su Pham TP.HCM
Polygon (tt)
void CDrawingView::OnPOLYGON()
{
CClientDC dc(this);
CPoint pts[7];
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);
pts[6] = CPoint(200,100);
CPen pen, *ptrPenOld; int nMode;
pen.CreatePen(PS_SOLID,3,RGB(255,0,255));
ptrPenOld = dc.SelectObject(&pen);
CBrush brush, *ptrBrushOld; CBitmap bmp;
brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,255,0));
ptrBrushOld = dc.SelectObject(&brush);
nMode = dc.SetROP2(R2_COPYPEN);
dc.Polygon(pts,5);
dc.SetROP2(nMode);//Set lai mode
dc.SelectObject(ptrPenOld);
dc.SelectObject(ptrBrushOld);
}
Tran Ngoc Bao 30 Dai hoc Su Pham TP.HCM
Polygon (tt)
Tran Ngoc Bao 31 Dai hoc Su Pham TP.HCM
Curve
Cú pháp
BOOL CDC::PolyBezier(LPPOINT lpPoints,int nCount);
Cần ít nhất 4 điểm để vẽ đường cong
Tran Ngoc Bao 32 Dai hoc Su Pham TP.HCM
Curve
void CDrawingView::OnPOLYGON()
{
CClientDC dc(this);
CPoint pts[7];
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);
pts[6] = CPoint(200,100);
CPen pen, *ptrPenOld; int nMode;
pen.CreatePen(PS_SOLID,3,RGB(255,0,255));
ptrPenOld = dc.SelectObject(&pen);
nMode = dc.SetROP2(R2_COPYPEN);
dc.PolyBezier(pts,4);
dc.SetROP2(nMode);//Set lai mode
dc.SelectObject(ptrPenOld);
}
Tran Ngoc Bao 33 Dai hoc Su Pham TP.HCM
Curve
Tran Ngoc Bao 34 Dai hoc Su Pham TP.HCM
Curve
void CDrawingView::OnPOLYGON()
{
CClientDC dc(this);
CPoint pts[7];
pts[0] = CPoint(300,20);
pts[1] = CPoint(550,300);
pts[2] = CPoint(550,300);
CPen pen, *ptrPenOld; int nMode;
pen.CreatePen(PS_SOLID,3,RGB(255,0,255));
ptrPenOld = dc.SelectObject(&pen);
nMode = dc.SetROP2(R2_COPYPEN);
dc.PolyBezier(pts,4);
dc.SetROP2(nMode);//Set lai mode
dc.SelectObject(ptrPenOld);
}
Tran Ngoc Bao 35 Dai hoc Su Pham TP.HCM
Curve
Tran Ngoc Bao 36 Dai hoc Su Pham TP.HCM
FloodFill
Cú pháp
BOOL CDC::FloodFill(int x,int y, COLORREF clrBoder);
(x, y) (x, y)
pDC->FloodFill(x, y,RGB(0,0,255));
Tran Ngoc Bao 37 Dai hoc Su Pham TP.HCM
FloodFill (tt)
void CDrawingView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CBrush brush;
CBrush *ptrBrushOld;
brush.CreateSolidBrush(RGB(127,127,127));
ptrBrushOld = dc.SelectObject(&brush);
dc.FloodFill(point.x,point.y,RGB(255,0,255));
dc.SelectObject(ptrBrushOld);
CView::OnRButtonDown(nFlags, point);
}
Tran Ngoc Bao 38 Dai hoc Su Pham TP.HCM
FloodFill (tt)
Tran Ngoc Bao 39 Dai hoc Su Pham TP.HCM
Pattern Brush
Cú pháp
BOOL CBrush.CreatePatternBrush(CBitmap *bitmap);
Tran Ngoc Bao 40 Dai hoc Su Pham TP.HCM
Pattern Brush
Tran Ngoc Bao 41 Dai hoc Su Pham TP.HCM
Pattern Brush
void CTNBDrawingView::OnPatternFill()
{
CClientDC dc(this);
CPoint pts[7];
CPen pen, *ptrPenOld; int nMode;
pen.CreatePen(PS_SOLID,3,RGB(255,0,255));
ptrPenOld = dc.SelectObject(&pen);
CBrush brush, *ptrBrushOld;
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP4);
brush.CreatePatternBrush(&bmp);
ptrBrushOld = dc.SelectObject(&brush);
nMode = dc.SetROP2(R2_COPYPEN);
dc.Polygon(pts,6);
dc.SetROP2(nMode);//Set lai mode cu
dc.SelectObject(ptrPenOld);
dc.SelectObject(ptrBrushOld);
brush.Detach();
}
Tran Ngoc Bao 42 Dai hoc Su Pham TP.HCM
XỬ LÝ FONT
Hiển thị văn bản với các Font khác nhau
Chọn Font từ hộp thoại Font (FontDialog)
Tạo Font
Cấu trúc LOGFONT
Tạo Font
Lấy Font hiện hành trong DC
Tran Ngoc Bao 43 Dai hoc Su Pham TP.HCM
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);
Tran Ngoc Bao 44 Dai hoc Su Pham TP.HCM
CẤU TRÚC LOGFONT
typedef struct tagLOGFONT{
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
Tran Ngoc Bao 45 Dai hoc Su Pham TP.HCM
CẤU TRÚC LOGFONT
lfEscapement
lfEscapement = 300300
S
A
M
P
L
E
lfEscapement = 900900
Tran Ngoc Bao 46 Dai hoc Su Pham TP.HCM
LẤY FONT HIỆN HÀNH TRONG DC
CFont* CDC::GetCurrentFont();
Cú pháp
Ví dụ
CGDIDoc::CGDIDoc()
{
LOGFONT lf;
CClientDC dc(NULL);
CFont *ptrFt;
ptrFt=dc.GetCurrentFont();
ptrFt->GetLogFont(&lf);
ASSERT(m_fontDraw.CreateFontIndirect(&lf));
m_colorFont=RGB(0, 0, 0);
m_bTransparentBgd=TRUE;
}
Tran Ngoc Bao 47 Dai hoc Su Pham TP.HCM
CHỌN FONT TỪ HỘP THOẠI CFontDialog
CFontDialog
Tran Ngoc Bao 48 Dai hoc Su Pham TP.HCM
CHỌN FONT TỪ HỘP THOẠI CFontDialog
void CTNBFontDoc::OnFontSel()
{
// TODO: Add your command handler code here
CFontDialog dlg;
LOGFONT lf;
if(dlg.DoModal() == IDOK)
{
dlg.GetCurrentFont(&lf);
lf.lfEscapement = 900;
if(m_fontDraw.GetSafeHandle() != NULL)m_fontDraw.DeleteObject();
ASSERT(m_fontDraw.CreateFontIndirect(&lf));
m_colorFont=dlg.GetColor();
UpdateAllViews(NULL);
}
}
Tran Ngoc Bao 49 Dai hoc Su Pham TP.HCM
KHỞI TẠO HỘP THOẠI CFontDialog
void CCDBDoc::OnFontdialogboxInitialize()
{
LOGFONT lf; CFontDialog dlg; CString szStr; COLORREF color;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfItalic=TRUE;
lf.lfUnderline=TRUE;
lf.lfStrikeOut=TRUE;
lf.lfWeight=FW_BOLD;
strcpy(lf.lfFaceName, "Times New Roman");
dlg.m_cf.rgbColors=RGB(255, 255, 0);
dlg.m_cf.Flags|=CF_LIMITSIZE|CF_EFFECTS|CF_INITTOLOGFONTSTRUCT;
dlg.m_cf.nSizeMin=20;
dlg.m_cf.nSizeMax=48;
dlg.m_cf.lpLogFont=&lf;
if(dlg.DoModal() == IDOK)
{
}
}
Tran Ngoc Bao 50 Dai hoc Su Pham TP.HCM
LẤY KẾT QUẢ TỪ HỘP THOẠI CFontDialog
void CCDBDoc::OnFontdialogboxInitialize()
{
LOGFONT lf;
CFontDialog dlg; if(dlg.DoModal() == IDOK)
{
color=dlg.GetColor();
szStr.Format("Font Color: R=%d, G=%d, B=%d",
GetRValue(color), GetGValue(color), GetBValue(color));
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);
}
}
Tran Ngoc Bao 51 Dai hoc Su Pham TP.HCM
SETFONT CHO EDIT TEXT TỪ KẾT QUẢ CFontDialog
void CSetFontTextBoxDlg::OnSetfont()
{
CFontDialog dlg; LOGFONT lf; CFont *pFont;
if (dlg.DoModal() == IDOK) {
dlg.GetCurrentFont(&lf);
pFont = new CFont;
if(!pFont->CreateFontIndirect(&lf))
{
delete pFont;return;
}
CEdit *myEdit;
myEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
myEdit->SetWindowText(lf.lfFaceName);
myEdit->SetFont(pFont);
m_clrColor = dlg.GetColor();
myEdit->RedrawWindow();
if(pFont!=NULL)delete pFont;
}
}
Tran Ngoc Bao 52 Dai hoc Su Pham TP.HCM
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;
}
Tran Ngoc Bao 53 Dai hoc Su Pham TP.HCM
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
Tran Ngoc Bao 54 Dai hoc Su Pham TP.HCM
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)
{
ptrFt->GetLogFont(&logFont);
ptrFtOld=pDC->SelectObject(ptrFt);
pDC->SetTextColor(pDoc->GetFontColor());
pDC->SetBkMode(pDoc->GetBgdStyle() ? TRANSPARENT:OPAQUE);
pDC->SetBkColor((pDoc->GetFontColor())&0x00FFFFFF);
}
GetClientRect(rect);
pDC->TextOut(rect.Width()/4, rect.Height()/4, logFont.lfFaceName);
if(ptrFt->GetSafeHandle() != NULL)pDC->SelectObject(ptrFtOld);
}
Tran Ngoc Bao 55 Dai hoc Su Pham TP.HCM
Các file đính kèm theo tài liệu này:
- LẬP TRÌNH WINDOWS bài 05.pdf