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. Python selenium 一个节点两个关联input

    HTML代码: 一个节点两个关联input  多出现于密码框 先需要模拟点击进入第一个input,才能激活第二个input. 代码: driver.find_element_by_name('Text ...

  2. React原理探索- @providesModule 模块系统

    @providesModule是什么 react抛出组件化的概念后,对于开发者而言,为了提高代码的可读性与结构性,通过文件目录结构去阐述组件嵌套关系无疑是一个很好的办法,但是目录级别的加深,同时让re ...

  3. Jsonp 原理简述

    浏览器因为安全问题而有一个同源策略,不允许跨域请求数据.但是 js 脚本资源和图片资源还是被允许跨域请求的.在 web 开发中,遇到要跨域请求 json 数据时,可以用 jsonp 的方式来绕过浏览器 ...

  4. iOS-主线程刷新UI【+单例】

    主线程刷新UI dispatch_async(dispatch_get_main_queue(), ^{ /// }); 单例 static Tools *_sharedManger; @implem ...

  5. Java随感

    创新项目要用java,而我只大概会C++,只能靠自学咯~~~随时将一些重要的概念做笔记在这里吧>_< 1.一个源文件中只能有一个public类,一个源文件可以有多个非public类 2.所 ...

  6. Redis安装和基础介绍

    一:初识Redis Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到 ...

  7. JSON工具类

    import java.sql.Timestamp; import java.util.Collection; import java.util.Date; import org.soul.util. ...

  8. 使用Dism备份和全新恢复系统

    1.使用WinPE启动,winPE制作可以参考我的另一文章http://www.cnblogs.com/karl-F/p/6934086.html 2.捕获C盘镜像 (1)查看磁盘 在PE提示符:输入 ...

  9. Maven服务器

    Maven私服仓库管理: Nexus 3.0 使用nexus3.X搭建maven私服在Centos7环境中-详细教程

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

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