主窗口上放置Tab control控件,Tab control控件里有三个dialog子窗口,dialog子窗口上有一些按钮。现在要实现按键的快速键,发现快速键没响应。在主窗口里dialog子窗口是这样初始化的        TRACE("Tabcombox init\n");
m_TabContainer.InsertItem(0, _T("Siemens"));
m_TabContainer.InsertItem(1, _T("Mitsubishi"));
m_TabContainer.InsertItem(2, _T("Panasonic")); m_DiaSiemens.Create(IDD_DIALOG_Siemens, GetDlgItem(IDC_TAB_Container));
m_DiaMitsubishi.Create(IDD_DIALOG_Mitsubishi, GetDlgItem(IDC_TAB_Container));
m_DiaPanasonic.Create(IDD_DIALOG_Panasonic, GetDlgItem(IDC_TAB_Container));
在主窗口里使用在captionj里加&A实现的方式就会响应。
谢谢帮忙!

解决方案 »

  1.   

    就是在实现atl+‘单字母’的组合。我发现要tab control获得焦点时,这样的组合键才有效。要是这样的话怎么样让tab control控件获得焦点(不要鼠标点tab control控件上的按钮之类的)。还有那个快捷键仅限于菜单之类的吗?
      

  2.   

    父窗口类的PreTranslateMessage里自己处理按键组合不行吗?
      

  3.   


    BOOL CSerial_newDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: Add your specialized code here and/or call the base class
    if(//pMsg->hwnd==this->GetSafeHwnd() && 
    pMsg->message==WM_KEYDOWN && pMsg->wParam=='C' &&
    (GetKeyState(VK_CONTROL) & 0x8000))
            { 
    AfxMessageBox(_T("截到了Ctrl+C键"));
    ::SendMessage(pMsg->hwnd, WM_COMMAND, IDC_BUTTON_SClearAll,0);
    //return TRUE;
            } return CDialog::PreTranslateMessage(pMsg);
    }谢谢VisualEleven的提示,不过::SendMessage(GetDlgItem(IDD_DIALOG_Siemens)->GetSafeHwnd(), WM_COMMAND, IDC_BUTTON_SClearAll,0);这个消息不能被那个子窗口里的按钮接收并响应单击命令。
      

  4.   

    解决了,只是要多写些代码 if(//pMsg->hwnd==this->GetSafeHwnd() && 
    pMsg->message==WM_KEYDOWN && pMsg->wParam=='C' &&
    (GetKeyState(VK_CONTROL) & 0x8000))
            {
    AfxMessageBox(_T("截到了Ctrl+C键"));
    ::SendMessage(m_DiaSiemens.GetSafeHwnd(), WM_COMMAND, IDC_BUTTON_SClearAll,0);
    return TRUE;
            }用加速键表ACCELERATOR,是否能实现组合键呢?要怎么实现。