MFC圖片控件Picture Control使用幾個實例
1、按鈕選擇圖片顯示到控件上
為方便說明,本例子用PictureTest創建一個對話框,類名CPictureTestDlg,在CPictureTestDlg.h文件中申明CImage image;CString strFilePath;CString strFileName;再從工具箱中托一個Picture控件到對話框中,ID為IDC_STATIC,調整適當大小后再添加一個添加圖片的按鈕。如下圖所示:
為按鈕添加事件處理程序代碼:

1 void CPictureTestDlg::OnBnClickedButton1() 2 { 3 // TODO: 在此添加控件通知處理程序代碼 4 //選擇圖片 5 CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("imageFiles(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this); 6 fileDlg.DoModal(); 7 //獲取圖片路徑和圖片名稱 8 strFilePath = fileDlg.GetPathName(); 9 strFileName = fileDlg.GetFileName(); 10 //判斷路徑不為空 11 if (strFilePath == _T("")) 12 { 13 return; 14 } 15 image.Load(strFilePath); 16 //以下兩個矩形主要作用是,獲取對話框上面的Picture Control的width和height, 17 //並設置到圖片矩形rectPicture,根據圖片矩形rectPicture對圖片進行處理, 18 //最后繪制圖片到對話框上Picture Control上面 19 CRect rectControl; //控件矩形對象 20 CRect rectPicture; //圖片矩形對象 21 int x = image.GetWidth(); 22 int y = image.GetHeight(); 23 //Picture Control的ID為IDC_IMAGE 24 CWnd* pWnd = GetDlgItem(IDC_STATIC); 25 pWnd->GetClientRect(rectControl); 26 CDC* pDc = GetDlgItem(IDC_STATIC)->GetDC(); 27 SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE); 28 rectPicture = CRect(rectControl.TopLeft(), CSize((int)rectControl.Width(), (int)rectControl.Height())); 29 ((CStatic*)GetDlgItem(IDC_STATIC))->SetBitmap(NULL); 30 //以下兩種方法都可繪制圖片 31 //image.StretchBlt(pDc->m_hDC, rectPicture, SRCCOPY); //將圖片繪制到Picture控件表示的矩形區域 32 image.Draw(pDc->m_hDC, rectPicture); //將圖片繪制到Picture控件表示的矩形區域 33 image.Destroy(); 34 pWnd->ReleaseDC(pDc); 35 }
運行效果:
2、List Control控件顯示文件列表
從工具箱中拖拽一個ListCtrl控件到對話框中,添加變量為CListCtrl pListCtrl;

1 BOOL CListControlDlg::OnInitDialog() 2 { 3 // TODO: 在此添加額外的初始化代碼 4 pListCtrl.DeleteAllItems(); 5 pListCtrl.InsertColumn(0, _T("文件名"), LVCFMT_CENTER, 120); 6 pListCtrl.InsertColumn(1, _T("文件類型"), LVCFMT_CENTER, 100); 7 pListCtrl.InsertColumn(2, _T("文件大小"), LVCFMT_CENTER, 100); 8 pListCtrl.InsertColumn(3, _T("存放路徑"), LVCFMT_LEFT, 500); 9 //DWORD dwStyle = pListCtrl.GetExtendedStyle(); //獲取當前擴展樣式 10 //dwStyle |= LVS_EX_FULLROWSELECT; //選中某行使整行高亮(report風格時) 11 //dwStyle |= LVS_EX_GRIDLINES; //網格線(report風格時) 12 pListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); //設置擴展風格 LVS_EX_CHECKBOXES 13 pListCtrl.DeleteAllItems(); 14 CFileFind finder; 15 //建立CString對象,設置檢索匹配字符串 16 CString strWildcard(_T("C:\\Users\\Administrator\\Desktop\\imageFile")); 17 strWildcard += _T("\\*.*"); 18 //文件內部檢索 19 BOOL bWorking = finder.FindFile(strWildcard); 20 int i; //用於定位字符,作為下標 21 int index = 0; //用於列表索引 22 CString fontName, lastType, filepath, filename, filesize;//存儲切割結果 23 while (bWorking) 24 { 25 bWorking = finder.FindNextFile(); 26 filename = finder.GetFileName(); 27 //假設文件夾里面全是圖片,獲取圖片文件長度 28 int imageSize = finder.GetLength(); 29 if (filename != _T(".") && filename != _T("..")) 30 { 31 filepath = finder.GetFilePath(); 32 for (i = 0;i < filename.GetLength();i++) 33 { 34 if (filename[i] == '.') 35 { 36 fontName = filename.Mid(0, i); 37 lastType = filename.Mid(i + 1, filename.GetLength()); 38 filesize.Format(_T("%d"), imageSize / 1024); 39 filesize += "k"; 40 pListCtrl.InsertItem(index, fontName); 41 pListCtrl.SetItemText(index, 1, lastType); 42 pListCtrl.SetItemText(index, 2, filesize); 43 pListCtrl.SetItemText(index, 3, filepath); 44 } 45 } 46 index++; 47 } 48 } 49 finder.Close(); 50 return TRUE; // 除非將焦點設置到控件,否則返回 TRUE 51 }
運行效果: