QQ登录

只需一步,快速开始

110上位机VC MFC自动浏览目录全部位图

[ 复制链接 ]

110上位机VC MFC自动浏览目录全部位图

110上位机VC MFC自动浏览目录全部位图
110上位机VC MFC自动浏览目录全部位图
功能展示
查看图片时,自查看图片相同目录文件夹中的其他图片,会省很多操作步骤,我们当前例程实现自动浏览同目录下的其他图片,效果如图
要点提示
在用户打开第一幅位图后,启动一定义器,定时进行相同文件夹下位图的打开操作。凡是窗口都可以设置定时器,启动定时器用函数SetTimer(), 原型为UINT SetTimer( HWND hWnd, // handle of window for timermessages UINT nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // address of timer procedure ); hWnd为所在窗口的句柄, nIDEvent为非0的定时器ID, uElapse为定时时间,单位为毫秒, lpTimerFunc 为定时器定时到位后调用的函数,一般不用设置为NULL,在WM_TIMER消息中处理定时到位功能;
实现功能
1.新建基于单文档的应用程序
2.在文档类中添加变量CBitmap m_Bitmap;及它的获取函数CBitmap*CGkbc8Doc::GetBitmap() {return &m_Bitmap;}; 然后在文档类的OnOpenDocument()函数中实图片的打开操作;
  1. if (m_Bitmap.m_hObject != NULL)//清除位图资源
  2.                 m_Bitmap.DeleteObject();
  3.         
  4.         BeginWaitCursor();//设置等待鼠标
  5.         //打开位图文件
  6.         HBITMAP hImage = (HBITMAP)LoadImage(NULL, lpszPathName, IMAGE_BITMAP,
  7.                 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
  8.         EndWaitCursor();
  9.         if (!hImage) {
  10.                 AfxMessageBox("LoadImage failed");
  11.                 return FALSE;
  12.         }
  13.         if (!m_Bitmap.Attach(hImage)) //构造位图对象
  14.         {
  15.                 AfxMessageBox("Bitmap could not be attached");
  16.                 return FALSE;
  17.         }
  18.         SetModifiedFlag(FALSE);
  19.         UpdateAllViews(NULL);        //更新所有视图        
  20.         
  21.         POSITION p = GetFirstViewPosition();
  22.         CView *pView =  GetNextView(p);
  23.         pView->SetTimer(1,2000,NULL);
复制代码
3.在视窗类中添加一函数SearchBmp()实现相同文件夹中其他位图的查找  
  1. CString CGkbc8View::SearchBmp(CString curstr)
  2. {
  3.         char buffer[_MAX_PATH];
  4.         long handle;
  5.         if(curstr.IsEmpty()) return "";
  6.         if(_getcwd( buffer, 1000)==NULL)
  7.         {
  8.                 AfxMessageBox("请打开一个位图文件!");
  9.                 return "";
  10.         }
  11.         CString m_sPartname;
  12.         int len = curstr.GetLength();
  13.         int i;
  14.         for(i = len-1;curstr[i] != '\\';i--)
  15.                 m_sPartname.Insert(0,curstr[i]);
  16.         i++;
  17.         while(i--<0)
  18.                 buffer[i]=curstr[i];
  19.         if (_chdir(buffer) != 0) return "";
  20.         
  21.         bool b_notfinde=false;
  22.         struct _finddata_t filestruct;
  23.         // 开始查找工作, 找到当前目录下的第一个实体(文件或子目录),
  24.         // ″*″表示查找任何的文件或子目录, filestruct为查找结果
  25.         handle = _findfirst("*", &filestruct);
  26.         do{
  27.                 if((handle ==-1)) // 当handle为-1, 表示当前目录为空, 则结束查找而返回
  28.                         break;
  29.                 // 检查找到的第一个实体是否是一个目录
  30.                 if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
  31.                 {
  32.                         continue ;
  33.                 }
复制代码
  1. CString Filename=filestruct.name;
  2.                 {
  3.                         CString tailstr;
  4.                         //获取文件扩展名
  5.                         tailstr = Filename.Mid(Filename.GetLength()-3);
  6.                         tailstr.MakeUpper();
  7.                         Filename.MakeUpper();
  8.                         m_sPartname.MakeUpper();
  9.                         if(tailstr=="BMP")
  10.                         {
  11.                                 if(b_notfinde==false)
  12.                                 {
  13.                                         if(m_sPartname==Filename)
  14.                                                 b_notfinde=true;
  15.                                 }
  16.                                 else
  17.                                 {
  18.                                         _findclose(handle);
  19.                                         return Filename;
  20.                                 }               
  21.                         }                                                                        
  22.                 }                                
  23.         } while(_findnext(handle, &filestruct)==0);
  24.         _findclose(handle);
  25.         this->KillTimer(1);
  26.         return "";
  27. }
  28. <div style="text-align: center;"><span style="font-size: large; line-height: 1.5;">4,添加定时器的处理消息,实现间隔打开相同目录下其他位图</span></div>void CGkbc8View::OnTimer(UINT nIDEvent)
  29. {
  30.         CString s=GetDocument()->GetPathName();
  31.         CString str=SearchBmp(s);
  32.         if(str=="")
  33.                 return;
  34.         AfxGetApp()->OpenDocumentFile(str);
  35.         CView::OnTimer(nIDEvent);
  36. }
  37. <div style="text-align: center;"><span style="font-size: large; line-height: 1.5;">5.然后是打开位图的显示,在视窗类OnDraw()函数中实现</span></div>
复制代码
  1. void CGkbc8View::OnDraw(CDC* pDC)
  2. {
  3.         CGkbc8Doc* pDoc = GetDocument();
  4.         ASSERT_VALID(pDoc);
  5.         // TODO: add draw code for native data here
  6.         BITMAP BitMap;
  7.         CBitmap *pBitmap,*pOldBitmap;
  8.         CDC DCMem;//创建内存设备场景
  9.         if (!DCMem.CreateCompatibleDC(pDC))
  10.                 TRACE0("DCMem.CreateCompatibleDC failed\n");
  11.         pBitmap= pDoc->GetBitmap();
  12.         if(!pBitmap->GetSafeHandle())
  13.                 return;
  14.         pOldBitmap = DCMem.SelectObject(pBitmap);
  15.         pBitmap->GetBitmap(&BitMap);
  16.         //将位图拷贝到显示设备场景中,进行显示
  17.         if (!pDC->BitBlt(0, 0, BitMap.bmWidth, BitMap.bmHeight, &DCMem, 0, 0, SRCCOPY))
  18.                 TRACE0("BitBlt failed\n");

  19.         DCMem.SelectObject(pOldBitmap);
  20.         DCMem.DeleteDC();
  21. }

  22. <div style="text-align: center;"><span style="line-height: 1.5;"><font size="4">我们来演示下整个功能实现过程</font></span></div>
复制代码


请点击此处下载

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

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

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


  

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

  

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

  

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


回复

使用道具 举报

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