MFC-GUI绘图相关摘要

来源:互联网 发布:配置php开发环境 编辑:程序博客网 时间:2024/05/20 11:25

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);//缓冲区DCCPaintDC  cpdc(cWnd);//只能用在OnPaint方法里,只是客户区OnPaint    CClientDC ccdc(cWnd);//绘制客户区,也是临时的,刷新就没了CWindowDC *wdc = (CWindowDC*)cWnd->GetWindowDC();// 绘制整个窗口OnNcPaintHDC hdc = p_cdc->GetSafeHdc();ReleaseDC(dc);// 释放获取的绘图设备,CPaintDC不需要释放,GetDC后必须ReleaseDCdc->DeleteDC();// 删除DC,除非你自己Create的,否则不允许你删除dc->Detach(); // 分离DC,而不删除,Attach后,必须Detach

2、坐标刷新相关

// 获取绘图设备的区域CRect rect;GetWindowRect(rect);//获取整个窗口的区域GetClientRect(rect);// 获取客户区的区域// 强制刷新客户区OnPaint,带NULL,全屏刷新InvalidateRect();//TRUE表示背景覆盖Invalidate();//上面函数带NULL的效果// 坐标系转化ScreenToClient();//屏幕坐标转化成客户区ClientToScreen();//客户区坐标转化成屏幕// 选择系统GDI对象dc->GetStockObject(NULL_BRUSH);

3、颜色COLORREF,GetB(R|G)Value获取单通道色

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));//为绘图设备填充背景色

4、画笔CPen 及 HPEN

CPen *pen = new CPen(PS_SOLID, 5, rgb);//构造画笔分别是样式,宽度,颜色pen->CreatePen(PS_SOLID, 5, rgb); // 创造画笔,记得DeleteObjectpen->FromHandle(hpen);CPen *oldpen = p_cdc->SelectObject(pen);pen.DeleteObject();CreateFontIndirect();//把详细信息LogPen转化成CPenGetLogPen();//把CPen转化成LogPen,其他object也是一样

5、字体

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")); // 绘制字体

6、位图CBitmap

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); // 创建兼容绘图设备的位图

7、画刷CBrush

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)); // 画一个矩形

8、双缓冲绘图

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);



0 0
原创粉丝点击