CMyFrame派生于CScrollViewvoid CPeeperWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
          //做一些事...   
CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}但经过跟踪调试,我按下ctrl + c时,OnKeyDown函数内,只捕捉到了Ctrl键的按下,对C键的按下,无动于忠(没有捕捉到c键按下的事件)。而如果只按c键时,就可以捕捉到,也就是说,当Ctrl键处于一直按下的状态时,此时,按c键,OnKeyDown()就感觉不到C键的按下。这是为什么呢?怎么解决呢?谢谢~~`

解决方案 »

  1.   

    因为CWnd类已经对于控制键作了处理,映射到快捷键上。你可以在PreTranslateMessge中拦截。
      

  2.   

    什么叫“映射到了快捷键上”?那么,除了ctrl键,其它别的控制键(如shift,是不是也要在Pretranslatemessage()中处理?)可我发现:按着shift键的同时,再按其它的普通字母键,是可以在OnKeyDown中捕捉到的。我想知道,到底哪些键需要在pre...中进行处理??
      

  3.   

    void CSDIView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
    // TODO: Add your message handler code here and/or call default
    CString s;
    s.Format(_T("%c\n"),nChar);
    //MessageBox(s);
    if (GetKeyState(VK_CONTROL)<0)
    {
    TRACE("ctrl down");
    }
    TRACE(s); CView::OnKeyDown(nChar, nRepCnt, nFlags);
    }
      

  4.   

    去掉加速键Accelerator中的Ctrl+C
      

  5.   

    呵呵,楼上的好办法用notepad打开.rc文件,找Accelerator这里的东东