Resize-Verhalten bei einer ListBox



  • Hallo!

    Wenn ich die Größe einer ListBox in der Höhe verändere, passt es sich nicht wirklich an den vorgegebenen Wert an. Es verändert seine Größe nur in "Item-Height-Schritten", d.h. es ändert seine Größe so, dass gerade das letzte (auf die Sichtbarkeit bezogen) Item in der ListBox noch zu sehen ist.

    Muss ich die ListBox subclassen um dieses Verhalten zu umgehen, oder geht es einfacher?

    MfG,
    Aziz



  • Funktioniert, wie vermutet, mit Subclassing wunderbar.

    Hier der Code:

    WNDPROC OldListBoxProc = NULL; // muss global sein
    .
    .
    .
    // irgendwo im Code
    HWND hwndListBox = CreateWindowEx(NULL, "LISTBOX", ..., ...);
    OldListBoxProc = (WNDPROC)SetWindowLong(hwndListBox, GWL_WNDPROC, (LONG)ListBoxSubClassedProc);
    
    LRESULT CALLBACK ListBoxSubClassedProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
      switch(message)
      { 
      case WM_SIZE:
        return 0;
      } 
    
      return CallWindowProc(OldListBoxProc, hWnd, message, wParam, lParam); 
    }
    


  • Merke jetzt, dass die ListBox durch das Unterdrücken von WM_SIZE keine Scrollbars mehr anzeigen kann 😞

    Würd' mich über einen Lösungsvorschlag freuen!



  • Vielleicht über WM_GETMINMAXINFO 🤡



  • Ich verstehe nicht ganz. Kannst du mir deine Idee etwas näher erklären? Wenn ich WM_GETMINMAXINFO unterdrücke macht es keinen Unterschied; die ListBox weist immer noch das selbe Verhalten auf.



  • Nein, du könntest versuchen, dort die gewünschte Höhe zu setzen 😉



  • Hmm. Merkwürdigerweise kriegt die neue WindowProc keine einzige von dieser Message...

    Ich fürchte, mir wird der Weg nicht erspart bleiben, die ListBox mit einer ListView zu ersetzen. Ich vermute die ListView macht da keine Probleme..



  • hast Du schon das Stil-Flag LBS_NOINTEGRALHEIGHT probiert?

    Zitat:
    Specifies that the size of the list box is exactly the size specified by the application when it created the list box. Normally, Windows sizes a list box so that the list box does not display partial items.



  • Ähm, das hab ich nicht bemerkt 🙄

    Gut, dass du mir den Tipp gibst 😃
    Danke herzlichst!


Anmelden zum Antworten