如何使焦点保持在同一对话框上的所有列表控件上?

Posted

技术标签:

【中文标题】如何使焦点保持在同一对话框上的所有列表控件上?【英文标题】:How to make focus remain on all list control on same dialog box? 【发布时间】:2010-10-19 10:36:55 【问题描述】:

我在一个对话框上有 3 个列表控件,但只有一个显示焦点。 如果我点击第二个列表控件然后焦点从第一个列表中消失。 意味着一次只有一个列表显示焦点。 如何让焦点保持在同一个对话框的所有列表控件上?

【问题讨论】:

【参考方案1】:

我认为这在技术上是不可能的。 “焦点”是一个只能应用于单个元素的属性。

“焦点”是用户当前正在与之交互的元素。如何期望用户同时与 3 个不同的元素进行交互?

【讨论】:

我正在制作一个列表控件,其中一个元素是颜色,如果用户单击该元素,则其他列表将打开,显示已选择的颜色。有没有办法获得焦点或突出显示每个列表。 @user323422:抱歉,我不明白您遇到的问题。请更详细地解释一下,也许还有一些示例代码?【参考方案2】:

正如布赖恩所说 - 焦点一次只能放在一个控件上。我猜您正在尝试根据第一个列表框更改其他列表控件。一种方法是将变量与每个列表控件相关联,例如 mListCtrl1、mListCtrl2。然后为 NM_CLICK 事件添加一个处理程序,并编写如下代码:

void CTabTestDlg::OnNMClickList3(NMHDR *pNMHDR, LRESULT *pResult)

   LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
   // TODO: Add your control notification handler code here
   *pResult = 0;
   UpdateData(true);
   DWORD dwData = mListCtrl1.GetItemData(pNMItemActivate->iItem);
   int max = mListCtrl2.GetItemCount();
   for (int i=0;i<max;i++)
   
      DWORD dwData2 = mListCtrl2.GetItemData(i);
      if (dwData==dwData2)
      
         mListCtrl2.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED);
         break;
      
   
   UpdateData(false);

请注意,我将控件设置为“始终显示选择”和“单选”

【讨论】:

你正确理解了问题,但我使用的是列表控件。在列表控件中,我使用 SetItemState() 并应用了与您相同的逻辑,但如果我单击列表项,它不会在第二个列表中显示选择。任何线索?

以上是关于如何使焦点保持在同一对话框上的所有列表控件上?的主要内容,如果未能解决你的问题,请参考以下文章

即使焦点在另一个控件上,如何更改列表视图选定的行背景颜色?

VC中如何让列表控件单击不高亮, 双击才高亮, 并且离开列表控件焦点时, 双击的高亮保持不变。

如何在 MFC 中的对话框上阻止鼠标输入

怎样将对话框中一个列表控件中的内容移动到另一个列表控件中?

ListView 在 mfc 中杀死焦点

MFC 中关于Edit控件问题