список не заполняется правильно

0

Это мое первое сообщение здесь, я пытаюсь научиться программировать GUI win32 в блоках кода 12.11, но вот проблема,

У меня есть 2x окна списка в окне диалогового окна (IDC_LISTP> Personal Project Notes) и (IDC_LISTS> Общие проектные заметки),

В диалоговом окне автоматически создаются (личные заметки проекта), я также могу получить (общие заметки проекта) для заполнения из правильной папки (обновление общего).

Проблема возникает, когда я нажимаю кнопку (обновлять личную) после щелчка (обновление общего), оно загружает содержимое (общие заметки проекта) в окно списка личных проектов, даже после использования кнопки очистки тоже, это все еще заполняет (личные заметки проекта) при нажатии кнопки (обновить личную)

как я могу отказаться от этого?

пожалуйста, кто-то может помочь мне решить эту проблему, я уже несколько дней стуча головой о стену,

Это код, с которым я в настоящее время экспериментировал, пожалуйста, извините грязный код, так как большая часть его из примеров, которые я преобразовал в соответствии с моим графическим интерфейсом.

дополнительные сообщения 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;
        }
Теги:
winapi
listbox

1 ответ

0

В коде есть несколько ошибок, посмотрите документы MSDN для DlgDirList():

a) Первым параметром для DlgDirList() должен быть handle to the dialog box that contains the list box; в коде отсутствует проверка ошибок, я подозреваю, что вызов DlgDirList() завершается с ошибкой

б) документы говорят, что 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);

Убедитесь в том, что pbuffer и sbuffer каждый из которых содержит путь и подстановочные-строку, например "C:.\Персональный\*.txt" и "C:\Shared\*.txt.".

Эта ссылка содержит пример использования DlgDirList.

  • 0
    Спасибо за ответ, друг, я изменил свой код, как вы советовали, такая же проблема возникает у вас, после нажатия (кнопка обновления общего доступа), а затем нажатия кнопки (обновить личную кнопку), личный список заполняется общим списком. это pbuffer и sbuffer, [code] char pbuffer [MAX_PATH] = "C: \\ Users \\ uncboog \\ Documents \\ Nexum Core \\ Project Notepad \\ User \ *. txt"; char sbuffer [MAX_PATH] = "C: \\ Users \\ uncboog \\ Documents \\ Nexum Core \\ Project Notepad \\ Shared \ *. txt"; [/ code] где я ошибаюсь ???, и были я бы включил сообщение об ошибке в коде, еще раз спасибо :)
  • 0
    мой оригинальный пост в виде ссылки на другой пост, сделанный мной с фотографиями, чтобы показать выход форумы forum.codeguru.com/…
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню