MFC 在对话框显示图片的多种方法-动态载入图片

                            
                          MFC 在对话框显示图片的多种方法-动态载入图片


函数说明=================================================================函数说明
void LoadImage(DWORD nID,LPCTSTR ImageURL)
参数说明:
  nID       需要绘制图像的窗口
  ImageURL  图象在硬盘上的地址(动态载入,只支持BMP图象)

void ShowImage(DWORD nID)
参数说明:
  nID       需要绘制图像的窗口


实现过程=================================================================实现过程

1.首先在CLoginDlg类中声明一个变量:    CBitmap   m_bmp;
2.在对话框中加入一个picture 标签,名为IDC_STATIC1,作为绘制图像的窗口.
3.BOOL CLoginDlg::OnInitDialog()
{
    CDialogDlg::OnInitDialog();
 
    LoadImage(IDC_STATIC1,"c:\\\\login.bmp");

    return TRUE;
}
4.void CLoginDlg::OnPaint()
{
 //CPaintDC dc(this); 一定要去除
 
 // TODO: Add your message handler code here
 ShowImage(IDC_STATIC1);
}

函数过程=================================================================函数过程
void CLoginDlg::LoadImage(DWORD nID,LPCTSTR ImageURL)
{
    if( m_bmp.m_hObject != NULL )//判断
        m_bmp.DeleteObject();

/载入图片
    HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),ImageURL,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(nID)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    GetDlgItem(nID)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小

    return TRUE;
}

 

void CLoginDlg::ShowImage(DWORD nID)
{
///绘制图像

    //CPaintDC dc(this);      //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.

    CPaintDC dc(GetDlgItem(nID)); //用此句,得到picture控件的DC,图像将被绘制在控件上.

    //CDC dc;
    //dc.m_hDC=::GetDC(NULL);   //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上.

    CRect rcclient;
    GetDlgItem(nID)->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();
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值