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

 

 

 

 

转载于:https://www.cnblogs.com/duyy/p/3775011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值