0

这是我在这里的第一篇文章,我正在尝试学习在代码块 12.11 中编写一个 win32 GUI,但这是问题所在,

我在对话框窗口(IDC_LISTP > Personal Project Notes)和(IDC_LISTS > Shared Project Notes)上有 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;
        }
4

1 回答 1

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);

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

此链接包含如何使用的示例DlgDirList

于 2013-11-03T08:16:19.960 回答