版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/79693626
要达成如题的目的,首先要对以下知识做一些了解:
1.MFC创建对话框工程以及在对话框下的空间操作。
2.MFC加载图片以及显示图片。
3.二维码的相关知识。
首先,了解bmp图片格式。
然后,了解什么是二维码以及实现过程。
接着,了解libqr(一个二维码生成库的介绍,源码及相关库点击这里)
最后,将生成的数据绘制图片或者输出到文件,之后将图片加载即可(我就用的后一种方式,太笨了)
这里就直接上代码了。。。。
//定义bitmap指针 调用函数LoadImage装载位图
HBITMAP m_hBitmap;CString str;
GetPath(str); //得到图片路径
if (str.IsEmpty())
{
return -1;
}
str= str+BmpName; //BmpName是图片名字
m_hBitmap=(HBITMAP)LoadImage(NULL,str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);/*************************************************************************/
/* 1.要装载OEM图像,则设此参数值为0 OBM_ OEM位图 OIC_OEM图标 OCR_OEM光标
/* 2.BmpName要装载图片的文件名
/* 3.装载图像类型:
/* IMAGE_BITMAP-装载位图 IMAGE_CURSOR-装载光标 IMAGE_ICON-装载图标
/* 4.指定图标或光标的像素宽度和长度 以像素为单位
/* 5.加载选项:
/* IR_LOADFROMFILE-指明由lpszName指定文件中加载图像
/* IR_DEFAULTSIZE-指明使用图像默认大小
/* LR_CREATEDIBSECTION-当uType参数为IMAGE_BITMAP时,创建一个DIB项
/**************************************************************************/
//m_bitmap是一个CBitmap对象
{
m_bitmap.Detach(); //切断CWnd和窗口联系
}
m_bitmap.Attach(m_hBitmap); //将句柄HBITMAP m_hBitmap与CBitmap m_bitmap关联
//获取控件的边界大小
CRect rect;
GetDlgItem(IDC_PICTURE)->GetClientRect(&rect);
//图片显示(x,y)起始坐标
int m_showX=rect.left;
int m_showY=rect.top;
int m_nWindowWidth = rect.Width(); //计算客户区宽度
int m_nWindowHeight = rect.Height(); //计算客户区高度
//定义并创建一个内存设备环境DC
CDC *pDC = GetDlgItem(IDC_PICTURE)->GetDC();
CDC dcBmp;
if( !dcBmp.CreateCompatibleDC(pDC) ) //创建兼容性的DC
return -1;
BITMAP m_bmp; //临时bmp图片变量
m_bitmap.GetBitmap(&m_bmp); //将图片载入位图中
CBitmap *pbmpOld = NULL;
dcBmp.SelectObject(&m_bitmap); //将位图选入临时内存设备环境
//图片显示调用函数stretchBlt
pDC->StretchBlt(m_showX,m_showY,m_nWindowWidth,m_nWindowHeight,&dcBmp,0,0,m_bmp.bmWidth,m_bmp.bmHeight,SRCCOPY);
/*******************************************************************************/
/* BOOL StretchBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,
/* int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,DWORD dwRop );
/* 1.参数x、y位图目标矩形左上角x、y的坐标值
/* 2.nWidth、nHeigth位图目标矩形的逻辑宽度和高度
/* 3.pSrcDC表示源设备CDC指针
/* 4.xSrc、ySrc表示位图源矩形的左上角的x、y逻辑坐标值
/* 5.dwRop表示显示位图的光栅操作方式 SRCCOPY用于直接将位图复制到目标环境中
/*******************************************************************************/
dcBmp.SelectObject(pbmpOld); //恢复临时DC的位图
DeleteObject(&m_bitmap); //删除内存中的位图
dcBmp.DeleteDC(); //删除CreateCompatibleDC得到的图片DC
ReleaseDC(pDC); //释放获取的DC句柄。
Ending。。。。。。。。