Comment envoyer un CBN_SELCHANGE message lors de l'utilisation de CB_SETCURSEL?
Lors de l'utilisation de la CB_SETCURSEL message, le CBN_SELCHANGE message n'est pas envoyé.
Les modalités de notification d'un contrôle que la sélection a été changé ?
P. S.
J'ai trouvé sur le Sexchange site, un très laid hack :
SendMessage( hwnd, 0x014F/*CB_SHOWDROPDOWN*/, 1, 0 );
SendMessage( hwnd, 0x014E/*CB_SETCURSEL*/, ItemIndex, 0 );
SendMessage( hwnd, 0x0201/*WM_LBUTTONDOWN*/, 0, -1 );
SendMessage( hwnd, 0x0202/*WM_LBUTTONUP*/, 0, -1 );
Va faire pour l'instant... Pas vraiment.
P. S. 2
Pour résoudre mon problème, je vais suivre de Ken suggestion dans les commentaires.
OriginalL'auteur anno | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas censé utiliser CBN_SELCHANGE à moins que le changement dans la sélection a été faite par l'utilisateur.
Vous ne pas indiquer dans quelle langue vous utilisez; il serait plus facile pour vous fournir une solution de contournement si vous l'avez fait.
À Delphes, où un OnChange() serait associé à la zone de liste déroulante, il vous suffit d'appeler la méthode événements directement:
Êtes-vous à l'aide d'une bibliothèque d'interface graphique comme les MFC, ou directement à des appels Win32? Si c'est tout droit Win32, utilisez le débogueur de votre gestionnaire de message en boucle. Déposez-la sur votre code pour la gestion des CBN_SELCHANGE, et de regarder les valeurs qui sont transmis en tant que WPARAM et LPARAM lorsque vous modifiez un élément dans la zone de liste déroulante (que l'utilisateur normal). Vous pouvez ensuite utiliser essentiellement la même Delphi PostMessage() code que j'ai montré ci-dessus, en transmettant les valeurs appropriées pour WPARAM et LPARAM, par programmation dans votre code juste après la publication de la CBN_SETCURSEL message. Si vous êtes à l'aide de MFC, je ne peux pas aider (et vous avez toute ma sympathie <g>).
Je ne suis pas à l'aide de MFC, mais j'ai trouvé beaucoup de code dans MFC 🙁 (stackoverflow.com/questions/59280/...).
Comme je l'ai dit, vous avez toute ma sympathie. <g> Une alternative à ma dernière suggestion serait d'utiliser une fonction distincte de ce que vous appelez dans votre gestionnaire d'événements pour répondre à CBN_SELCHANGE; au lieu de publier CBN_SELCHANGE vous-même après la publication CBN_SETCURSEL, vous pouvez directement appeler cette fonction.
Oui, je pense que je vais refactoriser mon code pour que j'ai la même action lors de l'envoi d'un CB_SETCURSEL message et lorsque l'utilisateur effectue une sélection. Merci pour une réponse utile.
OriginalL'auteur Ken White
Cela peut aider la personne suivante:
OriginalL'auteur Keith McCall
Je viens de découvrir l'appel de ces SendMessages à la zone de liste déroulante deux fois... je sais que c'est pas parfait, mais il a travaillé pour moi. (Écrit en VB6)
OriginalL'auteur Ernie