读书人

导入资源 选择bit地图 是否可以让资源

发布时间: 2013-02-24 17:58:56 作者: rapoo

导入资源 选择bitmap 是否可以让资源在界面上显示出来
我想导入2张bitmap或者jpeg小图片,程序开始运行时显示a图片,当接收到某消息时,在a图片的位置上显示b图片(a,b图片的尺寸相同),如何实现?
[解决办法]
比如点击按钮,对某个标志为true.

然后invalidate触发onpaint

onapint代码;

if()
{

}

else
{

}



if, else里均调用strectblt即可


[解决办法]


#ifndef__SAFE_DELETE_GDIOBJ__//删除GDI句柄
#define__SAFE_DELETE_GDIOBJ__(hObj)\
if(hObj)\
{DeleteObject(hObj);\
hObj = NULL;\
}
#endif



void xxxx::OnPaint()
{
RECT rtWnd = {0};
GetClientRect(&rtWnd);
m_lWndWidth = rtWnd.right;
m_lWndHeight = rtWnd.bottom;

PAINTSTRUCT ps = {0};
::BeginPaint(m_hWnd,&ps);
HDC hDC = CreateCompatibleDC(ps.hdc);
HBITMAP bmpCompatible = CreateCompatibleBitmap(ps.hdc,m_lWndWidth,m_lWndHeight);
HGDIOBJ oldCompatible = SelectObject(hDC,bmpCompatible);

//贴图
if(标识位)
{
DrawBitMap(hDC,ResID1);
}
else
DrawBitMap(hDC,ResID2);

SelectObject(hDC,oldCompatible);
DeleteObject(bmpCompatible);
DeleteDC(hDC);
::EndPaint(m_hWnd,&ps);
}

void xxxx::DrawBitMap(HDC hDC,UINT ResID)
{
long lbmWidth(0),lbmHeight(0);//图片长、宽
BITMAPbitMapInfo;
memset(&bitMapInfo,0,sizeof(BITMAP));
//获取图片信息
HINSTANCE hInstance = AfxGetInstanceHandle();
HBITMAP hBitMap = LoadLocalBitMap(hInstance,0,0,ResID);
GetObject(hBitMap,sizeof(BITMAP),&bitMapInfo);
lbmWidth = bitMapInfo.bmWidth;
lbmHeight = bitMapInfo.bmHeight;

CopyFullBitmap(hDC,hBitMap,0,0,lbmWidth,lbmHeight);
__SAFE_DELETE_GDIOBJ__(hBitMap);
}

void xxxx::CopyFullBitmap(HDC hDC,HBITMAP hBitmap,long x,long y,long Width,long Height)
{
HDC dcMem=CreateCompatibleDC(hDC);
HGDIOBJ oldBmp=SelectObject(dcMem,hBitmap);
BitBlt(hDC,x,y,Width,Height,dcMem,0,0,SRCCOPY);
SelectObject(dcMem,oldBmp);
DeleteDC(dcMem);
}

[解决办法]
两张图片使用一个hbitmap

当收到某个消息后loadbitmap(B)

就可以了!

读书人网 >VC/MFC

热点推荐