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. PHPSTUDY下升级mysql后无法启动

    说来也是搞笑,之前很早就想看Laravel了~其中,之前项目忙,还有就是自己也出了点事故!但是呢,我个人哭过,抱怨过,但是我还是很懂我自己的.也许没心没肺也是一种好事,但也是坏事~ 闲话说多了,来说正 ...

  2. 单元测试系列:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  3. 给file_get_contents函数设置超时时间

    $opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>60, ) ); $context = str ...

  4. ansible playbook实践(一)-基础环境安装

    1 介绍 Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令. 2 实验环境 ip 角色 192.168.40.71 ansible管控端 192.168.40.72 ...

  5. iOS-状态栏字体颜色【白色】【Xcode9.1】

    Xcode9之前 设置状态栏颜色首先在info.plist文件中,加入UIViewControllerBasedStatusBarAppearance = false: <key>UIVi ...

  6. 使用.bat来执行Java程序基础

    将java程序做成可运行的jar后,又希望使用.bat文件来调用jar时,有几点需要注意的. 1.设置path和classpath .bat文件中扥的内容如下: @echo off set MY_HO ...

  7. Bootstrap+Vue.js 练习入门一

    一. 效果如下图所示,输入用户名和年龄,点击添加,数据会自动添加到下面的用户信息表内.当没有数据时,用户信息表显示:暂无数据……,当有数据时,显示 删除全部 按钮,这里为了方便快捷,我没有做删除按钮的 ...

  8. 记一次 bug 修复 , 未将对象引用实例化

    我们对默认值的使用技巧中,同一个组件, 升级版本,增加新的配置字段,执行新的逻辑. 老版本,没有类似的配置字段,走原始逻辑. 在类的构造中,添加了这么一句代码, 运行后,报错,没看出问题原因: boo ...

  9. cryptojs的使用

    项目中经常会遇到加密解密的需求,这里有一个js库非常好用,就是crypto-js.下面记录一下使用方法. 首先,安装js库 npm install crypto-js --save 然后,在项目中使用 ...

  10. selenium自动化测试学习(一)

    在学习selenium自动化测试前,我们需要先了解一点自动化测试的相关知识. (一)什么是自动化测试 (二)为什么要做自动化测试 (三)自动化测试优缺点 (1)什么是自动化测试 自动化测试是把以人为驱 ...