0

在我的应用程序中,我有一个标准的 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 方法。

4

2 回答 2

1

谢谢帕特里西!

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() ;
}
于 2013-02-19T13:58:56.610 回答
0

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

于 2013-02-18T12:30:14.860 回答