用于模态对话框的WM_KILLFOCUS不起作用

时间:2013-02-18 10:51:48

标签: mfc

在我的应用程序中,我有一个标准的MFC模式对话框。当用户在对话框窗口外单击时,我想关闭该对话框。为此,我将ON_MESSAGE(WM_KILLFOCUS, OnKillFocus)放在对话框的消息映射中(类向导不提供该选项):

BEGIN_MESSAGE_MAP(CTestTreeCtrlDlg, CDialog)
//{{AFX_MSG_MAP(CTestTreeCtrlDlg)
   ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree)
//}}AFX_MSG_MAP
   ON_MESSAGE(WM_KILLFOCUS, OnKillFocus)
END_MESSAGE_MAP()
...
void CTestTreeCtrlDlg::OnKillFocus() 
{
  ...
}

现在,如果我在对话框外单击,后者当然会失去焦点,但OnKillFocus方法不会因某种原因被调用。

2 个答案:

答案 0 :(得分:1)

谢谢patriiice!

WM_ACTIVATE完成工作:

BEGIN_MESSAGE_MAP(CTestTreeCtrlDlg, CDialog)
//{{AFX_MSG_MAP(CTestTreeCtrlDlg)
  ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree)
//}}AFX_MSG_MAP
  ON_WM_ACTIVATE()
END_MESSAGE_MAP()
...
void CTestTreeCtrlDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
  CDialog::OnActivate(nState, pWndOther, bMinimized);

  if (nState == WA_INACTIVE)
    OnOK() ;
}

答案 1 :(得分:0)

快速搜索 - > http://www.itlisting.org/5-windows/964b01901673b4b0.aspx 我很确定这是一种更好的方法。