关于点击tab控件显示图片的一点知识

VC6.0中Tab控件显示图片
本文介绍如何在VC6.0环境下利用Tab控件和Picture控件实现数据库图片路径的读取及显示功能。作者分享了在Tab控件点击事件中通过加载图片路径到Picture控件的过程,并提供了在不支持CIMAGE类的情况下使用HBITMAP显示图片的具体步骤。

     最近LZ在做一个软件的功能,软件的功能主要是在tab控件中显示数据库的值(主要是图片路径以及相关设置参数),点击tab控件中某一个标签下的某一行的时候,要求在对话框上面的picture控件中显示所点击的路径内容的图片。LZ是个小白,前一阶段刚把数据库弄得差不多,现在想实现这个功能着实还花费了一番功夫。接下来介绍一下我的总体思路以及实现过程供新手小白参考,以免走我以前走过的弯路。

       首先,拿到这个任务,必须要了解的是关于tab控件的一些常识。首先,tab控件主要相当于一个容器,里面有不同的标签,每一个标签关联的是不同的dialog,也就是我们使用的tab控件所在的类是父类,而他每个标签关联的类是子类。LZ最开始没有意识到这个问题。所以,当你点击tab空间中的内容的时候,其实是在子类中操作的,在子类中使用消息映射函数NM_CLICK,生成了onclicklistXXX函数,在子类函数的ONCLICK中对数据进行操作。

      OK,到目前为止,我们可以知道,如果想要点击tab控件之后在picture控件中显示图片,就是在子类函数中首先获取父对话框的指针,然后由指针调用父类的函数,(该函数的功能是实现在父对话框的picture控件中显示指定路径的图片)但是遗憾的是,LZ并没有实现这个功能,虽然父框指针也获取了,父框函数也设置了,但是依旧出错。这里希望有人指导

      所以,LZ小姐姐很笨的实现了这样的功能,在点击tab控件的时候,首先实现的是查询数据库的内容,然后将路径获取到。接下来,在主类的对话框上加了一个button,点击tab空间之后,再点击显示图片button,再picture空间上显示图片。

普及一下picture图片显示的知识:

首先,在VS中,图片显示最方便的是使用CIMAGE类,当然,CIMAGE的用法在网上的资料就太多了,可以参考。

但是,有一个问题就是在VC6.0中,(lz苦逼的在用VC6,由于项目需要),是没有办法使用CIMAGE类的,如果想使用除非加一堆什么.h文件啊还有什么dll文件等,这个我没试验,那么在VC6中如果想在picture控件中显示图片的时候,想使用现成的类,只有CBITMAP和HBITMAP类可以使用,而且,对于CBitmap的load函数,只能加载在资源位图中的函数,也就是事先导入软件中的IDB_BITMAP这一类,而LZ想要实现的是把数据库中的路径调取出来,然后显示,所以其实不定的量是path,那就只能用HBitmap函数:具体代码:


首先在.h文件中声明一个CBitmap的对象m_bitmap;m_path是我们传进来的路径参数

接下来,在button函数中添加如下代码:

if(m_bitmap.m_hObject!=null)

m_bitmap.DeleteObject();

HBITMAP hbmp

=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,IMAGE_BITMAP,0,0,LR_CREATEDDIBSECTION|LR_LOADFROMFILE);

if(hbmp==NULL)

return;

int cx,xy;

m_bitmap.Attach(hbmp);

DIBSECTION ds;

BITMAPINFOHEADER &bminfo=ds.dsBmih;

m_bitmap.GetObject(sizeof(ds),&ds);

cx=bminfo.biWidth;

cy=bminfo.biHeight;

CRect rect;

m_pic_origin.SetBitmap(hbmp);//m_pic_origin是picture空间上添加的control类的变量

插曲:刚开始LZ使用很多Getdlg(IDC_STATIC_ORIGIN)->GetWindowText();始终都没办法执行,断点插错也不会停也不会报错,就是不显示图片在控件中,这一点很费解




如果是在资源位图中加载图像的话就会简单很多,像如下这么实现就可以了

  1. oid CImportDlg::OnBnClickedLoadPicButton()  
  2. {  
  3.     // TODO:  在此添加控件通知处理程序代码  
  4.     CBitmap bitmap;  // CBitmap对象,用于加载位图     
  5.     HBITMAP hBmp;    // 保存CBitmap加载的位图的句柄     
  6.   
  7.     bitmap.LoadBitmap(IDB_BITMAP1);  // 将位图IDB_BITMAP1加载到bitmap    
  8.     hBmp = (HBITMAP)bitmap.GetSafeHandle();  // 获取bitmap加载位图的句柄    
  9.     m_Picture.SetBitmap(hBmp);    // 设置图片控件m_Picture的位图图片为IDB_BITMAP1     
  10. }  




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值