MFC需要将不同大小、格式的图片,以列表的形式展现出来(缩略图形式)

Ryan890830 2015-07-30 03:54:51
在MFC界面中,需要将一系列图片(图片大小不同、图片格式可能是jpg、bmp等),以列表的形式展现出来,用户看到的是缩略图,如下图所示:


试过了CListCtrl与CImageList结合使用,但还是无法自适应的显示不同大小的图片,求大神帮助,有代码最好了,谢谢!
...全文
1484 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueandbright 2017-11-23
  • 打赏
  • 举报
回复
想进来学习下,下载资料看看,结果积分不够啊
。。
Henry_2017 2017-11-18
  • 打赏
  • 举报
回复
Button中按您说的方法 pThumbnailBox->Invalidate();后,滚动没有了
wgxh05 2016-11-14
  • 打赏
  • 举报
回复
感谢楼主的分享
RainbowXin 2016-11-02
  • 打赏
  • 举报
回复
怎样为图片添加点击事件呢 每个按钮添加图片 未免太麻烦了 有其他方法吗 各位
RainbowXin 2016-11-01
  • 打赏
  • 举报
回复
请问如何给每张图片添加点击事件啊?
RainbowXin 2016-11-01
  • 打赏
  • 举报
回复
点击图片时 如何打开图片所在路径啊 还是添加button 在画图片的时候
u010991430 2015-10-12
  • 打赏
  • 举报
回复
请问如何给每张图片添加点击事件啊?
阿源是少年 2015-08-13
  • 打赏
  • 举报
回复
你应该把pThumbnailBox_human声明成员变量,OnInitDialog里面new CThumnailBox,然后做初始化添加AddImage,之后你按钮的操作只需要RemoveAllImage你之前添加的图片,然后AddImage添加新图片,再pThumbnailBox_human->Invalidate刷新就可以了,不要重新创建
阿源是少年 2015-08-13
  • 打赏
  • 举报
回复
不要点按钮就重新创建,因为你初始化已经创建了一个了,你只需要在点击按钮后,先对成员变量pThumbnailBox_human
pThumbnailBox_human->RemoveAllImage();
然后重新AddImage()
然后pThumbnailBox_human->Invalidate();
Ryan890830 2015-08-13
  • 打赏
  • 举报
回复
引用 25 楼 pcradio 的回复:
按钮的响应里有没有绘制代码,还是只是调了Invalidate()?
void CThumbnailBoxDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 //MessageBox(L"单数 被选中"); //******************* CWnd *pWnd; pWnd = GetDlgItem(IDC_STATIC); CRect rcClient; pWnd->GetWindowRect(&rcClient); CThumbnailBox* pThumbnailBox_human = new CThumbnailBox; for(int i=0; i<200; i++) { if(i%2 ==1) { TCHAR lpszImageName[64] = {0}; _stprintf(lpszImageName, TEXT("image\\%d_ori.jpg"), i); pThumbnailBox_human->AddImage(lpszImageName); } } pThumbnailBox_human->Create(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), this); }
阿源是少年 2015-08-13
  • 打赏
  • 举报
回复
按钮的响应里有没有绘制代码,还是只是调了Invalidate()?
Ryan890830 2015-08-13
  • 打赏
  • 举报
回复
引用 21 楼 pcradio 的回复:
因为滑动会引起Invalidate导致整个窗口重画,我以前是全部画出来的,你现在搞成Static我真心没懂为啥非要搞个Static你才能显示文字,画上去不就完了吗。只要滚动了,就会引发整个窗体重绘,你设置单双显示应该把这个开关设成成员变量,在OnPaint里去根据这个开关来设置显示行数,你如果在RadioButton的OnClick里用CClientDC来绘制是不行的,我不知道你如何处理的逻辑
抱歉,让您费心了。 1.我加的StaticText不是为了显示文字,我只是想拿到StaticText的矩形区域坐标(或者我不用StaticText,直接指定一个矩形区域坐标比如(top,btm,left,right)=(10,600,10,300)),在这个矩形区域里显示缩略图,因为整个窗口还需要其他控件,所以我就在窗口中的一个矩形区域显示缩略图。 2.文字我是直接画上去的,放在OnPaint和图片一起画出来的。 3.或者现在我不用Radio,直接两个按钮,点击一个按钮在这个矩形区域显示一批图片,点击另一个按钮在这个矩形区域显示另一批不同的图片。就是想实现这样的功能。 4.如下图,问题是点击人物图像后显示正确;再去点击风景图像时,显示是正确的,但是拖动滚动条又回到人物图像去了,也就是又回到最开始显示的那批图片。
阿源是少年 2015-08-13
  • 打赏
  • 举报
回复
引用 29 楼 Ryan890830 的回复:
[quote=引用 28 楼 pcradio 的回复:] 你应该把pThumbnailBox_human声明成员变量,OnInitDialog里面new CThumnailBox,然后做初始化添加AddImage,之后你按钮的操作只需要RemoveAllImage你之前添加的图片,然后AddImage添加新图片,再pThumbnailBox_human->Invalidate刷新就可以了,不要重新创建
按您的指点已经搞定了,哈哈,非常的感谢!我太笨了,基础的都不懂,只能摸索着去做。[/quote] OK
Ryan890830 2015-08-13
  • 打赏
  • 举报
