[Win32/C++] Combobox laat geen dropdown lijst zien in xp

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • vincentgr
  • Registratie: Mei 2007
  • Laatst online: 05-01-2021
Hallo,

Ik heb in m'n programmaatje een combobox geplaatst, met daarin enkele items die allemaal in de WM_CREATE worden toegevoegd met ComboBox_AddString (). Het maken van de combobox window is natuurlijk ook in de WM_CREATE en ziet er zo uit:
C++:
1
2
3
4
5
hwndCombo_A = CreateWindow (WC_COMBOBOX, NULL,
                WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                0, 0, 0, 0,
                hwnd, (HMENU) IDC_COMBO_A, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                NULL);

De grootte van de combobox wordt bepaald in de WM_SIZE met een MoveWindow () aanroep.
Nu het probleem. In Vista gaat alles goed, de items staan in de combobox, en de lijst opent als je op het v knopje klikt. Maar in XP daarentegen opent de lijst zich niet als ik op het v knopje druk. Er verschijnt gewoon simpelweg niets extra's. Ik weet wel zeker dat de items zijn toegevoegd, want als ik een knop maak die ComboBox_SetCurSel () aanroept, verandert de selectie naar het goed item.
Ik heb de volgende messages gestuurd als controle:
- CB_GETDROPPEDWIDTH (ongeveer 110 op xp en vista)
- CB_GETITEMHEIGHT (wparam=0; geeft 15 op xp en vista)
- CB_GETMINVISIBLE (30 op xp en vista)
- CB_GETDROPPEDSTATE (1 op xp en vista, ik 'open' de combobox voordat ik de messages gebruik)
- CB_GETDROPPEDCONTROLRECT
Alleen de laatste laat duidelijk verschillende waarden zien op xp en vista. Op vista is namelijk het verschil tussen de top en bottom waarde in de RECT rond de 200, en op xp is dat maar rond de 20. Dat is dan denk ik ook het probleem.
Ik heb al geprobeerd de cx en de cy al in de WM_CREATE in te stellen, voor het geval dat 'ie de grootte daar al bepaald, maar dat werkte niet. Ik kan op MSDN ook geen messages vinden die ik kan sturen om de dropped control rect te veranderen.

Heeft iemand enig idee wat er met die combobox aan de hand kan zijn dat 'ie wel op vista en niet op xp opent?
Alvast bedankt,
Vincent

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
Ik heb het vermoeden dat je initiele grootte de size van je dropdown list bepaald, die dus nul is.

Hmm ff getest maar dit:
C:
1
2
3
4
HWND hCombobox = CreateWindow( L"COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                0, 0, 0, 0,
                hWnd, NULL, hInstance, NULL);
MoveWindow( hCombobox, 60, 62, 136, 200, TRUE );


Levert wel een normale dropdownlijst op ( XP 64 hier trouwens )

[ Voor 62% gewijzigd door farlane op 11-12-2009 22:42 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 16-09 11:44
Even denken... volgens mij had ik dat probleem ook wel een keer lang lang geleden in m'n VC++6 / MFC fase. Je moest goed uitkijken met de hoogte van een combobox met dropdown list, zelfs in de dialog editor van Visual Studio.

Hier iets van een uitleg gevonden: http://blogs.msdn.com/old...ve/2006/03/10/548537.aspx

Wat voor hoogte geef je de combobox mee? Je moet de hoogte inclusief die van de dropdown list meegeven en niet alleen van de combobox zelf... de reden dat het op Vista (en later) goed gaat is dat dit gedrag aangepast is in nieuwere versies van de Windows common controls.

Dat is denk de oorzaak van jouw probleem.

Acties:
  • 0 Henk 'm!

  • vincentgr
  • Registratie: Mei 2007
  • Laatst online: 05-01-2021
Heel erg bedankt allebei, m'n probleem is nu opgelost!
Het was inderdaad dat ik de combobox gewoon had ingesteld op cy=23.. Maar het gekke was dat ik het nog geprobeerd had om die wat te vergroten, maar blijkbaar was er iets misgegaan bij het kopiëren van de exe naar de gedeelde map met m'n virtuele xp.. Ik heb het nog eens geprobeerd (met cy=123) en nu doet 'ie het wel.
Hoe dan ook, het is nu opgelost, heel erg bedankt!

Vincent