MFC ClientToScreen 和 ScreenToClient

发布时间:2025-12-09 16:48:09 浏览次数:4

ClientToScreen( )是把窗口坐标转换为屏幕坐标

 ScreenToClient( )是把屏幕坐标转换为窗口坐标
 屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
 VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。
 
 
 一个窗体分为两部分:系统区和客户区
 象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!
 Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是
 系统区的啦!!!
 ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
 ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!

 

[cpp]  view plain copy
  • bool  m_bIsLButtonDawn =false;  
  • void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)   
  • {  
  •     // TODO: Add your message handler code here and/or call default  
  •     CWnd *pwnd=GetDlgItem(IDC_EDIT1);  
  •     CDC *pdc=pwnd->GetDC();  
  •     CRect rect;  
  •     this->ClientToScreen(&point);  
  •     pwnd->ScreenToClient(&point);  
  •     pwnd->GetClientRect(&rect);  
  •     //  HCURSOR hcur=::LoadCursorFromFile("pen.cur");   
  •     //  SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur);    
  •     // CPen pen(PS_INSIDEFRAME,-1,RGB(255,255,255));  
  •     //     CPen* olePen=pdc->SelectObject(&pen);  
  •     if(rect.PtInRect(point) &&  m_bIsLButtonDawn )  
  •     {  
  •         pdc->DPtoLP(&m_fp);  
  •         pdc->MoveTo(m_fp);  
  •         pdc->DPtoLP(&point);  
  •         pdc->LineTo(point);  
  •     }  
  •     m_fp=point;  
  •     //  pdc->SelectObject(olePen);  
  •     ReleaseDC(pdc);  
  •     CDialog::OnMouseMove(nFlags, point);  
  • }  
  • void CDrawDlg::OnLButtonUp(UINT nFlags, CPoint point)   
  • {  
  •     m_bIsLButtonDawn =false;  
  •     // TODO: Add your message handler code here and/or call default  
  •     /* 
  •     CWnd *pwnd=GetDlgItem(IDC_EDIT1); 
  •         CDC *pdc=pwnd->GetDC(); 
  •     CRect rect; 
  •     this->ClientToScreen(&point); 
  •     pwnd->ScreenToClient(&point); 
  •     pwnd->GetClientRect(&rect); 
  •    
  •     if(rect.PtInRect(point)) 
  •     { 
  •     pdc->DPtoLP(&m_fp); 
  •     pdc->MoveTo(m_fp); 
  •     pdc->DPtoLP(&point); 
  •     pdc->LineTo(point); 
  •   
  •     } 
  •     ReleaseDC(pdc);*/  
  •    
  •     CDialog::OnLButtonUp(nFlags, point);  
  • }  
  • void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point)   
  • {  
  •     // TODO: Add your message handler code here and/or call default  
  •     CWnd *pwnd=GetDlgItem(IDC_EDIT1);  
  •     CDC *pDC=pwnd->GetDC();  
  •     CRect rect;  
  •     this->ClientToScreen(&point);  
  •     pwnd->ScreenToClient(&point);  
  •     pwnd->GetClientRect(&rect);  
  •     if(rect.PtInRect(point))  
  •     {  
  •         m_fp.x=point.x;  
  •         m_fp.y=point.y;  
  •     }  
  •     ReleaseDC(pDC);  
  •     m_bIsLButtonDawn =true;  
  •     CDialog::OnLButtonDown(nFlags, point);  
  • }  
  • 需要做网站?需要网络推广?欢迎咨询客户经理 13272073477