列表框没有正确填充

时间:2013-11-02 22:44:43

标签: c++ winapi listbox

这是我在这里的第一篇帖子,我正在尝试学习在代码块12.11中编写win32 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;
        }

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,请查看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 = %d\n", IDC_LISTP, pbuffer, nResult);
nResult = DlgDirList(hwnd, sbuffer, IDC_LISTS, 0, 0);
TRACE("Filling S (ID %d) from %s: result = %d\n", IDC_LISTS, sbuffer, nResult);

确保pbuffersbuffer都包含路径和通配符字符串,例如“C:\ personal \ * .txt”和“C:\ shared \ * .txt”。

This link包含如何使用DlgDirList的示例。