我建了一个应用程序是基于Dialog的,在Dialog上放了一个CTreeCtrl控件,并重载了这个CTreeCtrl类,改为CTreeCtrlRoster,但却发现这个CTreeCtrl无法响应菜单消息,原码如下:
//其中OnDelFriend是一个右键菜单的响应函数
void CTreeCtrlRoster::OnDelFriend() 
{
AfxMessageBox( "dd" );//不会响应
}
实在没有办法,我在其父对话框中的PreTranslateMessage函数中进行了预处理如下:
BOOL CJabberDlg::PreTranslateMessage(MSG* pMsg) 
{
    if ( WM_COMMAND == pMsg->message 
         && (WORD)ID_DEL_FRIEND == LOWORD( pMsg->wParam ) 
         && (WORD)0 == HIWORD( pMsg->wParam ) )
    {
         //由于树控件不响应右键菜单消息,在主窗口中对其进行转发
m_TreeRoster.SendMessage( pMsg->message, pMsg->wParam, 
                                     pMsg->lParam );
    }    return CDialog::PreTranslateMessage(pMsg);
}
经过在主窗口的PreTranslateMessage函数中进行预处理后,一切正常,但却认为这样做太麻烦了,如果还有其它菜单,企不是都要这样处理,各位还有没有更好的招式?