QQ登录

只需一步,快速开始

111上位机VC MFC浏览大尺寸位图

[ 复制链接 ]

111上位机VC MFC浏览大尺寸位图

111上位机VC MFC浏览大尺寸位图

111上位机VC MFC浏览大尺寸位图


功能展示

有时浏览大尺寸图片时,由于窗口过小,不能完全显示图片,就得设置滚动条,让用户拖动水平或垂直滚动条,进行滚动浏览图片,我们当前例程实现了这一功能,效果如图
要点提示
用户对滚动条的操作为水平滚动操作,垂直滚动操作,及鼠标中键垂直滚动操作,所以我们程序中得添加对应的处理函数OnMouseWheel(),OnHScroll(), OnVScroll(),我们举例OnHScroll() 它的函数原型为afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );
nSBCode为用户操作滚动条时的消息代码有如下值: SB_LEFT 滚动到左边, SB_ENDSCROLL   滚动结束 , LINELEFT   单击滚动条的左边按钮, SB_LINERIGHT   单击滚动条右边按钮, SB_PAGELEFT   在滚动韦伯 左边滚动区域按下鼠标按钮; SB_PAGERIGHT   滚动到右边缘; SB_RIGHT滚动到右边, SB_THUMBPOSITION 结束拖动滚动块, SB_THUMBTRACK   正在拖动滚动块; nPos滚动块的位置标识,仅在SB_THUMBPOSITION, SB_THUMBTRACK时用; pScrollBar 滚动条的控件指针;






实现功能
1.新建基于对话框的应用程序
2.新一对话框资源,关联一对话框类如例程class CBmpDlg : public CDialog ,用于加载及显示滚动图片;
拖拽一图片控件,关联变量CStatic  m_Bmp,并添加OnInitDialog(),在里面初始化CRect rect; GetClientRect(rect);m_Bmp.MoveWindow(0,0,rect.Width(),rect.Height());

添加加载位图 垂直,水平,鼠标中键处理函数LoadBmp(), OnHScroll(), OnMouseWheel(), OnVScroll();
  1. void CBmpDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  2. {
  3.         int pos,min,max,thumbwidth;

  4.         SCROLLINFO vinfo;
  5.         GetScrollInfo(SB_HORZ,&vinfo);
  6.         
  7.         pos = vinfo.nPos;
  8.         min = vinfo.nMin;
  9.         max = vinfo.nMax;
  10.         thumbwidth = vinfo.nPage;

  11.         switch (nSBCode)
  12.         {
复制代码
  1. break;
  2.         case SB_THUMBTRACK: //拖动滚动块
  3.                 ScrollWindow(-(nPos-pos),0);
  4.                 SetScrollPos(SB_HORZ,nPos);
  5.         
  6.         break;

  7.         case SB_LINELEFT : //单击左箭头
  8.                 SetScrollPos(SB_HORZ,pos-1);
  9.                 if (pos !=0)
  10.                         ScrollWindow(1,0);
  11.         break;

  12.         case SB_LINERIGHT: //单击右箭头
  13.                 SetScrollPos(SB_HORZ,pos+1);
  14.                 if (pos+thumbwidth <max)
  15.                         ScrollWindow(-1,0);        
  16.         break;

  17.         case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击,增量为6

  18.                 SetScrollPos(SB_HORZ,pos-6);
  19.                 if (pos+thumbwidth >0)
  20.                         ScrollWindow(6,0);
  21.         break;

  22.         case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击,增量为6

  23.                 SetScrollPos(SB_HORZ,pos+6);
  24.                 if (pos+thumbwidth <max)
  25.                         ScrollWindow(-6,0);
  26.         break;

  27.         }
  28.         CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  29. }
复制代码
  1. BOOL CBmpDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
  2. {

  3.         SCROLLINFO vinfo;
  4.         GetScrollInfo(SB_VERT,&vinfo);
  5.         int min,max,thumbwidth;
  6.         min = vinfo.nMin;
  7.         max = vinfo.nMax;
  8.         thumbwidth = vinfo.nPage;
  9.         int pos = GetScrollPos(SB_VERT);
  10.         if (zDelta>0)
  11.         {
  12.                 if (pos==0) return TRUE;
  13.                 SetScrollPos(SB_VERT,pos-6);
  14.                 ScrollWindow(0,6);
  15.         }
  16.         else
  17.         {
  18.                 if ((pos+thumbwidth>=max)) return TRUE;
  19.                 SetScrollPos(SB_VERT,pos+6);
  20.                 ScrollWindow(0,-6);
  21.         }
  22.         return TRUE;
  23. void CBmpDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  24. {
  25.         int pos,min,max,thumbwidth;

  26.         SCROLLINFO vinfo;
  27.         GetScrollInfo(SB_VERT,&vinfo);
  28.         
  29.         pos = vinfo.nPos;
  30.         min = vinfo.nMin;
  31.         max = vinfo.nMax;
  32.         thumbwidth = vinfo.nPage;

  33.         switch (nSBCode)
  34.         {
  35.         case SB_THUMBTRACK:
  36.                 pos = GetScrollPos(SB_VERT);
  37.                 ScrollWindow(0,-(nPos-pos));
  38.                 SetScrollPos(SB_VERT,nPos);        
  39.         break;
复制代码
  1. CString CBmpDlg::LoadBmp()
  2. {
  3.         CString filename;
  4.         CFileDialog dlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件(BMP)|*.bmp",this);
  5.         if (dlg.DoModal()==IDOK)
  6.         {
  7.                 filename = dlg.GetPathName();
  8.                 HANDLE handle =  LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  9.                 m_Bmp.SetBitmap((HBITMAP)handle);
  10.                
  11.                 CRect bmprect;
  12.                 m_Bmp.GetClientRect(bmprect);
  13. //        
  14.                 SCROLLINFO vinfo;
  15.                 vinfo.cbSize = sizeof(vinfo);
  16.                 vinfo.fMask = SIF_ALL;
  17.                 vinfo.nPage = 100;
  18.                 vinfo.nMax= bmprect.Height();
  19.                 vinfo.nMin = 0;
  20.                 vinfo.nTrackPos = 0;
  21.                 vinfo.nPos = 0;
  22.                 SetScrollInfo(SB_VERT,&vinfo);//设置垂直滚动条信息
  23. //
  24.                 vinfo.fMask = SIF_ALL;
  25.                 vinfo.nPage = 10;
  26.                 vinfo.nMax= bmprect.Width();
  27.                 vinfo.nMin = 0;
  28.                 vinfo.nPos  = 0;
  29.                 vinfo.nTrackPos = 0;
  30.                 vinfo.cbSize = sizeof(vinfo);
  31.                 SetScrollInfo(SB_HORZ,&vinfo);//设置水平滚动条信息
  32.         }
  33.         return filename;
  34. }
复制代码

3.然后是新建类的使用,在主对话框中添加新类的变量CBmpDlg m_BmpDlg; 再拖拽一图片控件修改ID为IDC_RECT,拖拽一按钮,关联函数void CGkbc8Dlg::OnLoad()  { m_BmpDlg.LoadBmp(); } 然后在主对话框的OnInitDialog()中初始化便可m_BmpDlg.Create(IDD_DIALOG1,this);m_BmpDlg.ShowWindow(SW_SHOW);

我们来演示整个工程实现过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:111.上位机VC MFC浏览大尺寸位图.rar 
文件大小:502.29 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索