Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Extended Combo Box в ReBar, Инициализация элемента 
V
    Опции темы
AndrRus
Дата 4.4.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Решил добавить на Rebar - Extended Combo Box, когда создавал в диалоговом окне, то все нормально было, пользовательскую функцию для загрузки иконок и список имен вызывал в OnInitDialog () - и все работало прекрасно. Стоило мне попробовать сделать все тоже самое, но только на Rebar панели, программа ругается (не компилятор). Где бы не пытался вызвать функцию в методах класса View - везде одна и таже проблема.

Вот собственно код:
Код

...
// Таким образом стучусь к элементу управления.
CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd ();      
CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_wndReBar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);
...
COMBOBOXEXITEM cbi;
cbi.mask = CBEIF_IMAGE | CBEIF_TEXT | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE;
for (i = 0; i < 8; i++) {
        cbi.iItem = i;
        cbi.pszText = color[i];
        cbi.iImage = i; 
        cbi.iSelectedImage = i;
        cbi.iOverlay = i;
        int ListItem = pCombo->InsertItem (&cbi);           // При пробеге "дебагером" ругается на этой строчке
        ASSERT (ListItem == i);
}


Помогите разобраться с проблемой.
PM MAIL ICQ   Вверх
korian
Дата 4.4.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



я так понимаю  m_wndReBar это CReBar
CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_wndReBar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);
ASSERT(pCombo != NULL);//!!!!!!!!
комбо бокс находится не на ребаре, а на чилд диалоге

PM   Вверх
AndrRus
Дата 4.4.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(korian @  4.4.2008,  21:37 Найти цитируемый пост)
я так понимаю  m_wndReBar это CReBar

Да, именно так.

Код

ASSERT (pCombo != NULL);

Проблему это все равно не решило... 

Вот код всей функции:
Код

    m_imageList.Create (32, 16, ILC_MASK, 12, 4); //    CImageList m_imageList - объявлена в классе View;
    CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd ();
    CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_wndReBar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);

    pCombo->SetImageList(&m_imageList);   // сдесь ругается "дебагер"

    COMBOBOXEXITEM cbi;

    HICON hIcon[8];

    hIcon[0] = AfxGetApp()->LoadIcon(IDI_WHITE);
    hIcon[1] = AfxGetApp()->LoadIcon(IDI_BLACK);
    hIcon[2] = AfxGetApp()->LoadIcon(IDI_RED);
    hIcon[3] = AfxGetApp()->LoadIcon(IDI_BLUE);
    hIcon[4] = AfxGetApp()->LoadIcon(IDI_YELLOW);
    hIcon[5] = AfxGetApp()->LoadIcon(IDI_CYAN);
    hIcon[6] = AfxGetApp()->LoadIcon(IDI_PURPLE);
    hIcon[7] = AfxGetApp()->LoadIcon(IDI_GREEN);
    for (int i = 0; i < 8; i++) {
        m_imageList.Add(hIcon[i]);
    }

    static char* color[] = {"white", "black", "red", "blue", "yellow", "cyan", "purple", "green"};

    cbi.mask = CBEIF_IMAGE | CBEIF_TEXT | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE;

    for (int i = 0; i < 8; i++) {
        cbi.iItem = i;
        cbi.pszText = color[i];
        cbi.iImage = i; 
        cbi.iSelectedImage = i;
        cbi.iOverlay = i;
        int ListItem = pCombo->InsertItem(&cbi); // если закоментировать предыдущую проблему, то ругаться будет сдесь...
        ASSERT(ListItem == i);
    }

PM MAIL ICQ   Вверх
korian
Дата 5.4.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



основная мысль была тут:
Цитата(korian @  4.4.2008,  20:37 Найти цитируемый пост)
комбо бокс находится не на ребаре, а на чилд диалоге


ASSERT (pCombo != NULL); - это я хотел показать, что pCombo у вас равен нулю. Если pCombo не равен нулю, то это достаточно странно.

не знаю как вы добавляете бары на ребар...
поидее у вас в MainFrame должна быть переменная, которая является объектом подкласса CDialog.
это переменную, вы указываете, когда используете m_wndRebar.AddBar(&m_bar);
может конечно вы добавляете туда ребары так: m_wndRebar.AddBar(new SomeClass);
что вообщем-то зря, т.к. как это потом удалить...
короче, проблема тут:
CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_wndReBar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);
CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_bar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);


Это сообщение отредактировал(а) korian - 5.4.2008, 00:05
PM   Вверх
AndrRus
Дата 5.4.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 14.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



korian
Код

CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_wndReBar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);
CComboBoxEx* pCombo = (CComboBoxEx*) pFrame->m_bar.GetDlgItem (IDC_COMBOBOXEX2_COLOR);

Решение проблемы оказалось куда более простым, чем я думал smile ! Спасибо! В миг решились все проблемы smile !
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1043 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.