MFC - 列表框

列表框显示用户可以查看和选择的项目列表,例如文件名。 列表框由CListBox 类 表示。 在单选列表框中,用户只能选择一项。 在多选列表框中,可以选择一系列项目。 当用户选择一个项目时,该项目会突出显示,并且列表框会向父窗口发送一条通知消息。

以下是列表框的一些映射条目 −

消息 映射条目 描述
LBN_DBLCLK ON_LBN_DBLCLK( <id>, <memberFxn> ) 双击列表项时框架会调用此成员函数。
LBN_KILLFOCUS ON_LBN_KILLFOCUS( <id>, <memberFxn> ) 框架在失去输入焦点之前立即调用此成员函数。
LBN_SELCHANGE ON_LBN_SELCHANGE( <id>, <memberFxn> ) 当选择更改时,框架调用此成员函数。
LBN_SETFOCUS ON_LBN_SETFOCUS( <id>, <memberFxn> ) 框架在获得输入焦点后调用此成员函数。

让我们通过创建一个新的基于 MFC 对话框的应用程序来研究列表框的简单示例。

步骤 1 − 项目创建后,您将看到 TODO 行,即文本控件的标题。 删除标题并将其 ID 设置为 IDC_STATIC_TXT。

步骤 2 − 从工具箱中拖动列表框。

Listbox1

步骤 3 − 添加文本控件的控件变量。

Listbox2

步骤 4 − 为文本控件添加值变量。

Listbox3

步骤 5 − 添加列表框控件的控件变量。

Listbox4

步骤 6 − 添加列表框控件的事件处理程序。

Listbox5

步骤 7 − 从消息类型中选择 LBN_SELCHANGE 并输入事件处理程序的名称。

步骤 8 − 添加一个函数,该函数将加载列表框。

void CMFCListBoxDlg::LoadListBox() {
   CString str = _T("");
   for (int i = 0; i<10; i++) {

      str.Format(_T("Item %d"), i);
      m_listBox.AddString(str);
   }
}

步骤 9 − 从 CMFCListBoxDlg::OnInitDialog() 调用该函数,如以下代码所示。

BOOL CMFCListBoxDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);       // Set big icon
   SetIcon(m_hIcon, FALSE);      // Set small icon

   // TODO: Add extra initialization here
   LoadListBox();
   return TRUE; // return TRUE unless you set the focus to a control
}

步骤 10 − 这是事件处理程序的实现。 这将显示列表框中当前选定的项目。

void CMFCListBoxDlg::OnLbnSelchangeList1() {
   // TODO: Add your control notification handler code here
   m_listBox.GetText(m_listBox.GetCurSel(),m_strItemSelected);
   UpdateData(FALSE);
}

步骤 11 − 当上面的代码被编译并执行时,您将看到以下输出。

Listbox6

步骤 12 − 当您选择任何项目时,它将显示在文本控件上。

❮ mfc_windows_controls.html