怎么捕捉视频单帧啊 怎么捕捉视频单帧呢?有没有将指定窗口的图像捕捉下来的函数?或者有将桌面抓下来的函数(就象按下print screen一样)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一步:通过AppWizard生成一个工程名为GrabScreen的单文档工程,注意在最后一步中选择你的View类(本例中为CGrabScreenView)的派生基类为CscrollView,以便能够滚动显示整个屏幕图像。 第二步:用以下代码修改CGrabScreenView中的OnInitialUpdate函数使视图区的滚动范围为整个屏幕大小。 void CGrabScreenView::OnInitialUpdate(){CScrollView::OnInitialUpdate();CSize sizeTotal;// TODO: calculate the total size of this viewsizeTotal.cx =GetSystemMetrics(SM_CXSCREEN);sizeTotal.cy =GetSystemMetrics(SM_CYSCREEN);SetScrollSizes(MM_TEXT, sizeTotal);}第三步:在主菜单条的编辑菜单下添加一子菜单项,ID为IDM_EDIT_SCREEN,标题为“抓取全屏”。通过ClassWizard在CGrabScreenView中添加该菜单项的命令响应函数,采用ClassWizard建议的函数名称OnEditScreen。第四步:在OnEditScreen函数中实现抓取整个屏幕图像及光标区域。首先在CgrabScreenView类定义中增加成员变量HDC m_hdcCompatible和HBITMAP m_hbmScreen,分别对应整个屏幕图像及光标区域的兼容设备描述表和兼容位图。然后用下面给出的程序代码获取所需数据。void CGrabScreenView::OnEditScreen() {// TODO: Add your command handler code here//获取全屏幕窗口的设备描述表HDC hdcScreen=::GetDC(NULL);//产生全屏幕窗口设备描述表的兼容设备描述表m_hdcCompatible=CreateCompatibleDC(hdcScreen);//产生全屏幕窗口设备描述表的兼容位图HBITMAP m_hbmScreen=CreateCompatibleBitmap(hdcScreen,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES));//将兼容位图选入兼容设备描述表SelectObject(m_hdcCompatible,m_hbmScreen);//将全屏幕窗口位图的象素数据拷贝到兼容设备描述表BitBlt(m_hdcCompatible,0,0,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES),hdcScreen,0,0,SRCCOPY);//获取当前光标及其位置HCURSOR hCursor=GetCursor();POINT ptCursor;GetCursorPos(&ptCursor);//获取光标的图标数据 ICONINFO IconInfo;if (GetIconInfo(hCursor, &IconInfo)){ptCursor.x -= ((int) IconInfo.xHotspot);ptCursor.y -= ((int) IconInfo.yHotspot);if (IconInfo.hbmMask != NULL)DeleteObject(IconInfo.hbmMask);if (IconInfo.hbmColor != NULL)DeleteObject(IconInfo.hbmColor);}//在兼容设备描述表上画出该光标DrawIconEx(m_hdcCompatible, // handle to device context ptCursor.x, ptCursor.y,hCursor, // handle to icon to draw 0,0, // width of the icon 0, // index of frame in animated cursor NULL, // handle to background brush DI_NORMAL | DI_COMPAT // icon-drawing flags );//使窗口无效,调用OnDraw重画窗口 Invalidate(); }第五步:在窗口重画函数OnDraw中将m_hdcCompatible中的图像拷贝到CgrabScreenView的设备描述表上,从而在该窗口中抓取的屏幕及光标区域。void CGrabScreenView::OnDraw(CDC* pDC){CGrabScreenDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//在视图窗口显示全屏幕窗口图像及光标区域 SelectObject(pDC->m_hDC,m_hbmScreen);BitBlt(pDC->m_hDC,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CXSCREEN),m_hdcCompatible,0,0,SRCCOPY);} 求关于SetParent用法详解 突然发现,自己是老光棍了~~ 高手给点指教..做这样的程序用单文档还是用mdi?用mfc还是用wtL? 关于接口指针转换的实现的疑问 用ATL做的DLL型COM,编译后成功在本机注册,请问如何在一MFC项目中调用?? 为什么会出现redefinition错误,该如何避免呢? 关于tab 顺序的问题 想在网上传输图象,请问大家如何传输 MFC如何实现将TXT或者CSV文件导入ACCESS中 用mfc写com 在生成工程时需不需要选中automation ? 如何让win2000休眠 很简单的一个问题
的View类(本例中为CGrabScreenView)的派生基类为CscrollView,以便能够滚动显示整个屏幕图
像。 第二步:用以下代码修改CGrabScreenView中的OnInitialUpdate函数使视图区的滚动范围为整
个屏幕大小。 void CGrabScreenView::OnInitialUpdate(){CScrollView::OnInitialUpdate();
CSize sizeTotal;// TODO: calculate the total size of this viewsizeTotal.cx =GetSystemMetrics(SM_CXSCREEN);sizeTotal.cy =GetSystemMetrics(SM_CYSCREEN);SetScrollSizes(MM_TEXT, sizeTotal);}第三步:在主菜单条的编辑菜单下添加一子菜单项,ID为IDM_EDIT_SCREEN,标题为“抓取全屏”。
通过ClassWizard在CGrabScreenView中添加该菜单项的命令响应函数,采用ClassWizard建议的函
数名称OnEditScreen。第四步:在OnEditScreen函数中实现抓取整个屏幕图像及光标区域。首先在CgrabScreenView类定义中增加成员变量HDC m_hdcCompatible和HBITMAP m_hbmScreen,
分别对应整个屏幕图像及光标区域的兼容设备描述表和兼容位图。然后用下面给出的程序代码获取所
需数据。void CGrabScreenView::OnEditScreen() {// TODO: Add your command handler code here//获取全屏幕窗口的设备描述表HDC hdcScreen=::GetDC(NULL);//产生全屏幕窗口设备描述表的兼容设备描述表m_hdcCompatible=CreateCompatibleDC(hdcScreen);//产生全屏幕窗口设备描述表的兼容位图HBITMAP m_hbmScreen=CreateCompatibleBitmap(hdcScreen,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES));//将兼容位图选入兼容设备描述表SelectObject(m_hdcCompatible,m_hbmScreen);//将全屏幕窗口位图的象素数据拷贝到兼容设备描述表BitBlt(m_hdcCompatible,0,0,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES),hdcScreen,0,0,SRCCOPY);//获取当前光标及其位置HCURSOR hCursor=GetCursor();POINT ptCursor;GetCursorPos(&ptCursor);//获取光标的图标数据 ICONINFO IconInfo;if (GetIconInfo(hCursor, &IconInfo)){ptCursor.x -= ((int) IconInfo.xHotspot);ptCursor.y -= ((int) IconInfo.yHotspot);if (IconInfo.hbmMask != NULL)DeleteObject(IconInfo.hbmMask);if (IconInfo.hbmColor != NULL)DeleteObject(IconInfo.hbmColor);}//在兼容设备描述表上画出该光标DrawIconEx(m_hdcCompatible, // handle to device context ptCursor.x, ptCursor.y,hCursor, // handle to icon to draw 0,0, // width of the icon 0, // index of frame in animated cursor NULL, // handle to background brush DI_NORMAL | DI_COMPAT // icon-drawing flags );//使窗口无效,调用OnDraw重画窗口 Invalidate(); }第五步:在窗口重画函数OnDraw中将m_hdcCompatible中的图像拷贝到CgrabScreenView的设备描述
表上,从而在该窗口中抓取的屏幕及光标区域。void CGrabScreenView::OnDraw(CDC* pDC){CGrabScreenDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//在视图窗口显示全屏幕窗口图像及光标区域 SelectObject(pDC->m_hDC,m_hbmScreen);BitBlt(pDC->m_hDC,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CXSCREEN),m_hdcCompatible,0,0,SRCCOPY);}