ClientToScreen 和ScreenToClient 用法[通俗易懂]

ClientToScreen 和ScreenToClient 用法[通俗易懂]ClientToScreen()是把窗口坐标转换为屏幕坐标ScreenToClient()是把屏幕坐标转换为窗口坐标屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。一个窗体分为两部分:系统区和客户区象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!Width,He

大家好,欢迎来到IT知识分享网。ClientToScreen( )是把窗口坐标转换为屏幕坐标


ClientToScreen 和ScreenToClient 用法[通俗易懂]ScreenToClient( )是把屏幕坐标转换为窗口坐标


ClientToScreen 和ScreenToClient 用法[通俗易懂]屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的


ClientToScreen 和ScreenToClient 用法[通俗易懂]VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]一个窗体分为两部分:系统区和客户区


ClientToScreen 和ScreenToClient 用法[通俗易懂]象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!


ClientToScreen 和ScreenToClient 用法[通俗易懂]Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是


ClientToScreen 和ScreenToClient 用法[通俗易懂]系统区的啦!!!


ClientToScreen 和ScreenToClient 用法[通俗易懂]ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!


ClientToScreen 和ScreenToClient 用法[通俗易懂]ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]bool   m_bIsLButtonDawn =false;


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]{


ClientToScreen 和ScreenToClient 用法[通俗易懂] // TODO: Add your message handler code here and/or call default


ClientToScreen 和ScreenToClient 用法[通俗易懂] CWnd *pwnd=GetDlgItem(IDC_EDIT1);


ClientToScreen 和ScreenToClient 用法[通俗易懂]     CDC *pdc=pwnd->GetDC();


ClientToScreen 和ScreenToClient 用法[通俗易懂] CRect rect;


ClientToScreen 和ScreenToClient 用法[通俗易懂] this->ClientToScreen(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂] pwnd->ScreenToClient(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂] pwnd->GetClientRect(&rect);


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]//   HCURSOR hcur=::LoadCursorFromFile(“pen.cur”);


ClientToScreen 和ScreenToClient 用法[通俗易懂] //   SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur);  


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]// CPen pen(PS_INSIDEFRAME,-1,RGB(255,255,255));


ClientToScreen 和ScreenToClient 用法[通俗易懂]//      CPen* olePen=pdc->SelectObject(&pen);


ClientToScreen 和ScreenToClient 用法[通俗易懂] if(rect.PtInRect(point) &&   m_bIsLButtonDawn )


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]{


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pdc->DPtoLP(&m_fp);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pdc->MoveTo(m_fp);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pdc->DPtoLP(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pdc->LineTo(point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂] }


ClientToScreen 和ScreenToClient 用法[通俗易懂]   m_fp=point;


ClientToScreen 和ScreenToClient 用法[通俗易懂]//   pdc->SelectObject(olePen);


ClientToScreen 和ScreenToClient 用法[通俗易懂] ReleaseDC(pdc);


ClientToScreen 和ScreenToClient 用法[通俗易懂] CDialog::OnMouseMove(nFlags, point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]}


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]void CDrawDlg::OnLButtonUp(UINT nFlags, CPoint point)


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]{


ClientToScreen 和ScreenToClient 用法[通俗易懂]   m_bIsLButtonDawn =false;


ClientToScreen 和ScreenToClient 用法[通俗易懂] // TODO: Add your message handler code here and/or call default


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]/**//*


ClientToScreen 和ScreenToClient 用法[通俗易懂]    CWnd *pwnd=GetDlgItem(IDC_EDIT1);


ClientToScreen 和ScreenToClient 用法[通俗易懂]      CDC *pdc=pwnd->GetDC();


ClientToScreen 和ScreenToClient 用法[通俗易懂]   CRect rect;


ClientToScreen 和ScreenToClient 用法[通俗易懂]   this->ClientToScreen(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pwnd->ScreenToClient(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   pwnd->GetClientRect(&rect);


ClientToScreen 和ScreenToClient 用法[通俗易懂]  


ClientToScreen 和ScreenToClient 用法[通俗易懂]   if(rect.PtInRect(point))


ClientToScreen 和ScreenToClient 用法[通俗易懂]   {


ClientToScreen 和ScreenToClient 用法[通俗易懂]    pdc->DPtoLP(&m_fp);


ClientToScreen 和ScreenToClient 用法[通俗易懂]    pdc->MoveTo(m_fp);


ClientToScreen 和ScreenToClient 用法[通俗易懂]    pdc->DPtoLP(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]    pdc->LineTo(point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]   }


ClientToScreen 和ScreenToClient 用法[通俗易懂]   ReleaseDC(pdc);*/


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂] CDialog::OnLButtonUp(nFlags, point);


ClientToScreen 和ScreenToClient 用法[通俗易懂]}


ClientToScreen 和ScreenToClient 用法[通俗易懂]


ClientToScreen 和ScreenToClient 用法[通俗易懂]void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point)


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]{


ClientToScreen 和ScreenToClient 用法[通俗易懂] // TODO: Add your message handler code here and/or call default


ClientToScreen 和ScreenToClient 用法[通俗易懂] CWnd *pwnd=GetDlgItem(IDC_EDIT1);


ClientToScreen 和ScreenToClient 用法[通俗易懂] CDC *pDC=pwnd->GetDC();


ClientToScreen 和ScreenToClient 用法[通俗易懂] CRect rect;


ClientToScreen 和ScreenToClient 用法[通俗易懂] this->ClientToScreen(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂] pwnd->ScreenToClient(&point);


ClientToScreen 和ScreenToClient 用法[通俗易懂] pwnd->GetClientRect(&rect);


ClientToScreen 和ScreenToClient 用法[通俗易懂] if(rect.PtInRect(point))


ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]
ClientToScreen 和ScreenToClient 用法[通俗易懂]{


ClientToScreen 和ScreenToClient 用法[通俗易懂]   m_fp.x=point.x;


ClientToScreen 和ScreenToClient 用法[通俗易懂]   m_fp.y=point.y;


ClientToScreen 和ScreenToClient 用法[通俗易懂] }


ClientToScreen 和ScreenToClient 用法[通俗易懂] ReleaseDC(pDC);


ClientToScreen 和ScreenToClient 用法[通俗易懂]   m_bIsLButtonDawn =true;


ClientToScreen 和ScreenToClient 用法[通俗易懂] CDialog::OnLButtonDown(nFlags, point);

ClientToScreen 和ScreenToClient 用法[通俗易懂]}

_______________________________________________________________________________

GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。

  GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。  

  ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标. 

  ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.

我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后 GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect取得的矩阵不小于 GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。   

 对GetWindowRect取得的矩阵ScreenToClient后,矩阵的大小没有变小,(-3,-29)是窗口的左上角的坐标,相对窗口客户区左上角。 

对GetClientRect取得的矩阵ClientToScreen后,矩阵也没有变大,新得到的矩阵是窗口客户区在屏幕坐标系上的RECT。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/7633.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信