我在网上看了很多运用回调函数的,我照着运用但为什么不行?
MSDN上关于capSetCallbackOnFrame(句柄,回调函数名),我这样用有什么错误,代码如下:
CRect rect; //取得主窗口客户区域的位置和大小
{..........
GetClientRect(&rect);
//创建视频窗口
Hwndcap=picCatch.CreateCaptureWindow((LPCSTR)"视频采集窗口",0,0,rect.Width(),rect.Height(),this->m_hWnd);
if(Hwndcap)
{
//创建窗口和驱动的连接
if(picCatch.DriverConnect(Hwndcap))
{
//视频捕获的参数设置
picCatch.PicCaptureParameterSet(Hwndcap);
}
else
{
{
MessageBox("视频设备没有连接好!");
::DestroyWindow(Hwndcap);
Hwndcap=NULL;
}
}
capSetCallbackOnFrame(Hwndcap, FrameCallbackProc);
}
} LRESULT PASCAL FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
.....................
}这个FrameCallbackProc还用进行声明吗?我编译后的错误提示就是FrameCallbackProc没有被声明。
请高手指点!谢谢。
MSDN上关于capSetCallbackOnFrame(句柄,回调函数名),我这样用有什么错误,代码如下:
CRect rect; //取得主窗口客户区域的位置和大小
{..........
GetClientRect(&rect);
//创建视频窗口
Hwndcap=picCatch.CreateCaptureWindow((LPCSTR)"视频采集窗口",0,0,rect.Width(),rect.Height(),this->m_hWnd);
if(Hwndcap)
{
//创建窗口和驱动的连接
if(picCatch.DriverConnect(Hwndcap))
{
//视频捕获的参数设置
picCatch.PicCaptureParameterSet(Hwndcap);
}
else
{
{
MessageBox("视频设备没有连接好!");
::DestroyWindow(Hwndcap);
Hwndcap=NULL;
}
}
capSetCallbackOnFrame(Hwndcap, FrameCallbackProc);
}
} LRESULT PASCAL FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
.....................
}这个FrameCallbackProc还用进行声明吗?我编译后的错误提示就是FrameCallbackProc没有被声明。
请高手指点!谢谢。
我看了一个高手的代码后我编写代码如下:一下都是在CMainFrame类中完成:
public:
static LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);#include "CMyDoc.h"
#include "CMyView.h"#include "vfw.h"
.cpp中
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
..................................
//他说这是注册这个回调函数
CFrameWnd *pMain;
CCatchPic2View *pChild=(CCatchPic2View *)(pMain->GetActiveView());
capSetCallbackOnFrame(pChild->Hwndcap,&FrameCallbackProc);
}LRESULT CALLBACK CMainFrame::FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
................
return TRUE;
}错误如下:
1.mainfrm.h(34) : error C2061: syntax error : identifier 'LPVIDEOHDR'
2.rror C2511: 'FrameCallbackProc' : overloaded member function 'long (struct HWND__ *,struct videohdr_tag *)'请大家帮忙!我会加分的,谢谢。
[email protected]谢谢了。一定给您加分
{
HANDLE hFile = CreateFile("F:\\1\\SUNHUI.bmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
BITMAPINFOHEADER bih;
BITMAPFILEHEADER bfh;
ZeroMemory(&bfh, sizeof(bfh));
ZeroMemory(&bih, sizeof(bih));
DWORD dwSize, dwWritten;
dwSize = capGetVideoFormatSize(hWnd);
capGetVideoFormat(hWnd, &bih, dwSize);
DWORD biCompression=(DWORD)bih.biCompression;
DWORD height=(DWORD)bih.biHeight ;
DWORD width=(DWORD)bih.biWidth;
DWORD bicount=(DWORD)bih.biBitCount;
DWORD bisize=(DWORD)bih.biSizeImage;
DWORD bmpsize=WIDTHBYTES(width*bicount)*height; //(((bits)+31)/32*4)
bfh.bfType = 'MB'; // Little-endian for "MB".
bfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + lpVHdr->dwBytesUsed;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER); WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
WriteFile(hFile, &bih, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
WriteFile(hFile, lpVHdr->lpData, lpVHdr->dwBytesUsed, &dwWritten, NULL);
CloseHandle(hFile);
return (LRESULT) TRUE ; }能不能帮一下忙啊!急急急!
capGetVideoFormat(hWnd, &bih, dwSize); 都会失败,没有获得正确的位图头信息,所以你保存的位图文件会失败。我写了个Demo发到你的邮箱了。