picture控件绘图

99 篇文章 0 订阅
52 篇文章 1 订阅

1. 该画法是采用后台绘画,再在前台显示,这样上一次画的内容不会残留:

//--------------------------------------------------------------------------
// 画图:矩形
// 采用后台画法:新画的图面会替代上一次的画面,之前画的内容不会再显示
// BMP_WIDTH 和 BMP_HEIGHT为画图区域总区域的宽和高
// 函数参数 width 和 height 为当前所画的画面区域的宽和高,
// 不能超出BMP_WIDTH,BMP_HEIGHT
// 注意:使用BMP_WIDTH 和 BMP_HEIGHT的两处位置,如替换成width和height则
// 无法出现背景,上一次画的图会残留显示
//--------------------------------------------------------------------------
void CGraphic::DrawBMP(int width, int height, COLORREF color)
{
	// 获取picture控件DC
	CDC *pDC;
	pDC = m_graDlg_bmp.GetDC();	// m_graDlg_bmp是picture控件对应的变量
//	pDC = GetDlgItem(IDC_BMP_DISPLAY)->GetDC();		// 第二种获取picture控件DC的方法

	// 创建后台位图buffer
	CBitmap bBmp;
	bBmp.CreateCompatibleBitmap(pDC,BMP_WIDTH,BMP_HEIGHT);	// 将后台BMP buffer和picture控件关联起来
															// 注意后两位参数,是显示的区域范围

	// 创建后台DC 
	CDC bDC;
	bDC.CreateCompatibleDC(pDC);	// 将后台DC和前台DC关联起来
	bDC.SelectObject(&bBmp);		// 后台DC与后台BMP buffer关联起来

	// 创建画刷
	CBrush brush;
	brush.CreateSolidBrush(color);	// 给画刷赋颜色

	// 画矩形
	CRect rect;
	rect.SetRect(0,0,width,height);		// 矩形的尺寸,前两个参数为左上角坐标,后两个参数为右下角坐标
	bDC.Rectangle(rect);				// DC(后台)绘制矩形
	bDC.FillRect(&rect,&brush);			// 为矩形上色

	// 将后台DC绘制的内容copy显示到前台
	pDC->BitBlt(0,0,BMP_WIDTH,BMP_HEIGHT,&bDC,0,0,SRCCOPY);

}


 

2. 创建打开窗口,下载BMP位图,m_graDlg_bmp为Picture控件对应的Control型变量:

CString bmpName;	//BMP photo path

	//--------------------------------------------------------------------
	// 打开BMP位图并显示出来
	//--------------------------------------------------------------------
	CFileDialog openDlg(true,"*.bmp",NULL,NULL,"*.bmp|*.bmp||");	// creat open BMP dialog
	if (openDlg.DoModal()==IDOK)	// finish the photo choose
	{
		bmpName = openDlg.GetPathName();	// get BMP photo path

		// display bmp photo
		HBITMAP oldBmp = m_graDlg_bmp.SetBitmap((HBITMAP)LoadImage(NULL,bmpName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE));		// associate bmp photo with bmp control

		DeleteObject(oldBmp);
	}
	else
		return;

    picture控件与要显示的位图,通过SetBitMap关联起来;位图的导入通过LoadImage()函数。

 

    也可以在button控件函数中只导入BMP位图,显示在WM_COLOR的Onpaint()函数实现:

void CGraphic::OnBnClickedBtnLoadbmp()
{
	// TODO: Add your control notification handler code here

	//--------------------------------------------------------------------
	// 打开BMP位图并显示出来
	//--------------------------------------------------------------------
	CFileDialog openDlg(true,"*.bmp",NULL,NULL,"*.bmp|*.bmp||");	// creat open BMP dialog
	if (openDlg.DoModal()==IDOK)	// finish the photo choose
	{
		bmpName = openDlg.GetPathName();	// get BMP photo path
	}
	else
		return;
}
void CGraphic::OnPaint()
{
    m_graDlg_bmp.SetBitmap((HBITMAP)LoadImage(NULL,bmpName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
}


注意:导入BMP文件要使用LoadImage(),不能用CBitmap::LoadBitmap。

参考:http://blog.csdn.net/phenixyf/article/details/38439435


   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值