打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Picturecontrol用法
把Picture控件的Notify属性改为enable 即可相应鼠标消息
 
方法1.先从最简单的开始,用picture 控件来实现.
 
 
 
步骤:
 
 
 
先在资源里Import一张图片,ID为IDB_BITMAP2
 
 
 
然后在对话框上添加一个picture控件,右键点击打开属性,
 
 
 
将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,
 
 
 
拉开就会看到所有已经载入好的图片,
 
 
 
选择你要的图片.运行程序即可看到.
 
 
 
 
 
 
 
方法2vc picture控件.通过背景图
 
 
 
同样如上,先载入一张图片,ID为IDB_BITMAP2
 
 
 
TestDlg.h中
 
 
 
CBrush m_brBk;//在public中定义
 
 
TestDlg.cpp中
 
 
 
在初始化函数OnInitDialog()中加入:
 
 
 
BOOL CTestDlg::OnInitDialog()
 
 
 
{
 
 
 
                CDialog::OnInitDialog();
 
 
 
CBitmap bmp;
 
 
 
bmp.LoadBitmap(IDB_BITMAP2);
 
 
 
m_brBk.CreatePatternBrush(&bmp);
 
 
 
bmp.DeleteObject();
 
 
 
return TRUE;   // return TRUE   unless you set the focus to a control
 
 
 
}
 
 
 
 
 
 
 
在打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下:
 
 
 
HBRUSH   CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 
 
{
 
 
 
                HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 
 
                if (pWnd == this)
 
 
 
{
 
 
 
     return m_brBk;
 
 
 
}
 
 
 
        return hbr;
 
 
 
}
 
 
 
方法3 vc picture控件通过CBitmap,HBITMAP,直接用OnPaint()绘制
 
 
 
首先在CTestDlg类中声明一个变量:    CBitmap   m_bmp;
 
 
 
然后我们在对话框中加入一个picture 标签,名为IDC_STATIC1
 
 
 
然后:
 
 
 
BOOL CDisplayPic::OnInitDialog()
 
 
{
 
 
 
        CDialog::OnInitDialog();
 
 
 
     if( m_bmp.m_hObject != NULL )//判断
 
 
 
         m_bmp.DeleteObject();
 
 
 
/////////载入图片
 
 
 
     HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
 
 
         "c:\\aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
 
 
 
     if( hbmp == NULL )
 
 
         return FALSE;
 
 
 
///////////////////////该断程序用来取得加载的BMP的信息////////////////////////
 
 
 
     m_bmp.Attach( hbmp );
 
 
 
     DIBSECTION ds;
 
 
 
     BITMAPINFOHEADER &bminfo = ds.dsBmih;
 
 
     m_bmp.GetObject( sizeof(ds), &ds );
 
 
 
     int cx=bminfo.biWidth;   //得到图像宽度
 
 
 
     int cy=bminfo.biHeight; //得到图像高度
 
 
 
     /////////////////// ////////////////////////////////
 
 
 
/////////////得到了图像的宽度和高度后,我们就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张图片///////////////////////////
 
 
 
     CRect rect;
 
 
 
     GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);
 
 
 
     ScreenToClient(&rect);
 
 
 
     GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小
 
 
 
 
 
 
 
     return TRUE;   // return TRUE unless you set the focus to a control
 
 
 
                   // EXCEPTION: OCX Property Pages should return FALSE
 
 
 
}
 
 
 
图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息
 
 
 
void CDisplayPic::OnPaint()
 
 
{
 
 
 
//////////////以下三种情况任选一种会是不同效果(只能一种存在)///////////
 
 
 
     //CPaintDC dc(this);       //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.
 
 
 
     CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上 
 
 
 
     //   CDC dc;
 
 
 
     //   dc.m_hDC=::GetDC(NULL);   //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上///////////////////////////////////////////////////////
 
 
 
     CRect rcclient;
 
 
 
     GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);
 
 
 
     CDC memdc;
 
 
 
     memdc.CreateCompatibleDC(&dc); 
 
 
 
     CBitmap bitmap;
 
 
 
     bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
 
 
 
     memdc.SelectObject( &bitmap );
 
 
 
 
 
 
 
     CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
 
 
 
 
 
 
 
     CDC maskdc;
 
 
 
     maskdc.CreateCompatibleDC(&dc);
 
 
 
     CBitmap maskbitmap;
 
 
 
     maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
 
 
 
     maskdc.SelectObject( &maskbitmap );
 
 
 
     maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
 
 
         rcclient.left, rcclient.top, SRCCOPY);
 
 
 
 
 
 
 
     CBrush brush;
 
 
 
     brush.CreatePatternBrush(&m_bmp);
 
 
 
     dc.FillRect(rcclient, &brush); 
 
 
 
   
 
 
 
   
 
 
 
     dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
 
 
              &memdc, rcclient.left, rcclient.top,SRCPAINT);
 
 
 
     brush.DeleteObject();
 
 
 
 
 
 
 
     // Do not call CDialog::OnPaint() for painting messages
 
 
 
}
 
 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liufei_learning/archive/2010/11/01/5979255.aspx
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
设置画图控件背景图
MFC中实现位图的透明显示
VC++单文档导入背景图片
Visual C++中DDB与DIB位图编程全攻略
CreateCompatibleBitmap - fengqing888的日志 - 网易博...
CreateCompatibleDC,CreateCompatibleBitmap,SelectObject详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服