Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. MFC. Уроки по программированию с сайта http://alexeev.nm.ru

Visual C++. MFC. Урок 20. Класс CComboBox.
Visual C++. MFC. Урок 21. Продолжаем работать с CComboBox.

Visual C++. MFC. Урок 20. Класс CComboBox

На этом уроке мы с вами посмотрим основные свойства и методы класса CComboBox. Разумеется, этот класс представляет из себя обычный ComboBox.

Для того, что бы не путаться с кодом от предыдущих уроков, создайте простое окошко (см. урок 3), и добавьте в него меню MyMenu с подменю Dialog (урок 14). При сохранении дайте ему имя resource.rc:

Меню

После этого подсоедините ClassWizard (урок 17) и создайте диалоговое окно (см. урок 18), и сделайте, чтобы это окно показывалось при вызове меню Dialog. Разместите в нашем диалоге элемент ComboBox:

Диалог

После такой подготовительной работы приступаем непосредственно к ComboBox. Для начала посмотрим, что надо сделать, чтобы при появлении диалогового окна в ComboBox'е уже появился некоторый список. Для этого нам сначала надо проделать некоторые предварительные шаги.

Для того, чтобы работать с любым элементом, в том числе и с ComboBox, мы должны задать ему некоторую переменную. Для этого используется такое средство, как ClassWizard. Вызовите его (Ctrl+W) и перейдите на вкладку Member Variables. Обратите внимание, что в строке с идентификатором нашего ComboBox'а (IDC_COMBO1) ничего нет:

ClassWizard

Нажмите на кнопку Add Variable. В появившемся окне Add Member Variable добавьте имя переменной (у нас это m_cbComboBox) и в категории (Category) установите значение Control:

Добавление переменной

Нажмите OK. Теперь в строке ClassWizard для идентификатора IDC_COMBO1 появится переменная m_cbComboBox типа CComboBox:

ClassWizard

Теперь нам надо написать заготовку для кода, который, который будет выполнятся при инициализации диалога. Для этого опять вызовите ClassWizard (если вы его уже закрыли), перейдите в нем на вкладку MessageMaps, выберите класс CDlg в Class name, в списке Object IDs выберите CDlg, и в списке сообщение выберите WM_INITDIALOG:

Сообщение WM_INITDIALOG

После этого нажмите в этом же диалоговом окне на кнопку Add Function и затем на Edit Code. В появившемся окне кода введите следующий текст:

BOOL CDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // TODO: Add extra initialization here
    m_cbComboBox.AddString("Igor");
    m_cbComboBox.AddString("Otto");
    m_cbComboBox.AddString("Ушку");
    return TRUE;
    ...

Теперь можете запустить приложение, зайти в меню и убедится, что в ComboBox'е есть три значения. Правда ComboBox выглядит не вполне привлекательным:

ComboBox

Исправим это. Для этого откройте редактор диалогов, щелкните на стрелочке в правой части нашего ComboBox'а, и затем потяните мышкой на нижний край появившегося (пустого) списка:

Измененный ComboBox

После этого ваш ComboBox должен быть уже более привычных размеров.

Наверх

Visual C++. MFC. Урок 21. Класс CComboBox

Для начала давайте передадим некоторое значение из нашего ComboBox'а в главное окно программы. Переданное значение появится в заголовке главного окна. Для этого внесите в обработчик меню (того самого, при вызове которого появляется наш диалог) следующие изменения:

void CMyMainWnd::OnMyMenuDialog(){
    CDlg dlg;
    dlg.m_sName=m_sName;
    if(dlg.DoModal()==IDCANCEL) //если нажали на cancel,
        return;                 //то выходим
    m_sName=dlg.m_sName;
    SetWindowText(m_sName);
}

Теперь осталось только добавить в класс CMyMainWnd переменную m_sName типа CString:

public:
 CString m_sName;
    ...

Теперь при запуске программы выбранное нами значение из ComboBox'а будет появляться в заголовке нашего окна:

Окно с заголовком

Рассмотрим теперь операции с элементами ComboBox'а. Основные из них - это добавление в конец списка (AddString, рассмотрена на прошлом уроке), вставки (InsertString), удаления (DeleteString) и нахождения нужной строки (FindString). Их использование ясно из следующего примера:

BOOL CDlg::OnInitDialog()
{
    ...
    m_cbComboBox.AddString("Ушку");
    m_cbComboBox.InsertString(1,"Новая строка");//вставка строки на первое место (нумерация с нуля!)
    m_cbComboBox.DeleteString(0);//удаление строки номер ноль (нумерация с нуля!)
    //ищем строку Victor
    int k=m_cbComboBox.FindString(0, "Victor"); //Если она есть, то ее номер запишется в k
    if(k==CB_ERR)   //Если такой строки нет, то k будет равно CB_ERR
        AfxMessageBox("Сторока не найдена!");
    else{
        CString s;
        s.Format("Строка найдена на %d-м месте.",k);
        AfxMessageBox(s);
    }
    ...
}

Из важных функций стоит ещё, пожалуй, упомянуть ResetContent, которая служит для удаления из ComboBox'а всех его элементов. Пример ее использования:

...
m_cbComboBox.ResetContent();
 ...
Наверх

© Алексеев Игорь, 2001

© Сайт http://alexeev.nm.ru, 2001


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное