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

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

屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的

VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。





一个窗体分为两部分:系统区和客户区

象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!

Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是

系统区的啦!!!

ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!

ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!

 
 //Resize window to proper size based on video standard

 CRect recDstD1( 0, 0, 720, 576 );  

 static_preview_window.ClientToScreen(&recDstD1); //    recDstD1 {top=53 bottom=629 left=200 right=920} CRect



 static_preview_window.SetWindowPos(&CWnd::wndBottom, recDstD1.left, recDstD1.top, recDstD1.right - recDstD1.left + 10, new_height + 10, SWP_NOMOVE | SWP_SHOWWINDOW); 
 


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);

ClientToScreen 和ScreenToClient 用法的更多相关文章

  1. 【VS开发】ClientToScreen 和ScreenToClient 用法

    ClientToScreen( )是把窗口坐标转换为屏幕坐标 pWnd->GetWindowRect(&rc);是获取整个窗体的大小pWnd->GetClientRect(& ...

  2. 坐标的相对转换ClientToScreen与ScreenToClient

    假如一个有一个TEdit的实例edt_Position,edt_Position所在容器有好几层,所在的窗体为frmMain.现要弹出一个FORM,FORM的容器为frmMain,弹出的位置在edt_ ...

  3. MFC映射

    所有CDC输出函数最终都会输出到物理平面(屏幕窗口.打印纸等).这些物理平面的单位量化往往多种多样,比如像素.打印点.英寸.毫米等等.这样可能会造成很多混乱,所以CDC输出对所有物理平面进行统一抽象化 ...

  4. MapWindowsPoints函数使用

    MapWindowPoints的百度解释: 函数功能:该函数把相对于一个窗口的坐标空间的一组点映射成相对于另一窗口的坐标空 的一组点.   函数原型:int MapWindowPoints(HWND ...

  5. MFC常见问题解惑

    MFC类的分类 1 Root: CObject : CObject2 Application Architecture Classes: CWinApp/CFrameWnd/... 3 Window, ...

  6. Windows坐标系

    .逻辑坐标 逻辑坐标是独立于设备的,它与设备点的大小无关.使用逻辑单位,是实现"所见即所得"的基础.当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的 ...

  7. (转载博文)VC++API速查

    窗口处理 2.1 窗口简介 2.2.1 创建普通窗口(CreateWindow.CreateWindowEx) 2.2.2 关闭窗口(CloseWindow) 2.2.3 销毁窗口(DestroyWi ...

  8. Windows编程坐标系统概念

    Windows编程中关于设置映象模式的四个函数 SetWindowOrgSetViewPortOrgSetMapModeSetWindowExtExSetViewPortExtEx 一.Windows ...

  9. delphi 各版本的特性

    delphi 各新版本特性收集 Delphi XE6新增了一些特性并增强了原有的功能,主要有以下几个方面:   IDE(整合开发环境)   Internet XML(扩展标记语言) Compiler( ...

随机推荐

  1. iOS项目——基本框架搭建

    项目开发过程中,在完成iOS项目——项目开发环境搭建之后,我们首先需要考虑的就是我们的项目的整体框架与导航架构设计,然后在这个基础上考虑功能模块的完成. 一 导航架构设计 一款App的导航架构设计应该 ...

  2. Java中的null值总结

    自我总结,有什么不对或不到位的地方,请指出,感激不尽! 目的:熟练掌握java中null值出现的情况,避免NullPointerException 代码环境准备:需要引入junit;将代码packag ...

  3. 知识点干货—多线程同步【6】之synchronized

    "明日复明日,明日何其多. 我生待明日,万事成蹉跎. 世人若被明日累,春去秋来老将至. 朝看水东流,暮看日西坠. 百年明日能几何?请君听我明日歌. 明日复明日,明日何其多! 日日待明日,万世 ...

  4. CSS3属性详解(图文教程)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 我们在上一篇文章中学习了CSS3的选择器,本文来学一下CSS3的一 ...

  5. Spring学习之二

    1.初始化和销毁Bean 当实例化一个Bean时,可能需要执行一些初始化操作来确保该Bean处于可用状态.同样地,当不需要Bean时,将其从容器中移除时,我们可能还需要按顺序的执行一些清除工作. 为定 ...

  6. Cypher查询语言--Neo4j 综合(四)

    目录 返回节点 返回关系 返回属性 带特殊字符的标识符 列的别名 可选属性 特别的结果   查询中的返回部分,返回途中定义的感兴趣的部分.可以为节点.关系或其上的属性. 图 返回节点 返回一个节点,在 ...

  7. MySQL操作的一些优化

    1.用于不要使用select * from table xxx. 需要查询哪些列就在语句中指明,一个表结构复杂时,可能会有上百列,使用*来查询时会造成很大的浪费. 2.选择合适的属性及大小    例如 ...

  8. 深入浅出Hadoop之mapreduce

    卿哥原创,转载请注明出处,谢谢 之前已经作出预告,那么今天就聊聊mapreduce,起源于Google的map reduce paper, 而后经历了mapreduce 1,和构建于yarn上的map ...

  9. Python中什么时候使用生成器?

    编者注:本文主要参考了<Python核心编程(第二版)> 说到生成器,先说说列表解析.列表解析可以动态创建列表. [expr for iter_var in iterable if con ...

  10. mysql中的coalesce用法

    在mysql中,其实有不少方法和函数是很有用的,这次介绍一个叫coalesce的,拼写十分麻烦,但其实作用是将返回传入的参数中第一个非null的值,比如    SELECT COALESCE(NULL ...