用vfw从摄像头中读取了每帧的图像数据,为什么图像显示不出来?解决思路

用vfw从摄像头中读取了每帧的图像数据,为什么图像显示不出来?
我用vfw的capSetCallbackOnFrame(m_hWndVideo,EncodeCallback);函数在每帧预览前调用回调函数:
LRESULT CALLBACK CMyViewDlg::EncodeCallback(HWND hWnd, LPVIDEOHDR lpVHdr)
{
//AfxMessageBox("yes");
//LPBYTE lpTemp = lpVHdr->lpData;
DWORD nBufferLength=lpVHdr->dwBufferLength;
DWORD nBytesUsed=lpVHdr->dwBytesUsed;//一个像素16位,2个字节

HWND aHwnd = AfxGetMainWnd()->m_hWnd;
::SendMessage(aHwnd,WM_FRAMEPROCESS_MESSAGE, (WPARAM)(lpVHdr->lpData), 0);





return TRUE;
}
然后产生一个自定义的消息WM_FRAMEPROCESS_MESSAGE,下面是自定义的消息响应函数:
LRESULT CMyViewDlg::OnFrameProcess(WPARAM wParam , LPARAM lParam)
{

LPBYTE lpTemp = (LPBYTE)wParam;

//将YUYV格式转换成RGB格式
LPBYTE pdata = new byte[640*480*3];
ZeroMemory(pdata, 640*480*3); 


YUY2_RGB(pdata, lpTemp, 640, 480);
   
  //绘图

CWnd *pWnd=GetDlgItem(IDC_PICSTATIC);
CDC* pDC=pWnd->GetDC();

CDC MemDC;
MemDC.CreateCompatibleDC(pDC);

CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, 640, 480);//DDB
CBitmap* pOldBmp=MemDC.SelectObject(&bmp);

::SetDIBitsToDevice( MemDC.GetSafeHdc(), 
0, 
0, 
640, 
480, 
0, 
0, 
0, 
480, 
pdata, 
m_pBmpInfo,
DIB_RGB_COLORS
);



//是否抓图,如果抓图
if(isGetPic)
{
isGetPic=FALSE;

pDC->BitBlt(0, 0, 640, 480, &MemDC, 0, 0, SRCCOPY);

CString PicName;

WORD sYear,sMonth,sDay,sHour,sMinute,sSecond; 
SYSTEMTIME CurTime;/////定义SYSTEMTIME类的对象 
GetLocalTime(&CurTime);////获取本地时间 
sYear=CurTime.wYear; 
sMonth=CurTime.wMonth; 
sDay=CurTime.wDay; 
sHour=CurTime.wHour;
sMinute=CurTime.wMinute;
sSecond=CurTime.wSecond;
CString sFileName;

PicName.Format("%04d-%02d-%02d-%02d-%02d-%02d.bmp", 
sYear,sMonth,sDay,sHour,sMinute,sSecond);

CString PicPath_one;
PicPath_one = PathPic+PicName;

CFile filePic(PicPath_one, 
CFile::modeCreate|CFile::modeWrite);//存放报警图片
filePic.Write(m_pBmpfilehd,14);
filePic.Write(m_pBmpInfo,40);
filePic.Write(pdata,640*480*3);
   
}



return TRUE;
}

其中,位图文件头,和位图信息均在OnInitDialog()中定义:
// 初始化BITMAPINFO 结构,此结构在保存bmp文件、显示采集图像时使用
m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_pBmpInfo->bmiHeader.biWidth = 640;
m_pBmpInfo->bmiHeader.biHeight = 480;
m_pBmpInfo->bmiHeader.biBitCount = 24;
m_pBmpInfo->bmiHeader.biPlanes = 1;
m_pBmpInfo->bmiHeader.biCompression =0;
m_pBmpInfo->bmiHeader.biSizeImage =640*480*3;
m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biClrUsed =0;
m_pBmpInfo->bmiHeader.biClrImportant = 0;
 
//初始化BITMAPFILEHEADER结构
m_pBmpfilehd = (LPBITMAPFILEHEADER)malloc(14);
if (m_pBmpfilehd == NULL)
{
return FALSE;
}
m_pBmpfilehd->bfType=0x4d42;
m_pBmpfilehd->bfSize=640*480*3+54;
m_pBmpfilehd->bfReserved1=0;
m_pBmpfilehd->bfReserved2=0;
m_pBmpfilehd->bfOffBits=54;
那为什么我抓图在IDC_PICSTATIC控件中显示为黑,存下来的图为绘图失败啊???

------解决方案--------------------
SetDIBitsToDevice函数的返回值是多少?