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)

pdf55 trang | Chia sẻ: maiphuongdc | Lượt xem: 1910 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình windows - Lập trình đồ họa với thư viện GDI, để 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:

  • pdfc4w_bai_05.pdf