各位高人:
    我用CTreeView类定义了一个类似于windows 资源管理器的视图;我要实现对该CXXXTreeView每个节点进行鼠标右键的相关操作(如复制、删除、重命名);现在功能基本实现了:如下:
     我的主要代码是这样的:定一个以CXXXTreeView类的对象:m_pTreeView;
右键弹出菜单的 重命名 对应的处理函数中:
         HTREEITEM hSelectedNode;
hSelectedNode = m_pCtrl->GetSelectedItem();
         m_pTreeView->EditLabel(hSelectedNode);
另外添加两个消息:OnBeginlabeledit(...) OnEndlabeledit(...)
分别用来设置数据的长度和保存节点数据。但是,重命名 异常操作时(先按F2键,使光标处于重新编辑状态时,按鼠标右键,)系统出现了一个异常:Debug Assertion Failed! ....同时有三个按钮: 终止、重试、忽略 
   我按重试 或则忽略,系统还可以运行!在次 跟踪进去后,发现:在函数OnEndlabeledit 后出现了该异常!请问如何解决这个bug???另外,如何屏蔽F2快捷键的功能?

解决方案 »

  1.   

    在程序资源里,从Accelerator中删除F2的快捷键。
      

  2.   

    重载WindowProc这个虚函数,当message==WM_KEYDOWN&&lParameter==VK_F2的时候返回NULL。
      

  3.   

    重载WindowProc这个虚函数,当message==WM_KEYDOWN&&lParameter==VK_F2的时候返回NULL
    我试了,好象不行啊!!!请高人出出主意嘛!
      

  4.   

    你把OnBeginlabeledit()和OnEndlableedit()贴出来看看吧,应该是在这两个函数中有问题。另外这个F2的快捷键是什么,我的TreeView不认。
      

  5.   

    F2的快捷键是微软默认的(修改节点名字,如:windows 资源管理器)的快捷键啊!
      

  6.   

    如果是微软默认的,那应该处理这类消息:
    WM_SYSXXXXXX,比如WM_SYSCHAR, WM_SYSKEYDOWN, WM_SYSCOMMAND等等,你自己试试
      

  7.   

    PreTranslateMessage(MSG* pMsg) 
    使用上边的这个函数可以截获任何键盘输入,他在转发到解释键盘吗和鼠标状态,
    然后再加以处理就行了
    直接到这个函数中处理就行了
    我的处理过程
    switch(pMsg->message) {
    case WM_KEYDOWN:
    if( m_bJidDigit)
    {
    if(((pMsg->wParam) >= 48 && (pMsg->wParam) <= 57)||((pMsg->wParam) <= 57)||((pMsg->wParam) >= 96 && (pMsg->wParam) <= 105))
    return FALSE;
    else
    return TRUE;
    }
    if(pMsg->wParam == VK_RETURN)
    {
    Login();
    return TRUE;
    }
    break;
    }
      

  8.   

    我的重命名的就没有你说的问题,跟我联系,我给你个例子?:)
    [email protected]