我首先在 Accelerator\IDR_MAINFRAME 中添加一个快捷键Ctrl+Alt+C并将该快捷键的ID定义为“ID_C”
然后用向导将“ID_C”的command消息响应到CDlg无模式窗口中
但执行程序时,快捷键没有响应。
请问是不是跟响应消息的位置有关系?是否能将该消息直接响应到无模式对话框中?
我做过将消息响应到主窗口,是可以的。
是不是在IDR_MAINFRAME中添加的快捷键,都必须响应到主窗口中?
若想在无模式对话框中响应某快捷键,该怎么办?

解决方案 »

  1.   

    http://blog.csdn.net/lixiaosan/archive/2006/04/11/658248.aspx
      

  2.   

    在对话框里使用加速键:
    HACCEL   m_hAccel;
    m_hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
    重载PreTranslateMessage(MSG* pMsg),在其中加入
    if(m_hAccel)
    if(::TranslateAccelerator(m_hWnd,m_hAccel,pMsg))
    return TRUE;
      

  3.   

    谢谢,问题我已经解决了,重载的Close(),代码如下:
    void CGptUcsRstRecSet::Close() 
    {
    if(m_RST_UCS.m_dwDataLength>0 || m_RST_UCS.m_hData!=NULL)
    {
    HGLOBAL hdata=::GlobalFree(m_RST_UCS.m_hData);
    m_RST_UCS.m_dwDataLength=0;
    m_RST_UCS.m_hData=NULL;
    }
    CRecordset::Close();
    }