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;
    }
  • 相关阅读:
    时间过的好快啊
    IBM的 SOA架构设计还是写的很好的
    昨天尝试了Layout,也谈Silverlight的布局
    这几天忙着选车了!
    痛苦的事情是将自己的想法表达出来
    花了一天的工夫才写了一篇PPT
    昨天抄写了gameEnvironment的行为模式
    XMLHTTP对像异步请求四步曲
    第一篇: 第一个简单的vs 2008 ASP.NET Ajax 范例
    什么是 Silverlight?
  • 原文地址:https://www.cnblogs.com/duyy/p/3775011.html
Copyright © 2011-2022 走看看