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”
核心代码借鉴的网上的而且很容易找到,我只是添加了选择图片和显示图片路径的功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端