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

VC显示图片的有关问题

2012-10-16 
VC显示图片的问题大家看过这段代码为,使用的时候有点问题:if (IsIconic()){CPaintDC dc(this) // device

VC显示图片的问题
大家看过这段代码为,使用的时候有点问题:
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
CWnd *pWnd = GetDlgItem(IDC_PICTURE); 
CRect rect; 
pWnd->GetClientRect(&rect); 
CDC *pDC = pWnd->GetDC(); 
IStream *pStm; 
CFileStatus fstatus; 
CFile file; 
LONG cb; 
IPicture *pPic; 
CString m_sPath = "baby.jpg"; //需要显示的图片地址
if(file.Open(m_sPath,CFile::modeRead)&&file.GetStatus(m_sPath,fstatus)&& ((cb = fstatus.m_size) != -1)) 

HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
LPVOID pvData = NULL; 
if (hGlobal != NULL) 

if ((pvData = GlobalLock(hGlobal)) != NULL) 

file.ReadHuge(pvData, cb); 
GlobalUnlock(hGlobal); 
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 



if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

OLE_XSIZE_HIMETRIC hmWidth; 
OLE_YSIZE_HIMETRIC hmHeight; 
pPic->get_Width(&hmWidth); 
pPic->get_Height(&hmHeight); 
if(FAILED(pPic->Render(*pDC,0,0,rect.Width(),rect.Height(),0,hmHeight,hmWidth,-hmHeight,NULL))) 
AfxMessageBox("渲染图像失败!"); 
pPic->Release(); 

else 
AfxMessageBox("从流中装载图像失败!");
问题就是显示图片的地址m_sPath如果使用CFileDialog选择图片,然后用GetPathName金线复制就可以正常显示,但是如果直接赋值,例如m_sPath="house.jpg"就不能显示,这到底是怎么回事啊,求解

[解决办法]
图片地址需要使用全路径(像D:\\picdir\\a.jpg这样的),用CFileDialog 得到的就是图片文件的全路径,直接赋值m_sPath="house.jpg"在默认搜索路径下通常是找不到文件的

热点排行