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

Я кодирую приложение в 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's 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 Control.

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

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

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

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

Ответы [ 4 ]

24 голосов
/ 25 марта 2010

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

9 голосов
/ 25 марта 2010

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

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

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

2 голосов
/ 23 мая 2011

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

COMBOBOX   IDC_COMBOBOX1,17,35,157,72,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
0 голосов
/ 24 ноября 2014

Я тоже пострадал от этой проблемы и, наконец, нашел решение для своих приложений 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) для более подробной информации. Надеюсь, это поможет.

...