回复
引用 28 楼 pcradio 的回复:
你应该把pThumbnailBox_human声明成员变量,OnInitDialog里面new CThumnailBox,然后做初始化添加AddImage,之后你按钮的操作只需要RemoveAllImage你之前添加的图片,然后AddImage添加新图片,再pThumbnailBox_human->Invalidate刷新就可以了,不要重新创建
按您的指点已经搞定了,哈哈,非常的感谢!我太笨了,基础的都不懂,只能摸索着去做。
阿源是少年 2015-08-12
  • 打赏
  • 举报
回复
引用 22 楼 gz_qmc 的回复:
[quote=引用 21 楼 pcradio 的回复:] 因为滑动会引起Invalidate导致整个窗口重画,我以前是全部画出来的,你现在搞成Static我真心没懂为啥非要搞个Static你才能显示文字,画上去不就完了吗。只要滚动了,就会引发整个窗体重绘,你设置单双显示应该把这个开关设成成员变量,在OnPaint里去根据这个开关来设置显示行数,你如果在RadioButton的OnClick里用CClientDC来绘制是不行的,我不知道你如何处理的逻辑
二B的心思你别猜,你猜来猜去也猜不明白[/quote]
gz_qmc 2015-08-12
  • 打赏
  • 举报
回复
引用 21 楼 pcradio 的回复:
因为滑动会引起Invalidate导致整个窗口重画,我以前是全部画出来的,你现在搞成Static我真心没懂为啥非要搞个Static你才能显示文字,画上去不就完了吗。只要滚动了,就会引发整个窗体重绘,你设置单双显示应该把这个开关设成成员变量,在OnPaint里去根据这个开关来设置显示行数,你如果在RadioButton的OnClick里用CClientDC来绘制是不行的,我不知道你如何处理的逻辑
二B的心思你别猜,你猜来猜去也猜不明白
阿源是少年 2015-08-12
  • 打赏
  • 举报
回复
因为滑动会引起Invalidate导致整个窗口重画,我以前是全部画出来的,你现在搞成Static我真心没懂为啥非要搞个Static你才能显示文字,画上去不就完了吗。只要滚动了,就会引发整个窗体重绘,你设置单双显示应该把这个开关设成成员变量,在OnPaint里去根据这个开关来设置显示行数,你如果在RadioButton的OnClick里用CClientDC来绘制是不行的,我不知道你如何处理的逻辑
Ryan890830 2015-08-12
  • 打赏
  • 举报
回复
引用 13 楼 pcradio 的回复:
assertion fail
又有问题请教您,耽误您时间了,抱歉。我在窗口中加了一个StaticText区域,在这个指定区域中显示缩略图。 然后现在想在这个指定区域显示不同要求下的一系列缩略图,比如一系列图片编号为1、2、3……,设置显示全部图像,或者设置显示单数图像,或者显示双数图像,如下图样式。 但是我遇到一开始点击单数图像后显示正确;再点击双数图像也显示正确,但是一旦滑动滚动条就又回到单数图像去了。不知道怎么解决?
Ryan890830 2015-08-06
  • 打赏
  • 举报
回复
引用 16 楼 pcradio 的回复:
[quote=引用 15 楼 Ryan890830 的回复:] [quote=引用 14 楼 pcradio 的回复:] Line:59的ASSERT()是我加上去的,如果你AddImage时图片路径不对或者文件格式有问题,就会触发,你检查AddImage时传入图片的路径
明白了,已经搞定了。非常感谢您耐心指教,努力向您学习![/quote][/quote] 不好意思,又麻烦您。想问下在显示的每张图下面是否可以加上对该图相应的文本描述,比如某张图的box下面有两行信息:第一行是该图的名称0.jpg,第二行为时间2015-08-06/11:31:00。非常感谢!
Ryan890830 2015-08-06
  • 打赏
  • 举报
回复
引用 18 楼 pcradio 的回复:
[quote=引用 17 楼 Ryan890830 的回复:] [quote=引用 16 楼 pcradio 的回复:] [quote=引用 15 楼 Ryan890830 的回复:] [quote=引用 14 楼 pcradio 的回复:] Line:59的ASSERT()是我加上去的,如果你AddImage时图片路径不对或者文件格式有问题,就会触发,你检查AddImage时传入图片的路径
明白了,已经搞定了。非常感谢您耐心指教,努力向您学习![/quote][/quote] 不好意思,又麻烦您。想问下在显示的每张图下面是否可以加上对该图相应的文本描述,比如某张图的box下面有两行信息:第一行是该图的名称0.jpg,第二行为时间2015-08-06/11:31:00。非常感谢![/quote] 都是画上去的,你在OnPaint里自己加嘛,坐标都是算好的,你DrawText就完事了[/quote] 嗯好的,明白了。非常感谢指点,
加载更多回复(17)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