关于窗口对象指针句柄等的一些总结

程序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  

和hdc2有和区别;  
  我用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是裁剪过的

posted @ 2015-05-03 17:28  kelseyling  阅读(379)  评论(0)    收藏  举报