首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么在产生一张大的背景图片

2012-03-28 
如何在产生一张大的背景图片啊刚开始学习哈,还望前辈多多指教。在VC中,可以插入位图,但是位图太小了。因为太

如何在产生一张大的背景图片啊
刚开始学习哈,还望前辈多多指教。在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);
}

热点排行