window環境下利用MFC生成二維碼並顯示在對話方塊上
阿新 • • 發佈:2018-12-14
要達成如題的目的,首先要對以下知識做一些瞭解:
1.MFC建立對話方塊工程以及在對話方塊下的空間操作。
2.MFC載入圖片以及顯示圖片。
3.二維碼的相關知識。
首先,瞭解bmp圖片格式。
然後,瞭解什麼是二維碼以及實現過程。
接著,瞭解libqr(一個二維碼生成庫的介紹,原始碼及相關庫點選這裡)
最後,將生成的資料繪製圖片或者輸出到檔案,之後將圖片載入即可(我就用的後一種方式,太笨了)
這裡就直接上程式碼了。。。。
//定義bitmap指標 呼叫函式LoadImage裝載點陣圖
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。。。。。。。。