动态改变Picture控件上的位图

动态改变Picture控件上的位图

 DrawPicture(int nBmpResource)
{  
    CDC dcmem;
    CClientDC dc(this);
    dcmem.CreateCompatibleDC(&dc);
    CBitmap m_Bitmap;
    m_Bitmap.LoadBitmap(nBmpResource);
    dcmem.SelectObject(m_Bitmap);
    CRect rect;
    GetDlgItem(IDC_STATIC_Pic)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    dc.BitBlt(rect.left,rect.top,rect.right,rect.bottom,&dcmem,0,0,SRCCOPY);
}
单击按钮事件
{
    m_nBmpResource = IDB_BMP1;//m_nBmpResource 类的成员函数,BMP资源的ID
    Invalidate();
}
由于Invalidate(),系统调用对话框的OnPaint()函数
{
        CPaintDC dc(this);  //一定要有这一句
        this->DrawPicture(m_nBmpResource);
       CDialog::OnPaint();
}

使用文件中的位图(没有添加到资源中)
void CXXXDlg::DrawPicture(LPCTSTR picture,int width,int height)     
{      
    PAINTSTRUCT ps;
    HDC hdc;
    HDC hdcmem;
    HBITMAP hBm;
    BITMAP bm;

    //加载位图
    //hBm = (HBITMAP)LoadImage(NULL,picture,IMAGE_BITMAP,width,height,LR_LOADFROMFILE);  

    //获得位图尺寸
    GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);

    //获取设备环境
    HWND hwnd;
    hwnd=this->GetDlgItem(IDC_STATIC_Pic)->GetSafeHwnd();
    hdc=::GetDC(hwnd);

    //获取设备内存环境
    hdcmem=CreateCompatibleDC(hdc);
    //释放设备环境
    ::ReleaseDC(hwnd,hdc);

    hdc=::BeginPaint(hwnd,&ps);
    //将位图选入内存设备环境
    SelectObject(hdcmem,hBm);
    //调用函数BitBlt将内存设备环境的位图拷贝到设备环境中
    BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
    //释放设备环境句柄
    ::EndPaint(hwnd,&ps);

    DeleteObject(hBm);
    DeleteDC(hdcmem);

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值