列表框未正确填充
listbox not populating correctly
这是我在这里的第一篇文章,我正在尝试学习在代码块 32 中编写 win12.11 GUI,但问题是,
我在对话框窗口(IDC_LISTP>个人项目笔记)和(IDC_LISTS>共享项目笔记)上有 2 个列表框,
(个人项目笔记)在创建的对话框中自动填充,我也可以从正确的文件夹(更新共享)填充(共享项目笔记)。
当我单击(更新个人)后单击按钮(更新个人)时出现问题,它将(共享项目注释)的内容加载到(个人项目注释)列表框中,即使也使用清除按钮,单击(更新个人)按钮时,这仍然会填充(个人项目注释),
我该如何阻止这种情况发生???
请有人帮我解决这个问题,我已经把头撞在墙上好几天了,
这是我目前正在试验的代码,请原谅混乱的代码,因为其中大部分来自我已经转换为适合我的 GUI 的示例。
其他帖子也 http://forums.codeguru.com/showthread.php?540733-win32-listbox-not-populating-right 附有图片
BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
switch(Message){
case WM_INITDIALOG:
CheckRadioButton(HWND (hwnd),IDRADIO, IDRADIO2, IDRADIO);
{
DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), pbuffer, IDC_LISTP, 0, DDL_EXCLUSIVE);
HWND hListBox = GetDlgItem(hwnd, IDC_LISTP);
SendMessage(hListBox, LB_DIR, 0, (LPARAM)("*.txt*"));
}
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case ID_UPDATEP:{
SendDlgItemMessage(HWND(hwnd), IDC_LISTP, LB_RESETCONTENT, 0, 0);
DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), pbuffer, IDC_LISTP, 0, DDL_EXCLUSIVE);
HWND hListBox = GetDlgItem(hwnd, IDC_LISTP);
SendMessage(hListBox, LB_DIR, 0, (LPARAM)("*.txt"));
}
break;
case ID_UPDATES:{
SendDlgItemMessage(HWND(hwnd), IDC_LISTS, LB_RESETCONTENT, 0, 0);
DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), sbuffer, IDC_LISTS, 0, DDL_EXCLUSIVE);
HWND hList = GetDlgItem(hwnd, IDC_LISTS);
SendMessage(hList, LB_DIR, 0, (LPARAM)("*.txt"));
}
break;
case IDCLEAR:
SendDlgItemMessage(HWND(hwnd), IDC_LISTP, LB_RESETCONTENT, 0, 0);
SendDlgItemMessage(HWND(hwnd), IDC_LISTS, LB_RESETCONTENT, 0, 0);
break;
case IDCREATE:{
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDPAD), NULL, DlgProc);
}
break;
case IDOK:
EndDialog(hwnd, IDOK);
break;
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd, 0);
break;
default:
return FALSE;
}
return TRUE;
}
您的代码有几个问题,请查看 MSDN Docs for DlgDirList():
a) 要DlgDirList()
的第一个参数必须是handle to the dialog box that contains the list box
;代码中没有错误检查,我怀疑对DlgDirList()
的调用失败并出现错误
b) 文档说DlgDirList sends the LB_RESETCONTENT and LB_DIR messages to the list box
所以你需要做的就是
int nResult;
nResult = DlgDirList(hwnd, pbuffer, IDC_LISTP, 0, 0);
TRACE("Filling P (ID %d) from %s: result = %dn", IDC_LISTP, pbuffer, nResult);
nResult = DlgDirList(hwnd, sbuffer, IDC_LISTS, 0, 0);
TRACE("Filling S (ID %d) from %s: result = %dn", IDC_LISTS, sbuffer, nResult);
确保pbuffer
和sbuffer
都包含一个路径和一个通配符字符串,如"C:\personal\*.txt"和"C:\shared\*.txt"。
此链接包含如何使用DlgDirList
的示例。
- 通过for循环使用用户输入填充列表
- C++ 双向链表:使用矩阵类成员创建和填充列表
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 动态填充的组合框不显示文本,列表未定义
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 使用生成来填充模板类 c++ 中的列表
- 用非基元填充 CapnProto 列表
- 使用.txt文件填充 STL 列表不起作用
- 如何使用 c++ 模型填充播放列表 qml 类型
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 使用C /Winrt,带有设备的填充列表框,显示其名称
- 从初始值设定项列表中填充boost::multi_array的最佳方法是什么
- C++填充指向指针**列表的指针,该列表指向指针地址
- 在成员初始化列表中填充 std::array
- 填充列表<>使用数组获取错误的数字
- 无法使用sqlite3数据库表的所有行中的数据填充列表,错误:跟踪/断点陷阱(核心转储)
- 如何用所有正在运行的应用程序填充列表框
- 使用发送消息填充列表框获取垃圾
- 用指针填充列表 - c++
- 用“std::multimap”的排序内容填充列表控件