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

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

【问题讨论】:

    标签: mfc


    【解决方案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() 并应用了与您相同的逻辑,但如果我单击列表项,它不会在第二个列表中显示选择。任何线索?
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多