Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2018, 15:46   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию пустой ComboBox

Код:
		case WM_CREATE:{
            Colors = (COLORREF*)malloc(sizeof(COLORREF) * ColorsCount);
            Colors[0] = 0;
            Colors[1] = RGB(255,0,0);
            Colors[2] = RGB(0,255,0);
            Colors[3] = RGB(0,0,255);
            Colors[4] = RGB(0,255,255);
            Colors[5] = RGB(255,0,255);
            Colors[6] = RGB(255,255,0);
            Colors[7] = RGB(255,255,255);

            cbbColors = CreateWindow("ComboBox", "", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                          300, 4, 100, 200, wnd, 0, MyInstance, NULL);

            for (int i; i < ColorsCount; i++){
                CHAR t[20];
                sprintf(t, "%d", (unsigned int)Colors[i]);
                SendMessage(cbbColors, CB_ADDSTRING, 0, LPARAM(&t));
            }
            SendMessage(cbbColors, CB_SETCURSEL, 0, 0);
		}

        case WM_COMMAND:{
            if ((HWND)lParam == cbbColors){
                switch (HIWORD(wParam)){
                    case CBN_SELCHANGE:{
//                        for (unsigned int i = 1; i < 9; i++)
                        MessageBox(0,"ok",NULL,0);
                        return 0;
                    }
                }

                return 0;
            }
Всё работает.
Но если раскомментировать цикл for, то при запуске программы, комбобокс оказывается пуст.
почему?
BLACK_RAIN вне форума Ответить с цитированием
Старый 15.12.2018, 18:48   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

LPARAM(&t) заменить на LPARAM(t)
waleri вне форума Ответить с цитированием
Старый 15.12.2018, 19:35   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
LPARAM(&t) заменить на LPARAM(t)
Не помогает
BLACK_RAIN вне форума Ответить с цитированием
Старый 16.12.2018, 08:13   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Если создать еще один комбобокс и принимать сообщения от него, то он работает.
Код:
            if ((HWND)lParam == cbbTools){
                switch (HIWORD(wParam)){
                    case CBN_SELCHANGE:{
                        for (int i = 0; i < 9; i++)
                        MessageBox(0,"ok",NULL,0);
                        return 0;
                    }
                }
                return 0;
            };




            cbbColors = CreateWindow("ComboBox", "pppppp", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                          300, 4, 100, 200, wnd, 0, MyInstance, NULL);

            for (int i; i < ColorsCount; i++){
                CHAR t[20] = "nhhhhhh";
                SendMessage(cbbColors, CB_ADDSTRING, 0, LPARAM(t));
            }
            SendMessage(cbbColors, CB_SETCURSEL, 0, 0);

            cbbTools = CreateWindow("ComboBox", "hj", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                          600, 4, 100, 200, wnd, 0, MyInstance, NULL);
            for (int i = 0; i < 2; i++)
            SendMessage(cbbTools, CB_ADDSTRING, 0, LPARAM(TOOLTYPENAMES[i].c_str()));
            SendMessage(cbbTools, CB_SETCURSEL, 0, 0);
А почему cbbColors пустой?
BLACK_RAIN вне форума Ответить с цитированием
Старый 16.12.2018, 13:11   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Заработало.
Надо было (LPARAM)t, вместо LPARAM(t). Даже профессионалы не догадались.
Если правильно понимаю, второй вариант в С вообще работать не должен. Я по привычке от delphi так написал. Но почему-то работает?
И почему добавление цикла for в обработчик приводит к уничтожению содержимого в комбобоксе? И не всех, а именно одного. Ведь этот цикл даже не выполняется.
И вот это:
Код:
            for (int i; i < ColorsCount; i++){
неправильно вставилось в форум. На самом деле должно быть (и было) так: for (int i = 0; i < ColorsCount; i++){
но не суть

Последний раз редактировалось BLACK_RAIN; 16.12.2018 в 13:53.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустой массив. Predator199 PHP 1 13.10.2012 19:53
Открывается пустой лист, но не пустой, а смещенный вверх romamania Microsoft Office Excel 3 31.05.2012 15:28
Webbrowser и combobox: сделать чтобы в combobox-е оставалась история посещенных сайтов uasya2 Общие вопросы Delphi 6 06.03.2011 20:24
Пустой Combobox flyinsky БД в Delphi 2 08.12.2010 13:16
Не могу внести строку из combobox в combobox!? tacer Помощь студентам 1 30.11.2007 19:45