一个基于对话框的程序
//CMyDlg.h
HACCEL  m_hAccelTable;//CMyDlg.hCMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(ACCELERATOR));
}BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
{
if (TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) 
return TRUE;

return CDialog::PreTranslateMessage(pMsg);
}对话框启动后,快捷键都无效,
当点击对话框上一个button后,
快捷键又能正常工作。对话框上有个tabctrl,
可能初始的键盘输入焦点有问题,
请问如何解决。

解决方案 »

  1.   

    在对话框的OnInitDialog里
    this->GetFocus();
    试试
      

  2.   

    是哪些快捷键?可以把DoModal改成Create、ShowWindow,然后自己写消息循环,把TranslateAccelerator写到消息循环里面,GetMessage之后。
      

  3.   


    我试了这个方法,不行。但是如果设置定时器,每隔一段时间就SetFocus是可以的,
    这样做也有缺点,
    用户在tabctrl的输入会被打断。请问当输入焦点在tabctrl的时,如何响应快捷键?