ClientToScreen( )是把窗口坐标转换为屏幕坐标
ScreenToClient( )是把屏幕坐标转换为窗口坐标
屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。


一个窗体分为两部分:系统区和客户区
象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!
Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是
系统区的啦!!!
ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!

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

转载于:https://www.cnblogs.com/kex1n/archive/2011/10/11/2206895.html

ClientToScreen 和ScreenToClient相关推荐

  1. MFC ClientToScreen 和 ScreenToClient

       ClientToScreen( )是把窗口坐标转换为屏幕坐标  ScreenToClient( )是把屏幕坐标转换为窗口坐标  屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的 ...

  2. ClientToScreen 和ScreenToClient 及绘图

    http://blog.csdn.net/ljh0600301217/article/details/8736494 ClientToScreen( )是把窗口坐标转换为屏幕坐标 pWnd->G ...

  3. ClientToScreen( )和ScreenToClient( )区别

    ClientToScreen( )是把窗口坐标转换为屏幕坐标 ScreenToClient( )是把屏幕坐标转换为窗口坐标 屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的 VC下, ...

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

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

  5. 【2012年终总结】之一 opencv + ds采集摄像头视频 MFC点点滴滴

    1.MFC单文档多文档程序 不让MFC来更新菜单 1 在CMainFrame::CMainFrame中添加 2 3 m_bAutoMenuEnable = FALSE; 标题栏图标的更改 1 //cu ...

  6. 第05章 图形基础

    图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形.正如您所认为的那样,GDI是Windows非常重要的部分.不只 ...

  7. MFC函数书本速查 API函数大全

    基础类 CObject AssertValid p3 Dump p3 IsSerializable p4 Serializable p4 GetRuntimeClass p4 IsKindOf p5 ...

  8. 循序渐进全球化 镜像识别

    循序渐进全球化 镜像识别 本页内容 概述和说明 示例 Win32 中的镜像 镜像 .NET Framework 网页中的镜像 概述和说明 对 于从右向左 (RTL) 的语言,不但文本对齐和文本阅读顺序 ...

  9. MFC利用定时器实现图片移动

    (1)在窗口中放入Picture Static控件,并设置控件图片属性为Bitmap,如图所示 (2)插入资源图片 选择Resource视图,插入需要的加载的图片资源. (3)设置需要显示的图片 HB ...

  10. QT源码拾贝6-11(qwindowswindow)

    目录 6  窗口激活相关的函数QWindowsForeignWindow::setParent 7  QDebug运算符<<重载 8  vscode的windows的变量提示很有意思 9  ...

最新文章

  1. 2017高级软件工程第1次作业
  2. Apache Dubbo 被曝出“高危”远程代码执行漏洞
  3. open、read、write、文件类型
  4. python pp模块_python常用模块
  5. Day13-日历模块
  6. mysql表空间界限_MySQL5.7 import表结构报错超出表空间界限
  7. weakhashmap_Java WeakHashMap keySet()方法与示例
  8. 【Spark】Spark Streaming的back pressure
  9. Windows注册表相关示例(重装Chrome、思迅条码软件、清除远程痕迹等)
  10. logrotate日志轮转
  11. java js对象转字符串数组_js 转json格式的字符串为对象或数组(前后台)的方法
  12. Bootstrap 后台模板-AdminLTE
  13. Mac OS X下的截屏功能和使用技巧
  14. linux dbx 进程,dbx 命令命令详解
  15. Linux下如何安装jdk
  16. wd移动硬盘不能识别_wd移动硬盘xp无法识别 移动硬盘无法识别的解决方法
  17. 数据库脏读、不可重复读、幻读以及对应的隔离级别
  18. 智慧景区光传输解决方案
  19. 解决Mac上plt画图中文无法显示的问题
  20. 洛谷 P1008三连击 C语言

热门文章

  1. OverFeat(译)
  2. 机器学习中的 Shapley 值怎么理解?
  3. 南邮 | 离散数学实验一:利用真值表法求取主析取范式以及主合取范式的实现
  4. 一年Java的阿里电话面试全纪录
  5. 计算机鼠标知识,计算机基础知识:鼠标的使用
  6. 【课程设计】企业职工工资管理系统 C语言版
  7. 基于STM32 HAL库硬件SPI的ST7789驱动(TFT-LCD 240*320)
  8. 金山文字和Word中的格式刷更顺手(转)
  9. 计算机中丢失d3dx11 43.dll,帮您设置win10系统运行软件提示计算机丢失d3dx11_43.dll的图文办法...
  10. 8000计算机论文范文,计算机毕业论文_计算机论文范文8000字_毕业论文8000字范例...