建了一基于对话框的工程,一非模态子对话框中有一list control和一按钮,当选中列表中某一行时,已经实现点击按钮可以把其删除,现在想选中某一行时,按“Delete”键将其删掉。
我的做法是
1.添加Accelerator,键选择“VK_DELETE”,ID为“ID_ACCELERATORDELETE”
2.Dialog2.h中添加public型的HACCEL m_hAccel;    //定义快捷对象
3.初始化中添加 m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1)); 
4.PreTranslateMessage()中添加 if(m_hAccel   !=   NULL)   
{   
if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))   
return   TRUE;    
}  
5.OnCommand()中添加
switch(LOWORD(wParam))   

case  ID_ACCELERATORDELETE: //加速键ID   
OnBnClickedButton1();
break; 
}
运行可以实现按“Delete”实现删除的效果,但是程序关闭后出现 “
TODO:<文件说明>遇到问题需要关闭。我们对此引起的不便表示抱歉。”。试过此时用按钮删除也不出现该消息框。所以肯定是快捷键的处理处了问题了。请教问题出在哪了?

解决方案 »

  1.   

    1.首先,del键在虚拟键表中的名字是这样的:VK_DECIMAL
    不是VK_DELETE;2.3.没有错误;4.消息这样子加入:
    BOOL CMfcDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(m_hAccel != NULL)   
    {   
    if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))   
    {
    OnBnClickedButton1();//加在这里;
    return TRUE; 
    }
    }   
    return CDialog::PreTranslateMessage(pMsg);
    }5.无用,这样就可以了;
      

  2.   

    修正一下:
    1.是对的;此致十二万分的sorry.
      

  3.   

    你说的跟我的做法没区别啊,况且要有多个快捷键的话就不能按你那样写了。
    照你说的试了,跟我的效果一样,关闭程序后弹出消息框“TODO:<文件说明>遇到问题需要关闭。我们对此引起的不便表示抱歉”
      

  4.   

    气人啊,清理了一下解决方案,重新生成解决方案就行了,用的VS2008,是VS2008的问题。早点试一下重新编译就不用给分了。便宜你了,分都给你了。