如何在产生一张大的背景图片啊
刚开始学习哈,还望前辈多多指教。在VC中,可以插入位图,但是位图太小了。因为太小利用LoadBitmap函数在对话框中产生的图片也是很多重复的位图,我想把一般的图片作为背景图片啊,比如说在对话框中就显示一张大的图片,怎么弄啊,或是有什么函数之类的,求帮助,越详细越好!跪谢。。。。。
[解决办法]
用JPG吧,兄弟
HRESULT ShowPic(CDC *pDC,CString lpstrFile, int nScrWidth, int nScrHeight)
{
IPicture *pPic;
IStream *pStm;
BOOL bResult;
HANDLE hFile=NULL;
DWORD dwFileSize,dwByteRead;
//打开硬盘中的图形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数
if(dwFileSize==0xFFFFFFFF)
{
CloseHandle(hFile);
return E_FAIL;
}
}
else
{
return E_FAIL;
}
//分配全局存储空间
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
if(hGlobal==NULL)
return E_FAIL;
LPVOID pvData =GlobalLock(hGlobal);
if(pvData==NULL)//锁定分配内存块
{
GlobalFree(hGlobal);
return E_FAIL;
}
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
CloseHandle(hFile);//关闭打开的文件
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
GlobalFree(hGlobal);
if(FAILED(bResult))
return E_FAIL;
long hmWidth;//图片的真实宽度
long hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(pDC->m_hDC,0,0,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
pPic->Release();
if(SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}
[解决办法]
CDC *pDC = GetDC();
CBitmap BmpMem;//内存位图
CDC MemDC;//内存设备
//创建与显示设备兼容的设备
MemDC.CreateCompatibleDC(pDC);
BmpMem.Attach ((HBITMAP)::LoadImage(NULL, c_tcDownPicPosition, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
//将位图选入设备
MemDC.SelectObject(&BmpMem);
//只一次性的向显示设备显示位图,不会出现闪屏
pDC->BitBlt(15, 15, 655, 495, &MemDC, 0, 0, SRCCOPY);
BmpMem.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
[解决办法]
BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC)
{
BITMAP bit;
m_bmDents.GetBitmap(&bit);
CDC m_memDC;
CRect rect;
m_memDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap=m_memDC.SelectObject(&m_bmDents);
GetWindowRect(&rect);
pDC-> StretchBlt(0,0,g_nFullWidth,g_nFullHeight, &m_memDC, 0, 0,bit.bmWidth,bit.bmHeight ,SRCCOPY); //拉伸图片至全屏
m_memDC.DeleteDC();
pOldBitmap->DeleteObject();
return TRUE;
//return CDialog::OnEraseBkgnd(pDC);
}