zoukankan      html  css  js  c++  java
  • MFC鼠标键盘消息处理

    void CMainWindow::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags ){
        if((nChar=='A')&&(GetKeyState( VK_SHIFT)<0)&&(GetKeyState(VK_LBUTTON))){
            MessageBox(_T("shift+A+鼠标左键被按下了"));
        }
    
        if(GetKeyState(VK_NUMLOCK)&0x01){/*  若高序位为1,则键处于DOWN状态,否则为UP状态。
    
        若低序位为1,则键被触发。若低序位置为0,则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即灭。 */
    
            MessageBox(_T("NumLock被按下了"));
        }
    }
    void CMainWindow::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags){
        CString s;
        if((nChar>=_T('A'))&&(nChar<=_T('Z'))||(nChar>=_T('a'))&&(nChar<=_T('z'))){
            s.Format(_T("你按下了:%c"),nChar);
            MessageBox(s);
        }
    }

     判断是否在图形内部的两种方法:

    方法一:PtInRect

    void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)
    {
            CRect rc(100,100,200,200);
        if(rc.PtInRect(point)){
            MessageBox(_T("内部"),NULL);
        }else
        {
            MessageBox(_T("外部"),NULL);
        }
    }

    方法二:判断像素颜色(最好用黑白两色,其他颜色可能是抖动色,不准确

    void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)
    {
          CClientDC dc(this);
        if(dc.GetPixel(point)==RGB(0,0,0)){
            MessageBox(_T("内部"),_T("a"),MB_ABORTRETRYIGNORE);
        }
    }

     处理光标:

    void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)
    {
        TEXTMETRIC tm;
        CClientDC dc(this);
        dc.GetTextMetrics(&tm);
        CreateSolidCaret(4,tm.tmHeight);//光标的宽和高
        CSize size=dc.GetTextExtent(_T("aaaaaaaaa",8));//光标处于当前鼠标位置之后8个字符的位置
        SetCaretPos(CPoint(point.x+size.cx,point.y));
        ShowCaret();//默认是隐藏的
        m_ptCaret=point;
    }
  • 相关阅读:
    Matlab/Simulink仿真中如何将Scope转化为Figure?
    圆形Camera预览实现
    [转]自定义Drawable实现灵动的红鲤鱼动画(下篇)
    [转]自定义Drawable实现灵动的红鲤鱼动画(上篇)
    EventBus源码分析
    Camera 预览变形问题解决
    使用javacv录像,同时进行讯飞声纹认证
    Camera2必知必会
    Flutter混合工程改造实践
    讯飞语音唤醒SDK集成流程
  • 原文地址:https://www.cnblogs.com/duyy/p/3775011.html
Copyright © 2011-2022 走看看