关于窗口对象指针句柄等的一些总结
程序1
程序2
void CCamshiftDlg::OnOpen()
{
// TODO: Add your control notification handler code here
CWnd *pwnd;
pwnd = GetDlgItem(IDC_STATIC); //获取picture控件窗口的句柄
pDC =pwnd->GetDC(); //定义一个CDC类指针pDC,用picture控件的句柄获取picture控件的DC(设备描述表)
hDC= pDC->GetSafeHdc(); //获取设备描述表DC的句柄 HDC GetSafeHdc( ) const; 返回设备上下文句柄(上面是指针)
GetDlgItem(IDC_STATIC)->GetClientRect(&rect);
m_Video=cvCaptureFromCAM(-1);
SetTimer(1,100,NULL);
}
CWnd *pwnd;
pwnd = GetDlgItem(IDC_STATIC); //获取picture控件窗口的句柄
pDC =pwnd->GetDC();
程序1是获取当前窗口的DC,并利用它来调用函数画图,程序2是先用GetDlgItem()获取对话框(基于对话框的程序)中图片控件的句柄,然后利用此句柄调用GetDC()获取此空间的DC句柄
令附:
hdc1
我用hdc1画图,操作滚动条可以自动移动图形,但是DPtoLP不对,结果总是正值;
我用hdc2画图,操作滚动条不能自动移动图形,但是DPtoLP正确;
CScrollView::OnDraw(CDC* pDC)
{
HDC hdc1 = ::GetDC(GetSafeHwnd()); //GetSafeHwnd()得到的是View的句柄
HDC hdc2 = pDC->GetSafeHdc(); //得到的是客户区DC的句柄
}
不是在OnDraw()里的话,就相同,如:
CDC* pDC = GetDC();
HDC hdc1 = ::GetDC(GetSafeHwnd());
HDC hdc2 = pDC->GetSafeHdc();
hdc1和hdc2作用一样
在OnDraw()里直接使用OnDraw()的参数pDC就不一样了,没记错的话,那个pDC是裁剪过的

浙公网安备 33010602011771号