zoukankan      html  css  js  c++  java
  • ClientToScreen( )和ScreenToClient( )

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

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4455026.html
Copyright © 2011-2022 走看看