现在需要在CView类中添加对于鼠标和键盘长按得处理。
但是一直没有找到相关的信息。
又没有高人能够提供一些例子,或者思路的
不胜感激。

解决方案 »

  1.   

    长按?响应到KEYDOWN消息后进行计时?
      

  2.   

    处理WM_KEYDOWN(键盘),WM_LBUTTONDOWN,WM_MBUTTONDOWN,WM_RBUTTONDOW消息,
    一旦按下后即开始计时, 达到一定时间则视为长按.
      

  3.   

    其实也不是很复杂,直接在PreTranslateMessage中处理即可
      

  4.   

    if(pMsg->message==WM_KEYDOWN)//如果键盘按下
      //开始计时..........
      

  5.   

    谢谢上面各位高手的执教。
    不过能不能给一个详细一点的例子?TO:zhucde(【風間苍月】★MVP★www.bezier.com.cn/bbs★虚拟)
    你说的在PreTranslateMessage中处理,能不能给一个详细一点的例子。
      

  6.   

    还有就是对于键盘来说,如果长按,系统会不断地发送KEY_DOWN,这个时候怎么计时阿?
      

  7.   

    WM_LBUTTONDOWN
    如果bButtonDown为False,设置bButtonDown为True,开始计时。
    如果bButtonDown为True,什么都不做。WM_LBUTTONUP
    设置bButtonDown为False;
    停止计时,计时归零
    时间达到长按时间(自己设定),检测bButtonDown,
    如果为True,处理长按
      

  8.   

    我帮你做了个测试程序,你试试:http://www.bezier.com.cn/study/InputTest.rar
      

  9.   

    如果不能下载我这里贴出程序吧:
    新建一个对话框程序,上面放置两个静态文本控件,用来显示鼠标和键盘按下的时间,
    ID分别为IDC_MOUSE, IDC_KEYBOAD;在头文件.h中定义如下两个变量:
    class CInputTestDlg : public CDialog
    {
    // Construction
    public:
    CInputTestDlg(CWnd* pParent = NULL); // standard constructor
    CString m_keyboard;//显示值
    CString m_mouse;//显示值....在CXXdlg.cpp的开头定义如下四个变量:
    int mouse=0,key=0;
    int mti=0,kti=0;在OnInitDialog中加入:
    SetTimer(1,10,0);然后:BOOL CInputTestDlg::PreTranslateMessage(MSG* pMsg) 
    { if(pMsg->message==WM_KEYDOWN)
    {
    key=1;

    }
    if(pMsg->message==WM_KEYUP)
    key=0;

    if(pMsg->message==WM_LBUTTONDOWN||pMsg->message==WM_MBUTTONDOWN||pMsg->message==WM_RBUTTONDOWN)
    mouse=1;

    if(pMsg->message==WM_LBUTTONUP||pMsg->message==WM_MBUTTONUP||pMsg->message==WM_RBUTTONUP)
    mouse=0;


    return CDialog::PreTranslateMessage(pMsg);
    }void CInputTestDlg::OnTimer(UINT nIDEvent) 
    { if(key)
    {
    kti++;

    }
    else
    kti=0;
    if(mouse)
    mti++;
    else
    mti=0;

    m_mouse.Format("%d",kti);
    m_keyboard.Format("%d",mti);
    GetDlgItem(IDC_MOUSE)-> SetWindowText(m_mouse);
    GetDlgItem(IDC_KEYBORD)-> SetWindowText(m_keyboard);

    CDialog::OnTimer(nIDEvent);
    }搞定.(当然这个只是显示循环值,并非时间值,你自己可以改一下)
      

  10.   

    谢谢zhucde(【風間苍月】★MVP★www.bezier.com.cn/bbs★虚拟现实) 
    如果好用马上结贴。