您的位置:首页 > 其它

MFC鼠标键盘消息处理

2014-06-07 17:38 357 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: