mfc中通過觸發List Box 控制元件來顯示圖片
阿新 • • 發佈:2019-01-06
幫小學弟寫的一個mfc的小程式,比較簡單。
1.觸發List Bo控制元件的左鍵單擊事件
void Ctest_pictureDlg::OnLbnDblclkList1() { // TODO: 在此新增控制元件通知處理程式程式碼 int nIndex = m_listBox.GetCurSel(); CString BmpName; CString PicInfo; switch (nIndex) { case 0: BmpName = "0.bmp"; PicInfo = "第0石英"; break; case 1: BmpName = "1.bmp"; PicInfo = "第1石英"; break; case 2: BmpName = "2.bmp"; PicInfo = "第2石英"; break; case 3: BmpName = "3.bmp"; PicInfo = "第3石英"; break; case 4: BmpName = "4.bmp"; PicInfo = "第4石英"; break; case 5: BmpName = "5.bmp"; PicInfo = "第5石英"; break; default: break; } ShowPicture(BmpName); ShowPictureInfo(PicInfo); }
2.讀取圖片的方法比較特別,可以適應static控制元件的大小。
void Ctest_pictureDlg::ShowPicture(CString BmpName) { //定義變數儲存圖片資訊 BITMAPINFO *pBmpInfo; //記錄影象細節 BYTE *pBmpData; //影象資料 BITMAPFILEHEADER bmpHeader; //檔案頭 BITMAPINFOHEADER bmpInfo; //資訊頭 CFile bmpFile; //記錄開啟檔案 //以只讀的方式開啟檔案 讀取bmp圖片各部分 bmp檔案頭 資訊 資料 if (!bmpFile.Open(BmpName, CFile::modeRead | CFile::typeBinary)) { MessageBox( _T("Picture not found!") , _T("Error") ,NULL ); return; } if (bmpFile.Read(&bmpHeader, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER)) return; if (bmpFile.Read(&bmpInfo, sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER)) return; pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)]; //為影象資料申請空間 memcpy(pBmpInfo, &bmpInfo, sizeof(BITMAPINFOHEADER)); DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits; pBmpData = (BYTE*)new char[dataBytes]; bmpFile.Read(pBmpData, dataBytes); bmpFile.Close(); //顯示影象 CWnd *pWnd = GetDlgItem(IDC_STATIC_Pic); //獲得pictrue控制元件視窗的控制代碼 CRect rect; pWnd->GetClientRect(&rect); //獲得pictrue控制元件所在的矩形區域 CDC *pDC = pWnd->GetDC(); //獲得pictrue控制元件的DC pDC->SetStretchBltMode(COLORONCOLOR); StretchDIBits(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, bmpInfo.biWidth, bmpInfo.biHeight, pBmpData, pBmpInfo, DIB_RGB_COLORS, SRCCOPY); }
3.字型控制程式碼
void Ctest_pictureDlg::OnLbnDblclkListFont() { // TODO: 在此新增控制元件通知處理程式程式碼 int nIndex = m_fontList.GetCurSel(); CString FontType; switch (nIndex) { case 0: FontType = _T("Arial"); break; case 1: FontType = _T("黑體"); break; case 2: FontType = _T("宋體"); break; case 3: FontType = _T("微軟雅黑"); break; case 4: FontType = _T("仿宋"); break; case 5: FontType = _T("楷體"); break; default: break; } MySetFont(FontType); }
void Ctest_pictureDlg::MySetFont(CString FontType)
{
CFont * f;
f = new CFont;
f->CreateFont(16, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_BOLD, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
DEFAULT_CHARSET,//CHINESEBIG5_CHARSET,//ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
FontType.GetBuffer(FontType.GetLength() )); // lpszFac
GetDlgItem(IDC_STATIC_PICINFO)->SetFont(f);
m_listBox.SetFont(f);
m_fontList.SetFont(f);
}
static控制元件參考: