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. select标签实现二级联动

    效果如下图所示: 实现的原理:使用onchange事件,原理见代码 html代码: <select id="select" class="sel"> ...

  2. 基于Java的Arc Engine二次开发的环境的配置

    1.软件准备 ArcGIS for Desktop 10.2, Arc engine, jdk-7u60-windows-i586,Eclipse Mar2 2.软件的安装 2.1 ArcGIS fo ...

  3. XGoServer 一个基础性、模块完整且安全可靠的服务端框架

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  4. JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox

    1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生 ...

  5. 介绍一个轻量级iOS安全框架:SSKeyChain

    SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes ...

  6. nginx 浏览php的时候会变成下载

    php的时候会变成下载:这是因为nginx没有设置好碰到php文件时,要传递到后方的php解释器.看看你的nginx.conf配置,里面有没有这样的设置:location ~ .*\.php$ {fa ...

  7. 对 url 中含有的中文进行转码操作

    对 url 中含有的中文进行转码操作 一般情况下,将带有中文的 url 拷贝到开发工具,开发工具都会有相应的转码(自动转码), 现在大部分的浏览器也可以对含有中文的 url 进行转码(自动转码) 情景 ...

  8. YUM安装软件

    YUM:介绍.工作流程.本地yum.网络yum.yum的相关命令 一.What is YUM YUM是基于rpm但更胜于rpm的软件管理工具 YUM的优点: 1.更方便的管理rpm软件包 2.自动解决 ...

  9. docker数据库

    拉取镜像 # docker pull mysql: 创建docker数据库容器 # docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASS ...

  10. mac中配置jdk环境