MFC Combo-Box Control не отображает полный список элементов, когда я нажимаю раскрывающееся меню

Я кодирую приложение в MSVS 2008, у которого есть элемент управления ComboBox, который я инициализирую через следующий код:

static char*                    OptionString[4] = {"Opt1",
                                                   "Opt2",
                                                   "Opt3",
                                                   "Opt4"};


BOOL CMyAppDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon

    // TODO: Add extra initialization here

    m_Option.AddString(OptionString[0]);
    m_Option.AddString(OptionString[1]);
    m_Option.AddString(OptionString[2]);
    m_Option.AddString(OptionString[3]);
    m_Option.SetCurSel(0);

    return TRUE;  // return TRUE  unless you set the focus to a control
}

В приведенном выше коде m_Option - это переменная Control для управления ComboBox.

Теперь, когда я создаю приложение и нажимаю стрелку вниз, раскрывающееся поле показывает ТОЛЬКО первый вариант (так как я выбрал это через мой код). Но, если я нажимаю клавишу со стрелкой вниз на клавиатуре, она циклически проходит через параметры в том порядке, в который я вставил, но никогда не показывает более одного параметра в поле. Итак, в случае, если пользователь хочет выбрать опцию3, он должен перебирать варианты 1 и 2! Хотя, как только я выбираю любую опцию с помощью клавиатуры, соответствующие обработчики событий увольняются, меня это раздражает, как это понятно.

Я также перечисляю свойства управления combo-box - только истинные свойства (для остальных установлено значение false):

  • Тип - раскрывающийся список
  • Вертикальная панель прокрутки
  • Видимый Tabstop

Это беспокоило меня уже несколько недель. Может ли кто-нибудь просветить меня?

Ответ 1

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

Ответ 2

Вам нужно увеличить высоту выпадающего списка в конструкторе.

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

Надеюсь, вы поняли мою мысль.

Ответ 3

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

COMBOBOX   IDC_COMBOBOX1,17,35,157,72,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP

Ответ 4

Я также пострадал от этой проблемы, и, наконец, я нашел решение для своих приложений MFC. Проблема в том, что я не применял манифест версии 6 к моим приложениям. Чтобы решить эту проблему, я добавил код, чтобы отметить манифест следующим образом:

ifdef _UNICODE
if defined _M_IX86
pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
elif defined _M_X64
pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
else
pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
endif
endif

Это сработало. Вы можете обратиться к ссылке [здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx) для более подробной информации. Надеюсь, что это поможет.