自定义列表框项目排序和移动功能实现

在开发MFC应用程序时,经常会遇到需要对列表框中的项目进行排序和移动的需求。虽然这种对话框很常见,但遗憾的是,在网上并没有找到现成的解决方案,因此决定自己创建一个。

在之前的文章“移动列表框项目上下”中,介绍了如何在第二个列表框中排序项目。

项目配置

a) 将以下文件添加到项目中:

  • MovListBoxItem.h & .cpp
  • ListBoxMoveItem.h & .cpp
  • WndResizer_2.h & .cpp
  • Function_1D.h & .cpp

b) 在“属性/链接/输入”中:在“附加依赖项”中添加'UxTheme.lib'(在调试和发布版本中)。

c) 在项目中创建一个对话框,包含以下数据:

C++ IDD_DIALOG1 DIALOGEX 0, 0, 301, 277 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Move ListBox Items and sort" FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN LISTBOX IDC_LIST1, 7, 23, 115, 223, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP LISTBOX IDC_LIST2, 159, 23, 115, 223, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON ">", IDC_BUTTON1, 128, 99, 25, 14 PUSHBUTTON "<", IDC_BUTTON2, 128, 115, 25, 14 PUSHBUTTON ">>", IDC_BUTTON3, 128, 139, 25, 14 PUSHBUTTON "<<", IDC_BUTTON4, 128, 155, 25, 14 LTEXT "Available", IDC_STATIC_AVAILABLE, 7, 13, 33, 8 LTEXT "Selected", IDC_STATIC_SELECTED, 158, 13, 38, 8 LTEXT "(x/n)", IDC_STATIC_NBDISPO, 49, 13, 33, 8 DEFPUSHBUTTON "OK", IDOK, 158, 253, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 224, 253, 50, 14 LTEXT "(x/n)", IDC_STATIC_NB_SEL, 201, 13, 33, 8 PUSHBUTTON "^", IDC_BUTTON20, 278, 112, 18, 19 PUSHBUTTON "v", IDC_BUTTON21, 278, 136, 18, 19 END

d) 添加变量:

  • 控件 CListBox IDC_LIST1: m_cListBox_Dispo
  • 控件 CListBox IDC_LIST2: m_cListBox_Selection
  • 值 Static IDC_STATIC_NBDISPO: m_vNbDispo
  • 值 Static IDC_STATIC_NB_SEL: m_vNbSel

e) 在代码中包含:

#include "MovListBoxItem.h" #include "ListBoxMoveItem.h"

使用代码

需要在对话框中传递两个变量:

  • 一个用于完整的项目列表:一个 CString,其中每个项目用逗号分隔。
  • 一个用于已经选择(并排序)的项目,之前保存的(例如作为设置数据)。
UpdateData(TRUE); // TRUE:获取变量中的值 CListBoxMoveItem dialog(this, m_vCompleteList, m_vChoosenList); if (dialog.DoModal() == IDOK) { m_vChoosenList = dialog.Get_ListColSelection(); } delete dialog; UpdateData(FALSE); // FALSE:更新控件

注意事项

演示包括 Mizan Rahman 的 WndResizer 的修改版本MFC/C++Helper Class for Window Resizing(原始版本也可以使用,修改是为了隐藏/显示控件)。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485