本文提供两种方法来解决MFC中使用滚动条来显示大图片的问题。

方法1:
直接使用MFC中的滚动条控件,关键代码如下

void CScrollPicDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{// TODO: 在此添加消息处理程序代码和/或调用默认值if (NULL == hDC){return;}else{int iNowPos;switch (nSBCode){SCROLLINFO ver;case SB_THUMBPOSITION:case SB_THUMBTRACK: //拖动滑块ZeroMemory(&ver, sizeof(ver));ver.cbSize = sizeof(ver);ver.fMask = SIF_TRACKPOS;m_hScrollBar.GetScrollInfo(&ver);m_pointx = ver.nTrackPos;ZeroMemory(&ver, sizeof(ver));ver.cbSize = sizeof(ver);ver.fMask = SIF_POS;ver.nPos = m_pointx;m_hScrollBar.SetScrollInfo(&ver);PicShow();break;       case SB_PAGERIGHT: //单击箭头与滚块之间的区域case SB_LINERIGHT: //单击滚动条向右的箭头ZeroMemory(&ver, sizeof(ver));ver.cbSize = sizeof(ver);m_hScrollBar.GetScrollInfo(&ver, SIF_POS);iNowPos = ver.nPos;iNowPos = iNowPos + 20;if (iNowPos > m_MaxWidth - Swidth)iNowPos = m_MaxWidth - Swidth;m_hScrollBar.SetScrollPos(iNowPos);m_pointx = iNowPos;PicShow();break;case SB_PAGELEFT: //单击箭头与滚块之间的区域case SB_LINELEFT: //单击滚动条向左的箭头ZeroMemory(&ver, sizeof(ver));ver.cbSize = sizeof(ver);m_hScrollBar.GetScrollInfo(&ver, SIF_POS);iNowPos = ver.nPos;iNowPos = iNowPos - 20;if (iNowPos < m_MinWidth)iNowPos = m_MinWidth;m_hScrollBar.SetScrollPos(iNowPos); m_pointx = iNowPos;PicShow();break;default:break;}}CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

方法2:
通过重载CButton类,在CButton上实现带滚动条的图片显示控件,在DrawItem函数当中我们实现在CButton上画图操作即可。另外滚动条的实现直接调用ShowScrollBar函数来显示滚动条,通过SetScrollRange来设置最大和最小可以滚动到的位置,通过SetScrollInfo函数来设置滚动条的长度。拖动滚动条的实现图片的区域显示,通过在OnVScroll和OnHScroll消息函数当中实现。关键代码如下

// 滚动条消息函数
void CButtonPic::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{// TODO: Add your message handler code here and/or call defaultswitch(nSBCode){case SB_LEFT:m_nHorzPos = 0;this->SetScrollPos(SB_HORZ,m_nHorzPos);DarwPic();break;case SB_LINELEFT:case SB_PAGELEFT:m_nHorzPos -= m_nOneStep;if(m_nHorzPos<0)m_nHorzPos = 0;this->SetScrollPos(SB_HORZ,m_nHorzPos);DarwPic();break;case SB_LINERIGHT:case SB_PAGERIGHT:m_nHorzPos += m_nOneStep;if(m_nHorzPos>m_nHorzMaxSize)m_nHorzPos = m_nHorzMaxSize;this->SetScrollPos(SB_HORZ,m_nHorzPos);DarwPic();break;case SB_RIGHT:m_nHorzPos = m_nHorzMaxSize;this->SetScrollPos(SB_HORZ,m_nHorzPos);DarwPic();break;case SB_THUMBPOSITION:case SB_THUMBTRACK:m_nHorzPos = nPos;this->SetScrollPos(SB_HORZ,m_nHorzPos);DarwPic();break;default:break;}CButton::OnHScroll(nSBCode, nPos, pScrollBar);
}//  图片显示函数
void CButtonPic::DarwPic()
{CDC* pDC = this->GetDC();CRect rc;this->GetClientRect(&rc);CBitmap cbmp;BITMAP bm;LoadJpg(cbmp,m_uiSourcePic);cbmp.GetBitmap(&bm);CDC dcImage;dcImage.CreateCompatibleDC(pDC); dcImage.SelectObject(&cbmp);//画图pDC->StretchBlt(0,0,rc.Width(),rc.Height(), &dcImage,m_nHorzPos ,m_nVertPos,rc.Width(),rc.Height(),SRCCOPY);
}

运行效果如下图:

两种解决方案的代码我已上传到
http://download.csdn.net/detail/yushitou27/9389225;
http://download.csdn.net/detail/yushitou27/9389292;

MFC使用滚动条显示大图片相关推荐

  1. JEECMS的新浪图集在IE9、10不能显示大图片BUG的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 最近我给学校对外交流合作处做的网站,因为是学java开发,所以就基于JEECMS去做. 等到项目做好,差不多要 交工的时候,发 ...

  2. android高仿微信UI点击头像显示大图片效果

    用过微信的朋友朋友都见过微信中点击对方头像显示会加载大图,先贴两张图片说明下: 这种UI效果对用户的体验不错,今天突然有了灵感,试着去实现,结果就出来了.. 下面说说我的思路: 1.点击图片时跳转到另 ...

  3. 在DialogFragment中显示大图片

    点击某个ImageView,显示大图片 1.创建ImageFragment,来装图片 public class ImageFragment extends DialogFragment {public ...

  4. Android自定义View实现图片放大,平移和显示大图片

    原文地址 图片如果不显示:点击这里 前言 首先分析一下需求:将一个图片显示在屏幕上,并能够对其放大或者平移. 用 canvas 画 bitmap 主要有这么几个方法. void drawBitmap( ...

  5. vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control

    vs2015 + opencv3.3 + mfc读取摄像头显示在图片控件Picture Control 要开始做一个行人检测的小项目,首先读取出摄像头显示,参考了这位博主的教程:http : //bl ...

  6. C语言用句柄显示bmp图片,VC编程之VC MFC界面上显示BMP图片

    本文主要向大家介绍了VC编程之VC MFC界面上显示BMP图片,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助. 1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择 ...

  7. jquery实现点击小图片显示大图片

    首先要准备4张小图片和4张大图片,代码如下: <!DOCTYPE html> <html><head lang="en"><meta ch ...

  8. android显示大图片

    前言: 最近比较焦虑,感觉移动端的前景不太好,有些心塞. android的如何显示大图? 因为虚拟机对手机内存的限制,超过了就会内存溢出导致程序崩溃,假如我们必须要显示一个大图怎么办呢? 一般有两个方 ...

  9. VC MFC界面上显示BMP图片

    1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录.关键代码如下: void ShowBMPDlg::OnButtonSelectiam ...

最新文章

  1. socket的拉屎模型
  2. 利用Docker设置Node.js
  3. Android RecyclerView 使用完全解析 体验艺术般的控件
  4. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化
  5. 整合Hibernate3.x
  6. Hibernate 基础配置及常用功能(二)
  7. 内联函数 —— C 中关键字 inline 用法解析
  8. Windows环境下基于python3 + selenium构建网络爬虫
  9. Java 的 Comparator 接口详解
  10. 【OpenCV】立体匹配算法SSD、NCC、ASW的基础实现
  11. windows的终端命令
  12. 输入输出工具技术(ITTO)要背吗?——软考高项笔记8
  13. 测试理论学习(分类、流程、方法)
  14. 网课答案公众号搭建过程详解
  15. 明翰豆瓣列表V1.5(持续更新)
  16. 数据压缩实验八:MPEG音频压缩编码
  17. 金蝶K/3产品各版本引入/引出Excel文件时出现意外错误的提示,或未正确安装Excel的提示
  18. laravel db类
  19. linux 安装手机usb驱动
  20. 视频中的帧、行、场概念

热门文章

  1. Win10更新完毕。C盘图片已经微信缓存全部消失如何解决?
  2. 密钥格式标准PKCS,X.509
  3. 2019软工实践_作业2
  4. ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM系统表空间满
  5. Teamviewer 15.0 中文版 — 远程控制软件
  6. 数字设计(二)之FPGA到底属于硬件还是软件设计
  7. 网易云音乐数据治理探索与实践
  8. 平板电脑如何蓝牙和手机配对_如何将蓝牙设备与计算机,平板电脑或手机配对...
  9. 2022年医院三基考试医学微生物学和免疫学练习题及答案
  10. 家里WiFi信号差,如何解决?