MFC中通过Picture control控件显示选中的图片

 

  1、首先看效果

  左右留空白

 

  上下留空白

   

 2、代码部分

  需要准备的控件:Picture Control,Edit Control,Button

  首先Picture Control控件的ID为IDCANCEL,

  给编辑框添加变量为Edit1,

  双击Button控件添加以下代码。

复制代码
 1 CString File_Path;
 2 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL);
 3 
 4 if(dlg.DoModal()==IDOK)
 5 {
 6     File_Path = dlg.GetPathName();
 7     Edit1.SetWindowTextW(File_Path);
 8 
 9     //展示图片
10     float cx, cy, dx, dy, k, t;//跟控件的宽和高以及图片宽和高有关的参数
11     CRect   rect;//用于获取图片控件的宽和高
12     CImage cimage;//为cimage图片类创建一个对象
13     cimage.Load(File_Path);//构造函数的形参是所加载图片的路径 
14     cx = cimage.GetWidth();
15     cy = cimage.GetHeight();//获取图片的宽 高
16     k = cy / cx;//获得图片的宽高比
17 
18     CWnd *pWnd = NULL;
19     pWnd = GetDlgItem(IDCANCEL);//获取控件句柄
20     pWnd->GetClientRect(&rect);//获取Picture Control控件的客户区
21     dx = rect.Width();
22     dy = rect.Height();
23     t = dy / dx;//获得控件的宽高比
24     if (k >= t)
25     {
26 
27         rect.right = floor(rect.bottom / k);
28         rect.left = (dx - rect.right) / 2;
29         rect.right = floor(rect.bottom / k) + (dx - rect.right) / 2;
30     }
31     else
32     {
33         rect.bottom = floor(k*rect.right);
34         rect.top = (dy - rect.bottom) / 2;
35         rect.bottom = floor(k*rect.right) + (dy - rect.bottom) / 2;
36     }
37    
38 
39     CDC *pDc = NULL;
40     pDc = pWnd->GetDC();
41     int ModeOld = SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
42 
43     GetDlgItem(IDCANCEL)->ShowWindow(FALSE);
44     GetDlgItem(IDCANCEL)->ShowWindow(TRUE);
45     cimage.StretchBlt(pDc->m_hDC, rect, SRCCOPY);
46     SetStretchBltMode(pDc->m_hDC, ModeOld);
47     ReleaseDC(pDc);
48 
49 }
复制代码

  如果出现floor错误,头文件添加#include “math.h”

  核心代码借鉴的网上的而且很容易找到,我只是添加了选择图片和显示图片路径的功能。

 

posted @   1全村人的希望  阅读(416)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示