1、获取绘图设备DC,HDC
CWnd* cWnd = AfxGetApp()->m_pMainWnd = AfxGetMainWnd(); HWND hWnd = cWnd->m_hWnd = cWnd->GetSafeHwnd(); CDC * p_cdc = cWnd->GetDC();//一般获取cdc的用法,临时型的,刷新就没了 CDC * m_cdc;m_cdc->CreateCompatibleDC(p_cdc);//缓冲区DC CPaintDC cpdc(cWnd);//只能用在OnPaint方法里,只是客户区OnPaint CClientDC ccdc(cWnd);//绘制客户区,也是临时的,刷新就没了 CWindowDC *wdc = (CWindowDC*)cWnd->GetWindowDC();// 绘制整个窗口OnNcPaint HDC hdc = p_cdc->GetSafeHdc(); ReleaseDC(dc);// 释放获取的绘图设备,CPaintDC不需要释放,GetDC后必须ReleaseDC dc->DeleteDC();// 删除DC,除非你自己Create的,否则不允许你删除 dc->Detach(); // 分离DC,而不删除,Attach后,必须Detach
// 获取绘图设备的区域 CRect rect; GetWindowRect(rect);//获取整个窗口的区域 GetClientRect(rect);// 获取客户区的区域 // 强制刷新客户区OnPaint,带NULL,全屏刷新 InvalidateRect();//TRUE表示背景覆盖 Invalidate();//上面函数带NULL的效果 // 坐标系转化 ScreenToClient();//屏幕坐标转化成客户区 ClientToScreen();//客户区坐标转化成屏幕 // 选择系统GDI对象 dc->GetStockObject(NULL_BRUSH);
COLORREF rgb,rgba,rgbold; rgb = RGB(255,0,0); //三原色 rgba = RGBA(255,0,0,0.5); // 三原色+透明度 COLORREF cr = GetSysColor(COLOR_BTNFACE);//获取系统颜色 rgbold = SetBkColor(hdc,rgb); // 设置绘图设备文字的背景色 rgbold = p_cdc->SetBkColor(rgb); // 设置绘图设备文字的背景色 dc->SetBkMode(TRANSPARENT); // 设置绘图设备文字的背景为无色透明 dc->SetTextColor();// 设置文字的颜色 dc->FillSolidRect(rect, RGB(255,0,0));//为绘图设备填充背景色
CPen *pen = new CPen(PS_SOLID, 5, rgb);//构造画笔分别是样式,宽度,颜色 pen->CreatePen(PS_SOLID, 5, rgb); // 创造画笔,记得DeleteObject pen->FromHandle(hpen); CPen *oldpen = p_cdc->SelectObject(pen); pen.DeleteObject(); CreateFontIndirect();//把详细信息LogPen转化成CPen GetLogPen();//把CPen转化成LogPen,其他object也是一样
LOGFONT lf; // 字体结构体 memset(&lf,0,sizeof(LOGFONT));//初始化,分配内存 _tcscpy_s(lf.lfFaceName, LF_FACESIZE,_T("Consolas"));//设置字体类型 lf.lfItalic = TRUE; // 斜体 lf.lfUnderline = TRUE; // 字体下划线 lf.lfHeight = 100; // 字体高度,单位像素 lf.lfWidth = 50; // 字体宽度 lf.lfWeight = FW_BOLD; // 字体的重量,加粗 CFont ft; //字体对象 ft.CreateFontIndirect(&lf); // 根据字体结构体创建对象 CFont font; font.CreatePointFont(200, L"Consolas");//简单创建 CFontDialog fontDlg(&lf); // 可以通过界面改变字体内容 CFont * oldft = p_cdc->SelectObject(&ft); // 载入字体 p_cdc->SetTextColor(fontDlg.GetColor()); // 设置字体颜色 p_cdc->TextOutW(100,300,_T("Hello World")); // 绘制字体
CBitmap bmp,bmp_oem,bmp_map,bmp_crt,bmp_cpb; bmp.LoadBitmapW(IDB_BITMAP1); // 加载普通位图 bmp_oem.LoadOEMBitmap(OBM_CHECK); // 加载系统默认位图 bmp_map.LoadMappedBitmap(IDB_BITMAP1); // 加载映射系统的位图资源 bmp_crt.CreateBitmap(100, 200,100,200,NULL); // 创建位图 bmp_cpb.CreateCompatibleBitmap(&ccdc,100,200); // 创建兼容绘图设备的位图
CBrush bs, bs_bmp,bs_hatch,bs_sys; bs.CreateSolidBrush(RGB(255,0,0)); // 实心画刷 bs_hatch.CreateHatchBrush(HS_CROSS, RGB(255, 0, 0)); // 带阴影画刷 bs_bmp.CreatePatternBrush(&bmp); // 位图画刷 bs_sys.CreateSysColorBrush(COLOR_WINDOW); // 系统颜色画刷 CBrush * oldbs = dc->SelectObject(&bs_sys); // 载入画刷 dc->Rectangle(CRect(50,50,100,200)); // 画一个矩形
CBitmap * oldbmp = m_cdc.SelectObject(&bmp_cpb); dc->BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &m_cdc, 0, 0, SRCCOPY); dc->StretchBlt(rc.left, rc.top, rc.Width(), rc.Height(), &m_cdc, 0, 0,100,100, SRCCOPY);