2010-04-23 5 views
1

Je voudrais utiliser un CDateTimeCtrl pour permettre à l'utilisateur de sélectionner une date non-week-end. Ainsi, si l'utilisateur incrémente le jour (via une pression de touche) - et le jour résultant se trouve à tomber sur un week-end - alors le contrôle devrait sauter au lundi suivant (ne laissez pas les questions au sujet des changements de mois vous distraire, ce n'est pas pertinent).CDateTimeCtrl - la prévention du changement « de mise au point » lors de la mise jour

Habituellement, ce n'est pas un problème: lorsque je gère la notification DTN_DATETIMECHANGE, je peux vérifier la nouvelle date/heure et si elle se révèle être un week-end, je peux appeler SetTime sur le contrôle pour mettre à jour la date. Cependant, si je mets le style à DTS_SHOWNONE, cet appel à SetTime provoque le contrôle de déplacer l'entrée « focus » (terme utilisé vaguement) à la case « none », par exemple loin du champ de la journée. Cela empêche l'utilisateur d'utiliser l'entrée du clavier pour continuer à incrémenter la date à moins qu'ils utilisent ensuite la flèche droite pour réinitialiser le « focus », qui est juste méchant.

Je voudrais cher éviter ce changement de mise au point de se produire. Est-ce même possible?

Répondre

2

Je ne sais pas, mais une solution de contournement possible:

keybd_event(VK_RIGHT, 0, 0, NULL); 
keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, NULL); 
+0

semble fonctionner. Je suis sûr que je peux le généraliser pour tous les domaines. Bonne réponse. – WalderFrey

Questions connexes