比如定义了键盘上的键‘q’为视图上某功能的快捷键(资源视图上自定义的),而有一树控件是主框架MainFrame中某一工具栏内的控件。现在导致在树控件上改节点文本时,‘q’键不能用,也就是老执行快捷键的功能,而忽略了在节点上的修改。
各位大虾,不知怎么屏蔽掉这个快捷键,但又要保证如果树控件节点在不修改时又能用这个快捷键,谢谢了

解决方案 »

  1.   

    实际上这个按键到它被翻译为快捷键盘,都是要经过PreTranslateMessage的,你可以在这里做些处理,如果焦点在树控件上时。
      

  2.   

    主要是现在程序不用组合键。现在是在单击一次他的焦点确实在树控件上,但第二次单击改名的时候他的焦点落在了CEdit上。在PreTranslateMessage上它好像优先处理的是快捷键响应函数,发送keydown消息给树控件时,但后来处理的还是快捷键消息。
      

  3.   

    怎么处理PreTranslateMessage。在判断焦点在树控件上或者焦点在CEdit上时,下面应该怎么处理,能给点代码或处理方法吗
      

  4.   

    BOOL CCtrlTree::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) {
    ::TranslateMessage(pMsg);
    ::DispatchMessage(pMsg);
    return TRUE;
    }
    return CTreeCtrl::PreTranslateMessage(pMsg);
    }
    按回车键响应
      

  5.   

    if (pMsg->message == WM_KEYDOWN)
    {
    if (pMsg->wParam == 'p')
    {
    if (GetFocus() == GetDlgItem(IDC_TREE))
    {
    NULL;
    }
    else
    {
    // 快捷键...
    }
    }
    }
      

  6.   

    to piggy312() 
    DispatchMessage派送消息肯定又是被快捷键先接受了。编辑节点文本时焦点在编辑框上,此时主要是如何让这个键盘按键响应的是打字功能,不是快捷键响应to littlepboy(vc小p孩)
    //这个里面应当是屏蔽快捷键,以及在树节点文本上写出这个‘p’,如何处理。
    if (GetFocus() == GetDlgItem(IDC_TREE)) 
    {
    NULL;
    }
      

  7.   


    下面是我以前写的,虽然屏蔽掉了所有快捷键,但数节点编辑框对键盘按键没有显示。哪位能告诉以下怎么发消息或者更改下面的代码,使节点能够编辑BOOL CWorkBartreeCtrl::PreTranslateMessage(MSG* pMsg) 
    {
         if(pMsg->message == WM_KEYDOWN)
         {
    if(GetFocus()!=this)
    {
         HWND hkeyWnd = ::GetFocus();
         ::SendMessage(hkeyWnd,WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
         return TRUE;
    }
         }
         return CTreeCtrl::PreTranslateMessage(pMsg);
    }
      

  8.   

    //////////////////////////
    //这个里面应当是屏蔽快捷键,以及在树节点文本上写出这个‘p’,如何处理。
    if (GetFocus() == GetDlgItem(IDC_TREE)) 
    {
    NULL;
    }
    /////////////////////////
    当然是直接返回基类的PreTranslateMessage了,也就是说使用默认处理。