Silviu Ardelean wrote:[...]
Categoric! Dar asta, din pacate, nu inseamna ca e ceea mai fericita implementare in spatele controalelor.
Imho, faptul ca foloseste intens SendMessage() in anumite situatii aduce o penalizare semnificativa. De exemplu, in momentul in care populam controale MFC ca cel de lista sau tree si ajung sa aibe un numar foarte mare de elemente de genul zecilor de mii sau chiar mai mult, atunci lucrurile incep sa "gafaie" si timpul ce umplere a controalelor creste exponential, interfata avand de suferit la capitolul "response".
[...]
In astfel de situatii folosirea listelor virtuale ca...
[...]
Desigur, vom cere celor de la MS sa-si bage mintile-n cap si sa-l marcheze pe
SendMessage ca "deprecated". In plus, ar cam fi timpul sa afle si ei ca moare omenirea de dorul unui combobox virtual.
Acuma serios si revenind incet-incet on-topic.
Am zis si altadata ca PreTranslateMessage nu-i locul unde "tot ce zboara se mananca".
Insa, pentru ce vrea Flaviu si asa cum a pus conditiile, e destul de OK si e pe departe de a
"aduce o penalizare semnificativa".
Cu remarca pe care am facut-o in postul anterior, poate folosi atat
::GetComboBoxInfo (sau
CComboBox::GetComboBoxInfo) cat si
SendMessage cu
CB_GETCOMBOBOXINFO.
IN NICI UN CAZ NU
PostMessage(CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbi).
De ce oare?
Simplu, pentru ca, precum bine (ar trebui sa) stim, functia
PostMessage e asincrona, adica introarce imediat neasteptand ca acel mesaj sa fie procesat. Acuma, pentru ca in LPARAM i-am bagat un parametru de OUT, in mod sigur ce bagam aia scoatem. Deci n-am facut nimic.
M-am exprimat destul de clar sau cerem la MS si-o notificare gen CBN_GETCOMBOBOXINFODONE ca sa stie si parintele cand ce si cum s-a procesat.
