MFC圖片控件(Picture、List Contrl)


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 }
View Code

 運行效果:

    

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 }
ListCtrl

運行效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM