15,979
社区成员
发帖
与我相关
我的任务
分享
void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码
// 不要为绘制消息而调用 CWnd::OnPaint()
PaintImage();
}
void CChildView::PaintImage()
{
CDC *dc = GetDC();
CDC myDC;
CRect rect;
GetClientRect( &rect );
CBitmap bmp;
myDC.CreateCompatibleDC(dc);
bmp.CreateCompatibleBitmap(dc,rect.Width(),rect.Height());
//将内存位图选进内存DC中用来保存在内存DC中绘制的图形
myDC.SelectObject(&bmp);
myDC.FillSolidRect(0,0,WIDTH,HEIGHT,RGB(255,255,255));
CBitmap *oldbmp=myDC.SelectObject(&bmp);
CPen pen(PS_SOLID,2,RGB(255,0,0));
CPen* oldpen=dc->SelectObject(&pen);
int height=HEIGHT;
int width=WIDTH;
myDC.MoveTo(m_iX,0);
myDC.LineTo(m_iX,height);
myDC.MoveTo(0,m_iY);
myDC.LineTo(width,m_iY);
dc->BitBlt(0,0,rect.Width(),rect.Height(),&myDC,0,0,SRCCOPY);
dc.SelectObject(oldpen);
bmp.DeleteObject();
myDC.DeleteDC();
}
void CChildView::OnFileSetpara() //这个是菜单项按钮的点击事件
{
// TODO: 在此添加命令处理程序代码
CSetParaDlg dlg; //对话框类
if(IDOK==dlg.DoModal())
{
m_iX=dlg.m_xaxis;
m_iY=dlg.m_yaxis;
Invalidate();//强行刷新,触发WM_OPAINT消息
}
}
BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
CChildView m_wndView;
CMainFrame::CMainFrame()
: m_pSink( DShowLib::FrameHandlerSink::create( DShowLib::eRGB24, 5 ) ),
m_IsStillImageValid( false )
{
m_pSink->setSnapMode( true ); //m_pSink,m_Grabber均为相机视频流的参数变量
m_Grabber.setSinkType( m_pSink );
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建一个视图以占用框架的工作区
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this,AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("未能创建视图窗口\n");
return -1;
}
m_Grabber.setHWND(m_wndView);
updateWindowTitle();
return 0;
}