|
你可以用下面的代码在试验箱中显示图片:
void CMyLinkMan::LoadPhoto(CString pszFilename)
{
HDC hDC;
//pszFilename = _T(". \\Flash Disk \\photo\\xixi.bmp");
CFile cf;
// 打开位图文件
if (!cf.Open(pszFilename, CFile::modeRead))
return ;
// 获得位图文件大小,并减去BITMAPFILEHEADER的长度
DWORD dwDibSize;
dwDibSize = cf.GetLength() - sizeof(BITMAPFILEHEADER);
// 为DIB位图分配内存
unsigned char *pDib;
pDib = new unsigned char[dwDibSize];
if (pDib == NULL)
return ;
BITMAPFILEHEADER BFH;
// 读取位图文件数据BFH.bfType != 'MB' ||
try
{
// 文件格式是否正确有效
if ( cf.Read(&BFH, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER)||cf.Read(pDib, dwDibSize) != dwDibSize)
{// delete []pDib;
return ;
}
}
catch (CFileException *e)
{
e->Delete();
delete []pDib;
// return (FALSE);
}
BITMAPINFO *bmpInfo1,bmpInfo;
BYTE *pPhotoBits;
bmpInfo1 = (BITMAPINFO*)pDib;
bmpInfo.bmiHeader = bmpInfo1->bmiHeader;
hDC= ::GetDC(m_hWnd);
DWORD d=GetLastError();
m_hBitmap = CreateDIBSection(hDC, &bmpInfo, DIB_RGB_COLORS, (void **)&pPhotoBits, NULL, 0);
memcpy(pPhotoBits, &pDib[sizeof(BITMAPINFOHEADER)], dwDibSize-sizeof(BITMAPINFOHEADER));
delete []pDib;
cf.Close();
}
void CMyLinkMan::ShowPhoto()
{
HDC hdcMem;
HDC hDC;
DWORD d=GetLastError();
LoadPhoto(m_photo);
d=GetLastError();
if (NULL == m_hBitmap)
{
HBRUSH hBrush;
RECT rect;
SetRect(&rect, PHOTO_X, PHOTO_Y, PHOTO_X + PHOTO_WIDTH, PHOTO_Y + PHOTO_HEIGHT);
hDC = GetDC(m_hWnd);
hBrush = CreateSolidBrush(RGB(192, 192, 192));
FillRect(hDC, &rect, hBrush);
DeleteObject(hBrush);
ReleaseDC(m_hWnd, hDC);
return;
}
else
{
// Retrieve the device context handle
hDC = GetDC(m_hWnd);
hdcMem = CreateCompatibleDC(hDC);
d=0;
d=GetLastError();
SelectObject(hdcMem, m_hBitmap);
d=GetLastError();
// Display bitmap, //
BitBlt( hDC, PHOTO_X, PHOTO_Y,PHOTO_WIDTH,PHOTO_HEIGHT, hdcMem, 0,0,SRCCOPY);
d=GetLastError();
// Delete bitmap object, release the device contexts,
//
DeleteDC(hdcMem);
ReleaseDC(m_hWnd, hDC);
}
}
|
|