在树状视图中双击后焦点丢失



我们在多个位置使用CTreeCtrl(TreeView(,并接受双击以打开与双击节点相关的对话框。

打开的对话框在打开后会失去焦点,因为树状视图似乎会在双击处理结束时强制聚焦。

我们的场景:

  1. 用户双击节点
  2. 树视图获得焦点并在其树中选择一个项目
  3. 包含树状视图的窗口接收树状视图的NM_DBLCLK通知,并通过在MDI环境中打开对话框或MDI子窗口对双击作出反应
  4. 打开的对话框/MDI子窗口在打开后会聚焦
  5. 树视图再次聚焦

即使我们在(3((通知处理程序(中使用返回非零值的结果字段来阻止剩余的默认处理,(5(也会发生,并且树视图再次聚焦,再次选择项目。

我真的很感激任何关于解决这个问题的方法的提示,因为刚打开的对话框或窗口在打开后就会失去焦点,这真的很烦人。

提前感谢!

如果创建模式对话框,则不会发生这种行为,因为父窗口将立即被禁用,对话框将获得焦点。但对于无模式对话框,可能会出现闪烁,并且对话框会失去焦点。

对于无模式对话框,请使用PostMessageSetTimer,以便在处理TreeView消息后打开无模式对话框。示例:

#define WM_USER_MSG1 WM_USER + 1
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_MESSAGE(WM_USER_MSG1, create_dialog)
...
END_MESSAGE_MAP()
void CMyWnd::OnDblClick(NMHDR*, LRESULT* pResult)
{
PostMessage(WM_USER_MSG1, 0, 0);
*pResult = 0;
}
LRESULT CMyWnd::create_dialog(WPARAM, LPARAM)
{
if(!m_dlg.GetSafeHwnd())
m_dlg.Create(IDD_DIALOG_X, this);
m_dlg.ShowWindow(SW_SHOW);
return 0;
}

最新更新