2010-03-25 11 views
11

Estoy codificando una aplicación en MSVS 2008, que tiene un control ComboBox que inicializo con el código siguiente:Combo-Box Control MFC no muestra la lista completa de elementos cuando hago clic en el menú desplegable

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 
} 

En el código anterior, m_Option es la variable de control para ComboBox Control.

Ahora, cuando construyo la aplicación y hago clic en la flecha hacia abajo, el cuadro desplegable muestra SOLAMENTE la primera opción (ya que he seleccionado eso a través de mi código). Pero, si presiono la tecla de flecha hacia abajo en el teclado, este se desplaza por las opciones en el orden que inserté, pero nunca muestra más de 1 opción en el cuadro. Entonces, en caso de que un usuario quiera seleccionar la opción 3, ¡tiene que pasar por las opciones 1 y 2! Aunque una vez que selecciono cualquier opción usando el teclado, los controladores de eventos apropiados son despedidos, me molesta este comportamiento, como es comprensible.

estoy enumerando las propiedades del control de cuadro combinado, así - sólo las propiedades que son verdaderas (resto se establece en false):

  1. Tipo - desplegable
  2. vertical Barra de desplazamiento
  3. Tabstop visible

Esto me ha molestado durante semanas. ¿Alguien puede iluminarme?

Respuesta

19

En el diseñador de diseño de diálogo, al diseñar el cuadro de diálogo, haga clic en la "flecha hacia abajo" en el cuadro combinado. A continuación, puede arrastrar hacia abajo en la parte inferior del contorno del cuadro combinado para aumentar su altura.

+3

MFC apesta !! Esto debería ser una propiedad ... ¿cómo más podría saberlo alguien? De todas formas, para PPL (como yo) pegadas con MFC, aquí hay un buen enlace: http://www.eggheadcafe.com/software/aspnet/29801328/how-to-increase-the-ccomb.aspx – TCSGrad

+2

En la equidad, eso no es algo de MFC, es algo de diseño de diálogo de código nativo, anterior a MFC. Y esos controles comunes son anteriores a la idea de "controles" a medida que pensamos en ellos, con propiedades, etc. Y también por lo que vale, ¡MFC era mucho mejor que la programación directa de API en C! Pero tienes razón, si no conoces este modismo para establecer el alto del menú desplegable de un combobox, es probable que nunca lo encuentres por tu cuenta. – jwismar

+0

Guau, para aquellos de nosotros que venimos de C# y VS2008-10, que nunca han usado nada anterior a C#, esto parece extremadamente poco intuitivo. Estoy bastante seguro de que nunca me hubiera dado cuenta de esto sin esta pregunta aquí. ¡Gracias! – JToland

9

Necesita aumentar la altura del desplegable del cuadro combinado en el diseñador.

A través del diseñador de forma predeterminada puede simplemente cambiar el tamaño del ancho del ComboBox. Si desea cambiar el tamaño de la altura de la lista desplegable, debe hacer clic en la flecha desplegable a la derecha, luego podrá cambiar el tamaño de la altura de control caída. Esto parece tan fácil, pero si nadie te dice que es todo menos intuitivo.

Espero que hayas entendido mi punto.

+0

¿Cómo hacer eso? ¿Puedes al menos decirme el nombre de la propiedad? – TCSGrad

+0

Entendido ... ¡¡No vi que hubieras editado tu primera respuesta, y mientras tanto habías marcado a la otra como la respuesta !! De todos modos, gracias a ambos ... también he incluido un enlace que describe esto con detalle ... :) – TCSGrad

2

Otro método para establecer la altura del menú desplegable del cuadro combinado es editar manualmente el archivo rc. Puede establecer el quinto parámetro que es responsable de la altura del menú desplegable (72 en este ejemplo).

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

También sufrí este problema y finalmente encontré la solución para mis aplicaciones MFC. El problema es que no apliqué la versión de manifiesto 6 a mis aplicaciones. Para resolver este problema, agregué el código para marcar el manifiesto de la siguiente manera:

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 

Funcionó bien. Puede consultar el enlace [aquí] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx) para obtener más detalles. Espero que ayude.

Cuestiones relacionadas