本例子实现MFC ACTIVEX录像控件
制作步骤
首先,建立MFC ACTIVEX 工程,然后在OnCreate函数中动态添加对话框资源
int CMYSoftRecordCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CMydialog* pDialog;
//pDialog initialized to NULL in the constructor of CMyWnd class.
pDialog = new CMydialog();
//Check if new succeeded and a valid pointer to a dialog object is //created.
if(pDialog != NULL)
{
BOOL ret = pDialog->Create(IDD_DIALOG_VIEW,this);
if(!ret) //Create failed.
AfxMessageBox("Error creating Dialog");
pDialog->ShowWindow(SW_SHOW);
}
else
AfxMessageBox("Error Creating Dialog Object");
return 0;
}
其次,生成类CMydialog,实现以下函数:
//预览。。。
void CMydialog::OnButtonPreview()
{
hWnd = ::GetDlgItem(this->m_hWnd, IDC_STATIC_SCREEN);
hwndVideo = capCreateCaptureWindow("Capture",WS_CHILD|WS_VISIBLE,0,0,800,600,hWnd,0);
::SendMessage( hwndVideo, WM_CAP_DRIVER_CONNECT, 0, 0L);
::SendMessage( hwndVideo, WM_CAP_DRIVER_GET_CAPS,
sizeof(CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);
capPreviewRate( hwndVideo, 66 );
capPreview( hwndVideo, TRUE );
}
//录像。。。
void CMydialog::OnButtonRecord()
{
char szCaptureFile[100];
CString capfile;
CFileDialog Dlg(FALSE,"AVI",".AVI",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"视频文件(*.AVI)|*.AVI||");
if(Dlg.DoModal()==IDOK)
{
capfile = Dlg.GetPathName();
strcpy(szCaptureFile, (LPCTSTR)capfile);
}
capFileSetCaptureFile(hwndVideo, szCaptureFile);//VFW默认生成c:/example.avi,去掉它....
capDlgVideoCompression(hwndVideo);
capCaptureSequence(hwndVideo);
capFileSaveAs(hwndVideo, szCaptureFile);
}
//停止预览。。。
void CMydialog::OnButtonStopreview()
{
capPreview(hwndVideo, FALSE);
capDriverDisconnect(hwndVideo);
Sleep(500);
}
//停止录像。。。
void CMydialog::OnButtonStoprecord()
{
capCaptureStop(hwndVideo);
capCaptureAbort(hwndVideo);
Sleep(500);
}
//视频属性页。。。
void CMydialog::OnButtonEditstream()
{
capDlgVideoFormat(hwndVideo);
capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));
::SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
}
//视频源。。。
void CMydialog::OnButtonEditsource()
{
if(CapDrvCaps.fHasDlgVideoSource)
capDlgVideoSource(hwndVideo);
}
界面如下:
注册完控件后在网页中的用法:
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<OBJECT ID="MYSoftRecord" WIDTH=665 HEIGHT=412
CLASSID="CLSID:2DA4192A-E327-4DDA-85A7-C49CAD8F16D4">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="17590">
<PARAM NAME="_ExtentY" VALUE="10896">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
</BODY>
</HTML>
此例子没有暴露自定义接口,制作过程相当于MFC EXE程序。
制作步骤
首先,建立MFC ACTIVEX 工程,然后在OnCreate函数中动态添加对话框资源
int CMYSoftRecordCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CMydialog* pDialog;
//pDialog initialized to NULL in the constructor of CMyWnd class.
pDialog = new CMydialog();
//Check if new succeeded and a valid pointer to a dialog object is //created.
if(pDialog != NULL)
{
BOOL ret = pDialog->Create(IDD_DIALOG_VIEW,this);
if(!ret) //Create failed.
AfxMessageBox("Error creating Dialog");
pDialog->ShowWindow(SW_SHOW);
}
else
AfxMessageBox("Error Creating Dialog Object");
return 0;
}
其次,生成类CMydialog,实现以下函数:
//预览。。。
void CMydialog::OnButtonPreview()
{
hWnd = ::GetDlgItem(this->m_hWnd, IDC_STATIC_SCREEN);
hwndVideo = capCreateCaptureWindow("Capture",WS_CHILD|WS_VISIBLE,0,0,800,600,hWnd,0);
::SendMessage( hwndVideo, WM_CAP_DRIVER_CONNECT, 0, 0L);
::SendMessage( hwndVideo, WM_CAP_DRIVER_GET_CAPS,
sizeof(CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);
capPreviewRate( hwndVideo, 66 );
capPreview( hwndVideo, TRUE );
}
//录像。。。
void CMydialog::OnButtonRecord()
{
char szCaptureFile[100];
CString capfile;
CFileDialog Dlg(FALSE,"AVI",".AVI",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"视频文件(*.AVI)|*.AVI||");
if(Dlg.DoModal()==IDOK)
{
capfile = Dlg.GetPathName();
strcpy(szCaptureFile, (LPCTSTR)capfile);
}
capFileSetCaptureFile(hwndVideo, szCaptureFile);//VFW默认生成c:/example.avi,去掉它....
capDlgVideoCompression(hwndVideo);
capCaptureSequence(hwndVideo);
capFileSaveAs(hwndVideo, szCaptureFile);
}
//停止预览。。。
void CMydialog::OnButtonStopreview()
{
capPreview(hwndVideo, FALSE);
capDriverDisconnect(hwndVideo);
Sleep(500);
}
//停止录像。。。
void CMydialog::OnButtonStoprecord()
{
capCaptureStop(hwndVideo);
capCaptureAbort(hwndVideo);
Sleep(500);
}
//视频属性页。。。
void CMydialog::OnButtonEditstream()
{
capDlgVideoFormat(hwndVideo);
capGetStatus(hwndVideo, &CapStatus, sizeof(CAPSTATUS));
::SetWindowPos(hwndVideo, NULL, 0, 0, CapStatus.uiImageWidth,
CapStatus.uiImageHeight, SWP_NOZORDER | SWP_NOMOVE);
}
//视频源。。。
void CMydialog::OnButtonEditsource()
{
if(CapDrvCaps.fHasDlgVideoSource)
capDlgVideoSource(hwndVideo);
}
界面如下:
注册完控件后在网页中的用法:
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<OBJECT ID="MYSoftRecord" WIDTH=665 HEIGHT=412
CLASSID="CLSID:2DA4192A-E327-4DDA-85A7-C49CAD8F16D4">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="17590">
<PARAM NAME="_ExtentY" VALUE="10896">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
</BODY>
</HTML>
此例子没有暴露自定义接口,制作过程相当于MFC EXE程序。