您的位置:首页 > 其它

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

2014-02-21 16:05 477 查看
                            

                          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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: