zoukankan      html  css  js  c++  java
  • 引用 CTreeCtrl中用右键选中item并弹出菜单的方法(转)

    引用

    小甜鼠 的 CTreeCtrl中用右键选中item并弹出菜单的方法

    在csdn上看了几篇文章,自己正好派上用场,总结一下:

    //获取到鼠标点中的位置 

    POINT pt;

    GetCursorPos(&pt);

    UINT uFlags;

    //将屏幕坐标转化为客户区坐标 

    ScreenToClient(&pt); 

    MapWindowPoints(&m_ctrlClassTree, &pt,1);

    //获取鼠标点中位置的item

    HTREEITEM hItem = m_ctrlClassTree.HitTest(pt,&uFlags);

    if ((hItem != NULL) && (TVHT_ONITEM & uFlags))

    {

       //选中点中的item

           m_ctrlClassTree.Select(hItem, TVGN_CARET);

    }

    //必不可少,将客户区坐标转化为屏幕坐标

    ClientToScreen(&pt);

    //弹出右键菜单

    m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,pt.x+15,pt.y+15,this);

    依据设备坐标的原点和用途,可以将Windows下使用的设备坐标系统分为三种:工作区坐标系统,窗口坐标系统和屏幕坐标系统。

    1)工作区坐标系统:

      工作区坐标系统是最常见的坐标系统,它以窗口客户区左上角为原点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息WM_LBUTTONDOWNWM_MOUSEMOVE传给框架的消息参数以及CDC一些用于绘图的成员都是使用工作区坐标。

    2)屏幕坐标系统:

      屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点(0,0)。以CreateDC(DISPLAY” , ...)GetDC(NULL)取得设备上下文时,该上下文使用的坐标系就是屏幕坐标系。

      一些与窗口的工作区不相关的函数都是以屏幕坐标为单位,例如设置和取得光标位置的函数SetCursorPos()GetCursorPos();由于光标可以在任何一个窗口之间移动,它不属于任何一个单一的窗口,因此使用屏幕坐标。弹出式菜单使用的也是屏幕坐标。另外,CreateWindowMoveWindowSetWindowPlacement()等函数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。

    3)窗口坐标系统:

      窗口坐标系统以窗口左上角为坐标原点,它包含了窗口控制菜单、标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。

    三类设备坐标系统关系如下图所示:

    MFC提供ClientToScreen()ScreenToClient()两个函数用于完成工作区坐标和屏幕坐标之间的转换工作。

    void ScreenToClient( LPPOINT lpPoint ) const;

    void ScreenToClient( LPRECT lpRect ) const;

    void ClientToScreen( LPPOINT lpPoint ) const;

    void ClientToScreen( LPRECT lpRect ) const;

      其实,我们在前面介绍弹出式菜单时已经使用了ClientToScreen函数。在那里,由于弹出式菜单使用的是屏幕坐标,因此当处理弹出式菜单快捷键shift+F10时,如果要在窗口左上角(5,5)处显示快捷菜单,就必须先调用ClientToScreen函数将客户区坐标(5,5)转化为屏幕坐标。

  • 相关阅读:
    金融新手投标模块布局小Demo
    jQuery序列化Ajax提交表单
    javascript实现jsonp跨域问题+原理
    javascript返回顶部插件+源码
    mime中间件
    移动端meta标签的设置
    Node环境下实现less编译
    diogo谈框,仿prompt()方法布局
    linux驱动程序框架基础
    C/C++下Netbeans的配置
  • 原文地址:https://www.cnblogs.com/myitm/p/2091447.html
Copyright © 2011-2022 走看看