Нужен код для wxListCtrl изменить на рабочий код для виртуального стиля wxListCtrl - PullRequest
0 голосов
/ 27 июня 2019

Я новичок в c ++ и использую для GUI wxWidget. У меня вопрос, как этот код для wxListCtrl изменится на рабочий код для виртуального ListCtrl ...

Теперь мой код ниже и работает, но я должен попробовать виртуальный стиль

wxString SQL = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table + "'";

    int gstate = mysql_query(conn,SQL);
        if(!gstate){
            res = mysql_store_result(conn);
            int num = 0;

            lcData->SetColumnWidth(0,wxLIST_AUTOSIZE_USEHEADER);
            lcData->InsertColumn(0,"rb.");

            while(row = mysql_fetch_row(res)){
                lcData->SetColumnWidth(num+1, wxLIST_AUTOSIZE_USEHEADER);
                lcData->InsertColumn(num+1,row[0]);

                num++;
            }

            if(res != NULL)
                mysql_free_result(res);

        }
    SQL = tcSQL->GetValue();

    tcLog->AppendText(SQL+"\n");
    gstate = mysql_query(conn,SQL);

            if(!gstate){
                res = mysql_store_result(conn);
                long num_field = mysql_num_fields(res);

                   long num = 0;
                lcData->SetColumnWidth(0,40);

                while(row = mysql_fetch_row(res)){

                    lcData->InsertItem(num, wxString::Format(_T("%4d"),num+1));

                    for(long i = 0; i < num_field; i++){

                        lcData->SetItem(num,i+1,row[i] );

                    }

                    num++;
                }

                if(res != NULL)
                    mysql_free_result(res);

Когда я компилирую и запускаю программу, у меня появляется эта ошибка: SharedScreens

Thx. YuMERA

1 Ответ

0 голосов
/ 27 июня 2019

Идея виртуального wxListCtrl состоит в том, что вы не помещаете в него данные, а предоставляете данные по запросу, когда это требуется элементу управления. Таким образом, чтобы использовать виртуальный элемент управления, вам нужно изменить структуру вашего кода и в первую очередь избегать получения всех элементов из базы данных, а вместо этого извлекать их по требованию из переопределенного метода OnGetItemText(). Конечно, чтобы иметь возможность переопределить его, вы должны сначала получить свой собственный класс из wxListCtrl, и вам также нужно указать элементу управления, сколько элементов у него будет (который вы получите из запроса select count(*) ... в ваш случай).

...