龙空技术网

一文详解MFC图形控件和双缓冲绘图技术

千幻千寻 1119

前言:

眼前朋友们对“mfc绘图控件”大致比较关切,朋友们都需要学习一些“mfc绘图控件”的相关内容。那么小编同时在网络上网罗了一些对于“mfc绘图控件””的相关知识,希望同学们能喜欢,我们快快来了解一下吧!

图形控件

图像控件Picture Control用于显示图像以美化界面。

首先导入风景图片资源,并重命名ID:IDB_BITMAP_FJ。

位图属性选择类型:Bitmap,图像为资源ID:IDB_BITMAP_FJ。

动态加载位图

导入一张新图片资源,添加一个加载新图片按钮,并给图形控件绑定一个控件类型变量。

void CDemoDlg::OnBnClickedBtnLoadNewPic(){	HBITMAP hBmp = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_FJ2));	m_pic.SetBitmap(hBmp);}
什么是双缓冲技术?

在我们的电脑中,屏幕中显示的东西都会被放在一个显示缓存中,即单缓冲。在单缓冲中任何绘图的过程都会被立即显示在屏幕中,而双缓冲就是在这个显示的缓冲区外再建一个不显示的缓冲区,所有的绘图都在这个不显示的缓冲区进行,当一帧都绘制完毕后再拷贝到真正的显示缓冲区,这样就不会出现闪烁的现象。

void CDemoDlg::OnPaint(){	if (IsIconic())	{		CPaintDC dc(this); // 用于绘制的设备上下文		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);		// 使图标在工作区矩形中居中		int cxIcon = GetSystemMetrics(SM_CXICON);		int cyIcon = GetSystemMetrics(SM_CYICON);		CRect rect;		GetClientRect(&rect);		int x = (rect.Width() - cxIcon + 1) / 2;		int y = (rect.Height() - cyIcon + 1) / 2;		// 绘制图标		dc.DrawIcon(x, y, m_hIcon);	}	else	{		CPaintDC dc(this);		// 1.创建第二缓冲区		CDC memDC;		memDC.CreateCompatibleDC(&dc);		CBitmap bmp;		bmp.LoadBitmapW(IDB_BITMAP_LOGO);		// 2.把位图放入第二缓冲区,并在画布上绘制内容		memDC.SelectObject(&bmp);		memDC.SetBkMode(TRANSPARENT);		memDC.TextOutW(0, 0, _T("我的logo"));		// 3.将第二缓冲区内容拷贝到第一缓冲区,立即显示在屏幕上		CRect rect;		GetClientRect(rect);		dc.BitBlt(250, 680, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);		CDialogEx::OnPaint();	}
视频讲解

视频加载中...

标签: #mfc绘图控件 #mfc画图控件 #mfc图形绘制